返回列表

13th place solution

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

开始: 2022-02-07 结束: 2022-05-09 商品推荐 数据算法赛
第13名解决方案
作者:Tomomu Iwai (Team: pksha Don't let recommend)
比赛:H&M Personalized Fashion Recommendations
排名:13th Place (Gold Medal)

在介绍我们的解决方案之前,我要感谢 Kaggle 工作人员和 H&M 团队,以及排行榜上所有与我们竞争的选手。当然,特别感谢我的队友 @A.Sato@taksai@tomo20180402,感谢他们的出色努力。我们很荣幸能获得金牌!

总体策略

我们解决方案的总体策略基于四个步骤:

  1. 候选选择
  2. 特征工程
  3. 排序
  4. 模型融合

关键点

我们训练了三个具有不同候选选择方法的 LightGBM 排序模型,并最终使用集成技术来提高我们的分数。

我们解决方案的核心思想是利用 item2vec 嵌入,这是一种受 word2vec 启发的算法。

商品嵌入直接使用 item2vec 嵌入,而客户嵌入是通过对每个客户过去购买的所有商品在所有维度上取平均值来创建的。

步骤 1:候选(商品)选择

在候选选择阶段,我们尝试为每个客户采样正样本和负样本。三个模型的候选选择方法各不相同,模型之间候选的多样性在集成后提升了我们的分数。

模型 1

模型 1 的集成方法结合了 4 种策略。使用过去 14 周的数据来训练该模型。

  1. 每个客户最近购买的 50 件商品
  2. 与策略 1 中每件商品具有相同产品代码的前 20 个产品
  3. 每个 sales_channel_id 组中所有客户上周的前 100 件商品
  4. 每个 [sales_channel_id, index_group_no] 组中所有客户上周的前 30 件商品

模型 2

除了最近购买的商品(以及与最近购买商品具有相同产品代码的商品)外,我的主要模型完全依赖于最近 10,000 名客户中的局部流行度。

  1. 我通过获取客户过去购买商品的 item2vec 嵌入表达式(32 维)的平均值来获得用户的潜在表达。
  2. 然后根据用户潜在表达的余弦相似度,为每个客户选择 10,000 名最相似的客户。
  3. 然后从这 10,000 名最近似的客户中,挑选上周最流行的前 300 件商品作为候选。

就单模型而言,这种方法在三个模型中得分最高(Private LB 330 名左右)。

模型 3

首先,我根据以下技术为每个客户创建了 4 种类型的聚类。(基于商品的嵌入通过过去购买商品的每个维度取平均值来创建客户嵌入)

  • Swin-Transformer 图像嵌入
  • 每个客户的年龄
  • 基于 item2vec 的商品嵌入
  • postal_code2vec(受 item2vec 启发)嵌入

在聚类过程之后,每个客户将属于 4 个不同的聚类。

对于每个聚类,我创建了过去 30 天的商品排名,并根据每个客户所属的聚类制定加权的总体排名。

根据客户情况,最近购买的 article_ids 和 product_codes 被赋予更高的权重。模型 3 从总体排名中选取每个用户的前 350 件商品。

步骤 2:特征工程

对于每个候选,我们创建了以下特征:

  • 基于深度学习的潜在表达
    • BERT4REC 的商品嵌入表达
    • LightGCN 的商品嵌入表达
    • Roberta 的详细描述潜在表达(加上 PCA 进行降维)
    • 基于 Swin-Transformer 的图像特征
  • 基于 swin-transformer 嵌入和 item2vec 嵌入的商品和客户之间的余弦相似度
  • 用户对候选 article_id、product
同比赛其他方案