返回列表

17th place solution

487. H&M Personalized Fashion Recommendations | h-and-m-personalized-fashion-recommendations

开始: 2022-02-07 结束: 2022-05-09 商品推荐 数据算法赛
第17名解决方案

第17名解决方案

作者:Apolo
比赛排名:第17名

首先,感谢竞赛组织者举办这场精彩的比赛。

我很遗憾错过了金牌,但通过这次比赛我获得了很多经验!

我将分享我的解决方案,包括引导我尝试该解决方案的思考过程以及那些无效的方法。

概述

由于 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 个候选。

  • 前 300 个热门商品*
  • 以前购买过的商品
  • 与以前购买过的商品具有相同 product code 的商品

(*) 我使用了 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)

对于候选生成,我尝试了以下其他方法,但没有奏效。

  • 未使用的想法1
    按年龄或性别划分的前 300 个热门商品
  • 未使用的想法2
    与以前购买过的商品具有相同 department_nosection_noproduct_type_no 的商品
    (这个想法源于这样一个事实:13.8% 的客户在 3 周内购买了具有相同 department_nosection_noproduct_type_no 的商品。)
    (参考:此笔记本

特征工程

客户特征
  • 客户属性(age, gender 等)
  • 每个客户过去重复购买同一商品的次数
  • 平均购买间隔 / 平均购买间隔与上次购买日期的差值
  • 平均价格 / 最高价格
  • 每个客户的平均 channel_id
商品特征
  • 商品属性(product_code, section_no 等)
  • 每周销售数量(week0~week5)
  • 每日销售数量(day0~day6)
  • 每个商品的平均 channel_id
客户 x 商品特征
  • 具有与候选商品相同属性的上次购买日期
  • 每个客户的平均 channel_id 与每个商品的平均 channel_id 之间的差异
  • 同年龄段客户对候选商品的购买率
  • 客户过去购买的商品中具有与候选商品相同属性的商品百分比
  • CF 特征(协同过滤)(参考:此笔记本

通过添加此 CF 特征,分数提高到了 CV: 0.0385, Public LB: 0.0326。
然而,当我根据稍微不同的条件创建过多的 CF 特征时,由于某种原因 CV 上升了但 LB 下降了。(CV: 0.0397, Public LB: 0.0319)

模型

我在一个 Catboost 模型中训练了所有候选。
我也尝试针对候选生成的每个原因训练不同的模型,但性能没有提高。

超参数调整

由于此数据不平衡(正样本:27272479,负

同比赛其他方案