竞赛总结:Kaggle H&M 时尚商品推荐

赛题名称:H&M Personalized Fashion Recommendations

赛题任务:为用户提供时尚商品推荐

赛题类型:推荐系统

https://www.kaggle.com/c/h-and-m-personalized-fashion-recommendations/

赛题介绍

H&M在线商店为购物者提供了广泛的产品选择供他们浏览。但是如果选择太多,客户可能无法很快找到他们感兴趣的东西或他们正在寻找的东西,最终他们可能不会购买。

在本次比赛中,参赛选手可以使用历史交易数据、商品元信息和商品图像数据。赛题提交的内容根据 Mean Average Precision @ 12 (MAP@12) 进行评估:

参赛选手需要对所有 customer_id 值进行购买预测,无论这些客户是否存在历史购买记录。对于每个客户,需要预测下一个 7 天内客户将购买的预测商品。

赛题数据

您的任务是预测每个客户在训练数据期之后的 7 天内将购买的 article_ids。赛题数据可以划分为如下几个部分:

  • images/- 每个article_id的图片,放置在以 article_id 的前三位数字开头的子文件夹中,但并非所有 article_id 值都有相应的图像。
  • articles.csv- 每个可供购买的 article_id 的详细元数据.
  • customers.csv- 顾客基础信息
  • transactions_train.csv- 交易训练数据,包括每个客户每个日期的购买量,重复的行对应于同一项目的多次购买。

赛题难点

  1. 赛题包含了多个维度的数据信息,可以从用户协同 & 物品协同 & 内容协同的角度进行召回。
  2. 赛题中包含article_id的类别信息,因此需要考虑商品类别的搭配。此外还需要考虑价格和季节因素。
  3. 赛题的中包含了30GB图片数据,136W行交易数据,需要大量的计算资源。

优胜解决方案

第一名:senkin13 & 30CrMnSiA

https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324070

我们的解决方案是使用各种检索策略 + 特征工程 + GBDT,看似简单但功能强大。我们生成了近期流行单品,因为时尚变化快,有季节性。我们也尝试添加冷启动单品,但由于缺乏购买交互信息,并没有起作用。

整体思路

模型绝大部分的特征来自用户和商品,我们发现图片信息作用不大,但图片可以对冷启动有效。因为近50%的用户最近3个月没有交易,所以我们为他们创建了很多累积特征,以及上周、上个月、上季活跃用户的特征。

竞赛总结:Kaggle H&M 时尚商品推荐

我们使用6周的数据作为训练,1周数据作为验证。这样模型验证集和榜单精度是一致的。我们重点改进LightGBM模型在验证集的精度。验证集精度为0.0430,榜单精度为0.0362。

召回

在比赛前期,我们重点考虑Top100候选项的命中数,尝试各种策略覆盖更多的正样本。

召回方法包括:经常复购的商品、ItemCF召回、相似商品、流行度、图嵌入、LR + 逻辑回归进行召回

排序

大部分排序特征来自召回阶段,并进行了复用。如果我们为每个用户的商品的负样本下采样。

我们最好的单模型是LightGBM,最后我们训练了5个 LightGBM 和 7 个 CatBoost 分类器用于集成。

性能优化

  • 我们使用 TreeLite 来加速 lightgbm 推理速度(快 2 倍),catboost-gpu 比 lightgbm-cpu 推理快 30 倍。
  • 将所有分类特征转换为标签编码
  • 创建特征存储,将中间特征文件保存到字典
  • 将所有用户拆分为 28 组,多个服务器进行推理。

第二名:hello world

https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324197

整体思路

我一开始尝试过itemCF等召回方式,后来发现效果甚至不如直接选择热门商品。因此我的解决方案是直接为每个用户选择大约600个最受欢迎的产品(会有一些非常简单的策略来参考用户的历史)。

然后训练一个LightGBM模型,根据模型得分为每个用户选出130个候选,然后将用户在历史上购买的所有商品添加为最终候选。

召回

我们使用各种计数来衡量不同组中商品的受欢迎程度:

  • 客户属性的不同的组合
  • 商品属性的属性不同的组合
  • 不同日期下的组合

