487. H&M Personalized Fashion Recommendations | h-and-m-personalized-fashion-recommendations
首先,感谢竞赛组织者举办这场精彩的比赛。
我很遗憾错过了金牌,但通过这次比赛我获得了很多经验!
我将分享我的解决方案,包括引导我尝试该解决方案的思考过程以及那些无效的方法。
由于 GBDT 模型曾在 Kaggle 过去的推荐竞赛(如这个)的顶级解决方案中被使用,我在比赛早期尝试了 GBDT 模型并取得了不错的分数。
我没有使用 LGBMRanker 和 CatboostRanker(损失函数:YetiRank)等排序模型,因为将此任务作为分类问题解决提供了更好的结果。最终,我使用了预测速度较快的 Catboost。
我仅使用了最后一周的交易数据(2020-09-16 至 2020-09-22)进行验证。
我使用非验证数据(~2020-09-15)创建特征,并根据在验证期间(2020-09-16 至 2020-09-22)是否购买了该商品创建了 0/1 标志。
交叉验证策略
5fold / GroupKfold(customer_id)
我为 68,984 名客户生成了总共 27,341,620 个候选。
(*) 我使用了 2020-09-16 至 2020-09-22 期间的前 300 个热门商品,而不是 2020-09-09 至 2020-09-15。结果是,与其他竞争对手相比,LB 和 CV 之间的差异相对较小。(CV: 0.0385, Public LB: 0.0326, Private LB: 0.0330)
对于候选生成,我尝试了以下其他方法,但没有奏效。
department_no、section_no 和 product_type_no 的商品department_no、section_no 和 product_type_no 的商品。)age, gender 等)product_code, section_no 等)通过添加此 CF 特征,分数提高到了 CV: 0.0385, Public LB: 0.0326。
然而,当我根据稍微不同的条件创建过多的 CF 特征时,由于某种原因 CV 上升了但 LB 下降了。(CV: 0.0397, Public LB: 0.0319)
我在一个 Catboost 模型中训练了所有候选。
我也尝试针对候选生成的每个原因训练不同的模型,但性能没有提高。
由于此数据不平衡(正样本:27272479,负