第10名方案
第10名方案
作者:flg (Grandmaster)
比赛:H&M Personalized Fashion Recommendations
首先,感谢 H&M 和 Kaggle 提供了这么棒的比赛。我非常喜欢这次比赛,这是一种非常好的挑战类型,因为它对计算资源的要求不高(不过度依赖算力),并且允许采用广泛的解决方案。
许多 Kagglers 已经分享了他们的方案,由于我遵循了与大多数人相同的框架,我将只提及一些不同之处。
CV-LB 相关性
- 许多人报告了 CV(交叉验证)和 LB(排行榜)之间存在差距,或者当模型改进时出现“放缓”现象。我从未遇到过这种情况,我的 CV 和 LB 之间的线性拟合结果为:f(x) = 0.793x + c,R²=98.96%。
- 这个问题很可能是由于来自未来的信息泄露造成的。例如,当我使用截止到 9月15日 的所有数据训练一个 CF(协同过滤)模型,然后将其用于预测 9月1日 那周的数据时,我会通过隐式使用未来的购买信息来提高我的 CV 分数。
- 我通过为每周训练一套完整的模型来避免这种情况。我用创建模型时使用的最后日期来标记模型。这样就不可能泄露任何信息。
- 虽然这听起来不错,但这也就是我的“败笔”。我根本没有足够的算力来针对许多不同的模型和周数进行这项工作。这就是为什么我的召回方法比顶级方案的多样性要差得多,也是为什么我最终只使用了四周的训练数据。
检索策略 / 特征
- 除了许多人使用的功能(复购、I2I、CF、热销商品等)之外,我还创建了一个简单的销量预测模型。它根据商品最近的销量来预测下周的销量。
- 该模型的主要用途是帮助检测正在逐步上市或退市的商品(因为我们没有该数据)。
- 示例:一款仅在短时间内可用的商品(特殊合作款等)的日销量可能如下:0 0 28 431 389 105 32 11。使用最近的流行度会大大高估下周的销量,而预测模型则学会了该商品正在逐步退市(缺货)。
- 最终它成为了最常用的特征之一,可能是因为它在一个特征中涵盖了流行度和(未来)可用性。
- 我用于相似度计算的主力工具是 LightFM(BPR 和 WARP,包含和不包含商品特征)。我将其用于推荐和商品对商品的相似度计算(通过比较特征嵌入)。
硬件 / 优化
- 台式机,12核 CPU 和 64GB 内存。
- 我大量使用了特征存储。
- 为了将训练数据大小与可用内存解耦,我从 HDF5 文件训练我的 LightGBM 模型。
- 最终模型是四个 LightGBM 模型的集成。但改进相当小,与单个最佳模型相比仅提升了约 1%。