第17名解决方案
作者: chimuichimu | 比赛排名: 第17名
首先,感谢 OTTO 和 Kaggle 组织了这场精彩的比赛。
在这里我想分享我的部分工作。
概述
- 我的部分
- 两阶段推荐系统
- 每个会话 100-200 个候选项
- 排序模型使用了 100 个特征
- 交叉验证策略
- 本地验证:使用第3周数据训练,第4周数据验证
- 提交阶段:使用第4周数据训练
- 分数 -> 公榜: 0.598, 私榜: 0.597
- 团队方案
- 通过排名投票 集成我的模型输出与队友的模型输出
- 分数 -> 公榜: 0.601, 私榜: 0.600
候选生成
通过以下方法生成候选项。
每个会话的候选项中位数:点击 为 100,加购 为 180,订单 为 200。
- 历史行为
- 共访矩阵
- 矩阵类型
- action2action
- action2click, action2cart, action2order
- action2buy
- buy2buy
- 权重
- word2vec (使用 Gensim Word2Vec)
- node2vec (使用 PyTorch Geometric Node2Vec)
特征工程
创建了大约 100 个特征来训练模型。
我认为我的特征与其他参赛者相比并不特别,但下面给出了一些例子。
- CF 分数
- 物品 特征
- {type} 的数量*
- {type} 数量与行为数量的比率
- 一个会话中 {type} 的平均数量
- 一个会话中 {type} 后出现 {type} 的概率
- 用户 特征
- 会话大小
- 唯一物品数量
- 唯一物品数量与会话大小的比率
- 物品 x 用户 交互特征
- {type} 的数量
- 按新近度加权的 {type} 数量
- {type} 数量与会话大小的比率
- 距离上次 {type} 的经过时间
- 物品相似度
- 通过 word2vec 和 node2vec 嵌入的余弦相似度
- 最后一个 aid 与候选项的相似度
- 最后 3 个 aids 与候选项的平均相似度
- 最后 5 个 aids 与候选项的平均相似度
*{type} 表示点击、加购 或订单。
排序模型
- 我使用了 LightGBM ranker
- objective: lambdarank
- boosting_type: gbdt
模型集成
- 对于每种类型,集成两个候选生成略有不同的 LightGBM ranker 的输出
- 分数 -> 公榜: 0.598, 私榜: 0.597
- 之后,通过排名投票集成我的模型输出与队友的模型输出
- @dehokanta & @zakopur0 模型
- 分数 -> 公榜: 0.598, 私榜: 0.597
- @t88take 模型
- 分数 -> 公榜: 0.594, 私榜: 0.594
- 最终分数 -> 公榜: 0.601, 私榜: 0