487. H&M Personalized Fashion Recommendations | h-and-m-personalized-fashion-recommendations
首先,感谢 H&M 和 Kaggle 平台的努力,为我们带来了这次精彩的体验~
让我介绍一下我的方案,并尝试指出与表现更好的方案相比存在的不足。
0. 方案框架
像大多数其他参赛者一样,我使用了召回和排序的两阶段策略。
1. 本地验证集生成
我只使用了最后一周来创建本地验证集。
最后一周的唯一 customer_id 数量只有大约 6 万,但完整数据集中的总客户数量为 130 万,显然,这会限制排序步骤的泛化能力。
2. 召回阶段
我仅依靠单一的 ItemCF(基于物品的协同过滤)算法来完成召回工作。我还使用了物品的流行度作为额外权重,这对提升 mAP 分数很有帮助。
其他参赛者通常利用多路召回策略。除了 ItemCF、u2i 之外,图模型、SVD、历史物品等方法也被包含在他们的召回阶段。我想这就是我最终只排名第 30 的主要原因。
实际上,我尝试过 DeepMatch,但效果不佳。我猜默认的“最后一项训练策略”并不适合 H&M 数据集。我认为原因是很多客户最后一次购买和之前购买之间的间隔很长,这使得训练物品嵌入变得困难。如果修改“最后一项训练策略”,可能会更有用,但我没有额外的时间去做。
我最终的召回阶段在 LB(排行榜)上的得分约为 0.028。
3. 排序阶段
我在这部分使用了带有 LambdaRank 的 5 折 LightGBM。
我尝试过 DIN 和 DeepFM 等神经网络模型,但它们没有击败 LGB。
我的特征工程集中在客户和物品之间的交互上。包括物品频率、购买时间间隔和类别特征统计(类型、颜色、部门等)。
值得注意的是,我还在排序部分使用了从图像文件生成的向量来评估历史物品和候选物品之间的相似度,但这并没有带来很大的提升。
我的排序阶段最终在 LB 上得分为 0.031,相比召回部分仅带来了额外的 0.003 mAP 分数。我相信本地数据集生成策略限制了排序模型的能力。
LB 领先者通常使用 6 周或更多数据作为训练集。显然,更多的数据可以带来额外的好处,以增强排序部分的泛化能力。
4. 团队
我不得不说,一个好的团队非常有价值。独自完成这场比赛非常累人。
我强烈建议每个人都尝试与他人一起参加 Kaggle 比赛(如果你不介意错失单人金牌,哈哈)。这不仅可能带来更高的排名,团队成员的鼓励在任何时候都是必不可少的。