返回列表

3rd place solution

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

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

第3名解决方案

作者:sirius
比赛排名:第3名

首先,感谢 Kaggle 官方工作人员和 H&M 团队组织了这场有趣的比赛。作为一名新的 Kaggler(但也是一名老推荐系统从业者),我非常享受这次比赛,并且非常高兴能获得这个名次。同时,感谢所有的竞争对手和社区,我从大家那里学到了非常多的东西,这对我来说比 8000 美元的奖金收获更大🤓。最后,我必须感谢新冠疫情让我在家隔离了两个月😂,这迫使我在业余时间专注于比赛,因为没有外出活动,尤其是在五一假期期间。

由于我的流程与其他人非常相似(候选生成 + 排序),而且我注意到我的解决方案大部分(无论是召回方法还是排序特征/模型)已经在其他人的帖子中被使用和描述过,我在这里只简要介绍一下我的案例中不同且有用的部分。(以下 LB 分数均为单模型 Private 分数。)

  • 关于召回策略的特征:该文章是否被 strategy_name 召回,以及该文章在 strategy_name 下的排名(因为我已经根据某种指标对每个召回策略下的候选项进行了排序,排名数字可以反映相关性)。这些特征,加上每个用户的候选项数量从几十个扩展到几百个,将我的 LB 分数从 0.02855 提升到了 0.03262,这改变了奖牌的颜色,从银牌变成了接近金牌。此外,如果我只增加召回数量而不添加召回特征,CV 分数会非常差。
  • BPR 矩阵分解:用户和文章的相似度对于排序很重要。关于 item2item 相似度的特征,例如一起购买计数和 word2vec,在大多数竞争对手的模型中都很常用,这些也大大提升了我的分数,但对我模型提升最大的是从 BPR 矩阵分解中获得的 user2item 相似度。这个 BPR 模型是使用 implicit 库,利用目标周之前的所有交易进行训练的(我为每周训练了一个 BPR)。BPR 相似度的 AUC 约为 0.720,而整个排序模型的 AUC 约为 0.806,其他单个特征的最佳 AUC 约为 0.680。最后,这个单一的相似度特征将我的 LB 分数从 0.03363 提升到了 0.03510,这让我从金牌区域进入了获奖区域。

欢迎提出任何问题。感谢阅读!

-----------------------更新 2022.05.15------------------------------

召回

  • 最热门的商品
  • 用户最近购买的商品
  • 与用户最近购买商品相关的商品
  • 用户属性(年龄、性别等)下的热门商品
  • 与用户最近购买商品具有相同 prod_name 的商品

排序

样本

  • 客户在目标周未购买的生成候选项标记为 0,购买的标记为 1
  • 由于样本极度不平衡(正负样本比例约为 1:300),采用了下采样。我只保留数量为 30*len(pos_samples) 的负样本
  • 正样本仅包括在候选项中被召回的那些,用户实际购买的其他商品不包括在内。

特征

  • 用户和商品静态属性
  • 过去 7 天、30 天和所有交易中用户-商品和用户-商品属性的计数。
  • 交易中最后一次出现用户-商品和用户-商品属性的天数差;
  • 用户和商品之间的相似度:
    • BPR 矩阵分解 user2item 相似度
    • word2vec item2item 相似度
    • 用户购买商品的属性与目标商品属性之间的 Jaccard 相似度
    • 通过公共预训练模型获得的嵌入计算文本相似度和图像相似度
  • 商品热度:
    • 过去 7 天、30 天和所有交易中购买的商品/商品属性计数;
    • 时间加权热度,权重为 1/(当前日期减去购买日期的天数)
    • 来自 这个 kernel 的每周趋势得分
  • 关于召回策略的特征:
    • 该文章是否被 strategy_name 召回
    • 该文章在 strategy_name 下的排名

模型

每个模型的指标非常相似。最终版本是 16 个模型的平均得分,这些模型使用不同的超参数(学习率、max_depth 甚至随机种子)

同比赛其他方案