如何合理合并物品属性与用户交互DataFrame以用于Decision预测
方案合理性与实现方法
1. 转宽表方案的合理性判断
这种方案有适用场景,并非通用最优解,你可以结合自身情况判断:
适用场景
- 用户规模较小(通常在千量级以内),不会出现特征维度爆炸的问题
- 你的预测目标是物品维度的Decision,不同用户对物品的决策可以作为反映物品受欢迎程度、适配人群的有效特征
不适用场景
- 用户量级过万时,宽表会出现大量空值,特征稀疏度过高,反而会降低模型效果,此时更建议直接对用户交互数据做聚合统计,比如计算物品的决策均值、正负决策占比、交互用户总数等聚合特征,比稀疏宽表效率高很多
- 你使用的模型对稀疏特征支持度差,也不建议采用该方案,可替换为上述聚合特征或者用户交互嵌入特征
2. 合并操作实现(基于Pandas)
核心思路是先将用户交互表做行转列透视,再按itemId和物品属性表关联,代码示例如下:
import pandas as pd # 假设物品属性表变量名为item_df,用户交互表变量名为user_item_df # 第一步:将用户交互表透视转为宽表,列名自动增加_decision后缀 user_decision_wide = user_item_df.pivot( index="itemId", columns="userId", values="Decision" ).add_suffix("_decision").reset_index() # 第二步:将透视后的宽表和物品属性表按itemId左连接 final_df = pd.merge( left=item_df, right=user_decision_wide, on="itemId", how="left" )
特殊情况处理
如果存在同一个用户对同一个物品有多条Decision记录,直接用pivot会报错,可以改用pivot_table先做聚合,示例如下(以取决策均值为例,也可根据业务替换为aggfunc="last"取最新值、aggfunc=lambda x:x.value_counts().index[0]取众数等):
user_decision_wide = user_item_df.pivot_table( index="itemId", columns="userId", values="Decision", aggfunc="mean" ).add_suffix("_decision").reset_index()
内容的提问来源于stack exchange,提问作者futuredataengineer
相关产品推荐
相关产品推荐

