第10名方案
第10名方案
作者:MichaelG (MASTER)
比赛排名:第10名
感谢 OTTO 和 Kaggle 举办了如此有趣的比赛,我的方案非常直接,就是候选生成 + 重排序模型,简要总结如下。
候选生成
- 重访问: 所有访问过的项目。
- 共访1 (co-visit1): 基于公开 Notebook 并进行了两点改进。感谢 @radek1 和 @cdeotte。
- 通过权重衰减生成候选,例如一个会话有 N 个项目(按反向时间戳排序 idx1)且每个项目有 M 对共访项目(按时间权重或类型权重排序 idx2),分数计算为每个项目和候选对的 1 / idx1 / idx2,然后将这些分数求和作为候选分数。
- 用于重排序模型的共访特征 —— 成对项目共现的计数和概率、索引距离和时间距离(考虑顺序或不考虑顺序)等。
- 共访2 (co-visit2/buy2buy): 仅包含购物车或订单。
- 共访3 (co-visit3/next item): 生成候选时仅考虑最后一个项目。
- sknn1: 简单的 sknn,选取 100 个最相似且最近的会话。
- sknn2: sknn 的一种变体,名为序列和时间感知邻域,参考 https://arxiv.org/abs/1910.12781 实现了这两种 sknn。
重排序模型
- aid 特征: 按时间窗口(7、14、21天)的简单统计。
- 会话特征: 长度、aid 数量、按类型计数、到预测期结束的时间。
- 重访问 aid X 会话: 点击/购物车/订单计数、绝对/相对位置。
- 共访特征: 如前所述,生成大量特征来描述成对项目的共现情况。
- sknn 特征: 仅包含候选分数/排名。
- 相似度特征: 通过 word2vec 和 implicit 的 BPR 项目嵌入,计算候选项目与会话之间的相似度。
最后,使用 LightGBM (lambdarank) 训练了 3 个模型(点击/购物车/订单)。