487. H&M Personalized Fashion Recommendations | h-and-m-personalized-fashion-recommendations
首先,感谢竞赛主办方举办了这场有趣的比赛,也感谢我优秀的队友们 (@Giba, @qysx, @hyd)。其次,感谢 Kaggle 社区,我从那些优秀的 Kernel 和讨论中学到了很多。
在本次比赛中,我们需要根据用户的历史购买行为向其推荐产品。为了解决这个问题,我们的方案分为两部分:召回 和 排序。生成候选集的良好策略和特征工程对于取得好名次都至关重要。
我们使用了多种方法来生成不同的候选集,以提高正样本的覆盖率(包括用户和用户-商品对)。
最重要的特征如下:
我们使用最后 9 周的数据进行训练(最后一周用于验证)。我们最好的单模型是 CatBoost,CV 分数为 0.0403,LB 分数为 0.0341。我们使用了多个模型进行集成(CV: 0.0412, LB: 0.0348)。我们使用了 Giba 之前分享的 Kernel 来处理混合时的不同候选列表。
| 模型 | 目标函数 | 每用户平均候选数 | CV MAP@12 |
|---|---|---|---|
| catboost | binary | 120 | 0.0403 |
| lightgbm | binary | 120 | 0.0395 |
| catboost | binary | 220 | 0.0402 |
| lightgbm | binary | 220 | 0.0396 |
| lightgbm | lambdarank | 220 | 0.0400 |
| lightgbm | lambdarank | 1000 | 0.0381 |
我们最佳 CV 的结果在 PB(Public Board)上也是最好的。在 Kaggle 上相信本地 CV 真的非常重要。
根据过去 2 周的销售热度设定约 1 万个 article_id 候选列表。构建一个包含 customer_id x 10k article_id 所有组合的二分类数据集。分批构建该海量数据集并使用 cudf 加速整个过程。从第 90 周到第 104 周创建二分类训练集。在第 90-103 周训练模型,在第 104 周验证。为了训练模型,为每个 customer_id 随机选择 200、300 或 500 个负样本。混合使用 LightGBM lambdarank、LightGBM xendcg、XGBoost lambdarank 和 CatBoost ranker 训练的模型