返回列表

26th place solution

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

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

第26名方案

作者: Sumire, ruik
比赛: H&M Personalized Fashion Recommendations

首先,感谢 Kaggle 团队、H&M 员工和所有的参赛者。
这是一个非常有趣且设计精良的比赛(虽然有一点小波折),我很兴奋能参与其中。
很荣幸我们的团队(@ruik 和我)在 Private Leaderboard 上获得了最高排名,但我们也感觉到了通往金牌的“墙壁”。
我们会继续努力,直到成为 Master。
无论如何,让我分享一下我们的解决方案。如果您能对我们的方法提出评论或建议,我会非常高兴。

流程(Pipeline)

与其他人没有太大区别,非常简单。

  1. 从每位客户过去 N(=96) 周的历史交易中生成基础候选集。此时不包含历史交易中未出现的商品交易,因此该方法基于“他们会复购什么?”
  2. 添加候选集
  3. 创建特征
  4. 使用 LGBMRanker 进行拟合/预测
  5. 后处理

如何添加候选集

  • 使用 word2vec 作为 item2vec 计算商品嵌入向量,然后选择 N(=48) 个嵌入向量与预测向量(作为“下一次购买”)具有高相似度的候选商品。
  • 添加与每位客户最近 N(=3) 笔交易中的“配对”具有相同产品代码的候选商品。(感谢 Mr.Giba 的 notebook
    请注意,这些方法仅适用于拥有足够历史交易的客户。

创建特征

与获胜者相比差别不大。

  • 商品特征
    • 过去 N 周的销量(不仅针对商品本身,还包括商品所属的属性,如“department_name”)+ 按年龄细分的销量
    • 购买的最高/最低/中位价格(使用全局中位数进行平滑)
    • 在线购买率
    • 距离所有客户上次购买的天数
    • 距离商品首次销售的天数
  • 客户特征
    • 年龄:分箱并调整(如果年龄 < 20 则为 10,如果年龄 >= 60 则为 60)
    • "club_member_status"(俱乐部成员状态)、"fashion_news_frequency"(时尚新闻频率)
    • 属性:根据购买商品的 index_code 估算(例如,如果客户通常购买“Ladieswear”,则她被估算为“Lady”)
    • 购买的最高/最低/中位价格(使用全局中位数进行平滑)
    • 距离客户上次购买的天数
  • 客户 x 商品特征
    • 每个商品/客户组合距离上次购买的天数
    • 历史交易中出现的每个商品/客户对的数量
    • 每个年龄/属性的商品购买率(交易)
    • 商品价格(最高/最低/中位数)与客户价格(最高/最低/中位数)的比率(例如,如果商品最低价与客户最高价的比率超过 1,我们可以估计“他没有预算购买该商品。”

使用 LGBMRanker 进行拟合/预测

我们将客户分为 3 折,比例为 30/35/35%(实际上,起初是为了快速进行实验)。
接下来,我们对每一折客户训练 LGBMRanker 并进行预测。然后对预测结果应用加权平均(0.3/0.35/0.35)。
训练/验证周期只有 1 组,验证集是最后 1 周,训练集是验证前的最后 3 周。
在使用 Optuna 进行参数调整后,我们在预测测试集时使用最后 3 周的数据重新训练模型。

后处理

我们对在过去 N(=96) 周内没有或少于 12 个候选(交易)的客户的预测应用后处理。

  • 对于在过去 N(=96) 周内没有候选的客户,我们预测为上周销量前 12 的商品(+0.0002)
  • 对于有 K(<12) 个候选的客户,我们预测为各年龄组上周销量前 12-K 的商品(+0.0001)

这些方法提高了约 0.0003 的分数。(虽然微小,但是重要的改进)

什么没有奏效

同比赛其他方案