排序

在排序模型中特征主要分为以下几组:

  • 用户基本特征:包括num、price、sales_channel_id。
  • 商品基本功能:根据商品的各个属性进行统计,包括次数、价格、年龄、sales_channel_id、FN、Active、club_member_status、fashion_news_frequency、上次购买时间、平均购买间隔。
  • 用户商品组合特征:根据商品的各个属性进行统计,包括num、time、sales_channel_id、上次购买时间、平均购买间隔。
  • 年龄段产品组合特征:各年龄段下的产品热度。
  • 用户产品复购特征:用户是否会复购产品,产品是否会被复购。
  • 高阶组合特征:例如,预测用户下次购买产品的时间。
  • itemCF feature:通过itemCF计算每个item的相似度,进而计算出用户是否会购买该产品的评分。

我为LGBMRanker 编写了一个 lambdarankmap 目标损失,它比 lambdarank稍微好一点。在整个比赛中,我使用 2-3 个月的交易来训练模型,并在一周数据上进行验证。

第三名:sirius

https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324129

我们的思路也是先召回,然后进行排序。在召回阶段加入了多路的召回方法,召回方法包括:

  • 流行度
  • 历史购买的相似商品
  • 不同属性的热门商品
  • 最近购买的同款商品

在排序阶段首先进行了下采样,正负样本比为1:30。排序阶段的特征包括:

  • 用户和商品静态属性
  • 最近 7 天、30 天和所有交易中的 user-item 和 user-item 属性的计数。
  • 交易中用户项目和用户项目属性的日期差异;
  • 用户和项目之间的相似度:
    • BPR 矩阵分解 user2item 相似度
    • word2vec item2item 相似度
    • 用户购买的商品属性与目标商品属性之间的jaccard相似度
    • 历史购买商品的图片相似度
  • 商品流行度
    • 在过去 7 天、30 天和所有交易中购买的物品/物品属性的计数;
    • 时间加权受欢迎程度,其中权重为 1/days of now 减去 purchased date

第四名:Hongwei Zhang

https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324094

首先为每个客户使用不同的召回模型生。然后建立一个排序模型。我创建了 5 折,并使用 3 折作为训练数据。我也尝试了更多的训练数据,但并没有增加局部的CV和LB。

竞赛总结:Kaggle H&M 时尚商品推荐

召回

  • Item2item CF
  • 每位顾客最近购买的20件商品
  • 上周的热门排名。
  • Two Tower MMoE

第五名:HAO

https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324098

召回

召回方法包括以下部分:

  • U2I:基于用户的协同过滤。
  • I2i:基于项目的协同过滤
  • word2vec相似度
  • 不同客户属性(如年龄段、性别等)的热门商品

总共使用 21 种召回方法来创建候选文章。

第六名:Hard2Rec

https://www.kaggle.com/competitions/h-and-m-personalized-fashion-recommendations/discussion/324075

召回

我们使用了几种方法来生成不同的候选对象,以提高正样本(用户和用户项目)的覆盖率。

  • u2i:用户最近购买的商品
  • i2i:基于项目的协同过滤
  • u2tag2i:标签可以是“product_code”、“product_type_no”、“department_no”、“section_no”
  • hot:为不同的用户生成hot items

排序

  • count: user, item, user-item based,重要的是使用所有的历史数据来生成用户的特征。
  • gap: user, item, user-item first/last purchase time to now。对于物品的首次购买时间,它可能代表该物品的“发布时间”。
  • items discount:使用max/mean表示商品的普通价格。使用每一行的价格来计算商品的折扣。
  • tfidf:将用户历史购买的article/product_code/product_type_no设置成一句话,然后使用tfidf+svd生成feature。
  • item_sim:i2i的协同过滤得分,计算候选者与用户历史购买之间的item。
上一篇

申请欧洲Top20商学院GRE要考多少分?

下一篇

加拿大工程类硕士专业详解

你也可能喜欢

评论已经被关闭。

插入图片
老师微信 老师微信
老师微信
返回顶部