第25名解决方案
第25名解决方案
作者:keisuke | 排名:第25名
感谢 Kaggle 和 H&M 举办了这场非常精彩的比赛。这是我第一次在 Kaggle 平台上投入大量的业余时间,我从这次比赛中学到了很多。感谢所有优秀的 Notebooks 和讨论,它们对我的策略构建帮助很大。
我的策略相对简单,没有做什么特别的事情,只是遵循了 @paweljankiewicz 的 绝佳建议。
候选生成
- 复购(虽然我仍然好奇为什么这在比赛中如此重要……)
- 几种协同过滤方法
- ItemkNN
- 带重启的随机游走
- 带负采样的矩阵分解
- 对于 ItemkNN,我使用了所有交易数据,并根据时间戳的推移赋予衰减权重。这种加权在保持召回率的同时减少了冷启动用户的影响。ItemkNN 给我带来了最大的提升。
- 我使用 Julia 语言来实现这些算法。
- 来自(全局/分段)热门商品的候选也很有帮助。
重排序
- 模型使用的是 LightGBM LambdaMART,特征基于热度、用户-商品交互和趋势。这部分可能和许多参赛者类似。
- 排名特征(商品在生成候选中的排名)非常重要。
- 随着候选数量的增加,调整正样本比例和对负样本进行采样以处理标签不平衡变得越来越重要(实际上有讨论建议这样做)。
我的环境
- 起初,我使用 cudf 和附带 GPU 的 Notebook 实例。
- 随着生成的候选和特征越来越多,即使是 cudf 也难以处理如此大的表格,所以我切换到了 Google BigQuery。我将所有预处理代码移到了 SQL 中。BigQuery 为我提供了一种更具扩展性的方式来处理表格数据。
- 因为我从四月初才开始专注于这场比赛,所以我只有一个月的时间来攻克。在切换到 BigQuery 后,我也转移到了 GCP Vertex Training,在按需的高内存机器(最终配置为 512GB RAM)上并行运行大量实验。这对进行大量的试错非常有用。
我的最佳模型成绩
- CV(交叉验证): 0.03861
- Public LB(公开排行榜): 0.03225
- Private LB(私人排行榜): 0.03252
谢谢。