第14名方案(Ethan & qyxs 部分)
第14名方案(Ethan & qyxs 部分)
作者: Ethan |
比赛: OTTO Recommender System |
排名: 第14名
感谢 OTTO 和 Kaggle 举办了这么棒的一场比赛。感谢我优秀的队友 @juzqyxs、@rib 和 @ria。
验证
使用最后一周的会话数据。
召回
使用了两种传统方法:
- u2i: 用户之前操作过的商品。
- i2i: ItemCF(基于物品的协同过滤),我们针对每个任务(点击、加购、下单)分别进行。并且我们使用了多种权重来优化其性能,例如两个商品之间的“时间间隔”、“位置间隔”、“类型差异”。
排序
- 基于会话: 计数、最后一次操作的时间间隔(点击/加购/下单)、最后一次操作类型。
- 基于商品: 计数、比率(点击率、加购转下单率等)、时间。
- 基于会话+商品: 计数、最后一次操作的时间间隔(点击/加购/下单)、最后一次操作类型。
- w2v 嵌入: 候选商品与会话历史商品之间的差异和相似度,然后使用 mean、max、min、last、std 等统计量。
- 协同过滤分数: i2i 的协同过滤分数,计算候选商品与用户历史商品之间的关联得分。
- 窗口统计特征: 在每个会话最后时间点的前后不同窗口(1天、3天)内,商品的计数和比率特征。
- 使用更多周的数据进行训练,我们在最终提交中使用了 3 周的数据。
- 使用不同的随机种子生成更多的训练数据(会话的不同截断点),最后我们使用了 5 个种子。
这些操作在本地 CV 上带来了 0.001 的提升。
- LightGBM 二分类器,学习率:0.05,迭代次数:1000 轮。
- CatBoost 二分类器,学习率:0.05,迭代次数:6000 轮。
融合这两个模型的结果得分 LB: 0.600。
有趣的发现
在优化“下单”任务时:
orders_prob = 0.7 * orders_prob + 0.2 * carts_prob + 0.1 * click_prob,这在“下单”任务的本地 CV 上带来了 0.0004 的提升(在三个任务的同一会话上评估)。
- 我的队友 rib 将“加购”和“下单”的训练数据拼接起来,并增加了一个特征(0 或 1)来标记样本是否来自“加购”,这能让“下单”的分数提升 0.0003。
模型融合
对于最终提交,我们使用投票法与 Rib 和 ria 的结果(不同的候选集,LB: 0.601)进行了融合,最终 LB 达到了 0.602。