返回列表

5th place solution

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

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

第5名方案

作者:HAO (Master) | 队友:rendongltt (Expert), jiaqizhang35
比赛:H&M Personalized Fashion Recommendations

首先,感谢竞赛主办方举办了如此有趣的比赛,也感谢我伟大的队友 @rendongltt(他是网购狂,给了我们很大帮助😂)和 @jiaqizhang35(他是我的朋友,没有他我甚至不会参加这次比赛)。我还要感谢 @paweljankiewicz,没有他精彩的帖子,我们走不了这么远。同时也感谢你(以及许多其他乐于分享的好人),是你们激励我更多地与社区分享。

概览

总的来说,我们非常喜欢这次比赛,因为它提供了无限种解决问题的方法,特别是可能的召回方法。说到特征工程,虽然我们对自己的技能很有信心,但与其他宗师相比,我们可能没有机会获得金牌。所以我们从一开始就专注于召回方法。我们的召回方法深度依赖于商品嵌入(图像、文本、word2vec、tfidf)和神奇的 Python 包 faiss 来寻找相似的商品和客户。至于特征工程,我们没有花太多时间,只是使用不同的时间窗口分别创建商品和客户的聚合统计特征,以及客户-商品交叉聚合统计特征和使用上述嵌入的不同余弦相似度特征。

召回方法

召回方法由以下几部分组成:

  1. 客户最后的购物篮(以及与客户最后购物篮中商品相同产品代码的商品),最近购买的商品。
  2. U2I:基于用户的协同过滤。
  3. I2I:基于商品的协同过滤。
  4. Word2vec:预测客户最后购物篮之后的下一个可能购买的商品。
  5. 经常一起购买的商品。我修改了 @titericz 的这个不错的 notebook
  6. 具有不同客户属性(如年龄段、性别等)的热门商品。

总的来说,我们使用了 21 种召回方法来创建商品候选集。

嵌入方法

我们使用不同的数据和方法创建了商品嵌入:

  1. 对于商品图像,我们使用 Swin Transformer 提取嵌入特征。
  2. 对于商品文本,首先我们将每件商品的所有文本值连接起来,然后使用 SentenceTransformer 提取嵌入。
  3. 使用 @aerdem4 的这个很棒的 notebook,你可以轻松地使用 tfidf 方法获得商品嵌入。
  4. 最后也是最有用的获取商品嵌入的方法是 word2vec 方法,我们使用 gensim 来简化过程。

召回方法校准

因为不同的召回方法有不同的正样本比例,所以最好使用某种方法来校准所有的召回方法。我使用了我在这里分享的方法来进行预处理。

特征工程

这部分没什么特别的,但我发现了一些可以大大加快特征计算时间的方法。基本上我们将特征分为三部分:

  1. 商品特征:一旦你固定了观测时间,这些特征对所有客户都是恒定的。
  2. 同样,客户特征:一旦你固定了观测日期,这些特征对所有候选商品都是恒定的。
  3. 客户-商品特征:如每对客户和商品之间的余弦相似度,客户对该特定商品的购买历史聚合特征。

对于第 1 和第 2 部分,你可以计算一次并保存,稍后与第 3 部分的特征合并。这种方法真的为我节省了很多时间,特别是在推理期间。

建模

因为我们花了大部分时间开发召回策略,我们只使用了 LightGBM Ranker 模型进行训练,甚至没有时间尝试其他方法如 CatBoost 和 XGBoost。所以基本上我们的分数是单模型的分数。

遗留问题

我们有一个至今仍无法解决的问题,那就是关于 word2vec 模型的。我们使用所有交易数据来训练 word2vec 模型,这实际上稍微泄露了一点未来信息。

想象一下,对于观测日期 20200915,你使用由所有交易数据训练的 word2vec 模型计算客户-商品余弦相似度。两个商品 ID aid_1、aid_2 的 word2vec �

同比赛其他方案