競賽總結:Kaggle H&M 時尚商品推薦

賽題名稱:H&M Personalized Fashion Recommendations

賽題任務:為(wei) 用戶提供時尚商品推薦

賽題類型:推薦係統

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

賽題介紹

H&M在線商店為(wei) 購物者提供了廣泛的產(chan) 品選擇供他們(men) 瀏覽。但是如果選擇太多,客戶可能無法很快找到他們(men) 感興(xing) 趣的東(dong) 西或他們(men) 正在尋找的東(dong) 西,最終他們(men) 可能不會(hui) 購買(mai) 。

在本次比賽中,參賽選手可以使用曆史交易數據、商品元信息和商品圖像數據。賽題提交的內(nei) 容根據 Mean Average Precision @ 12 (MAP@12) 進行評估:

參賽選手需要對所有 customer_id 值進行購買(mai) 預測,無論這些客戶是否存在曆史購買(mai) 記錄。對於(yu) 每個(ge) 客戶,需要預測下一個(ge) 7 天內(nei) 客戶將購買(mai) 的預測商品。

賽題數據

您的任務是預測每個(ge) 客戶在訓練數據期之後的 7 天內(nei) 將購買(mai) 的 article_ids。賽題數據可以劃分為(wei) 如下幾個(ge) 部分:

  • 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

我們(men) 的解決(jue) 方案是使用各種檢索策略 + 特征工程 + GBDT,看似簡單但功能強大。我們(men) 生成了近期流行單品,因為(wei) 時尚變化快,有季節性。我們(men) 也嚐試添加冷啟動單品,但由於(yu) 缺乏購買(mai) 交互信息,並沒有起作用。

整體思路

模型絕大部分的特征來自用戶和商品,我們(men) 發現圖片信息作用不大,但圖片可以對冷啟動有效。因為(wei) 近50%的用戶最近3個(ge) 月沒有交易,所以我們(men) 為(wei) 他們(men) 創建了很多累積特征,以及上周、上個(ge) 月、上季活躍用戶的特征。

競賽總結:Kaggle H&M 時尚商品推薦

我們(men) 使用6周的數據作為(wei) 訓練,1周數據作為(wei) 驗證。這樣模型驗證集和榜單精度是一致的。我們(men) 重點改進LightGBM模型在驗證集的精度。驗證集精度為(wei) 0.0430,榜單精度為(wei) 0.0362。

召回

在比賽前期,我們(men) 重點考慮Top100候選項的命中數,嚐試各種策略覆蓋更多的正樣本。

召回方法包括:經常複購的商品、ItemCF召回、相似商品、流行度、圖嵌入、LR + 邏輯回歸進行召回

排序

大部分排序特征來自召回階段,並進行了複用。如果我們(men) 為(wei) 每個(ge) 用戶的商品的負樣本下采樣。

我們(men) 最好的單模型是LightGBM,最後我們(men) 訓練了5個(ge) LightGBM 和 7 個(ge) CatBoost 分類器用於(yu) 集成。

性能優化

  • 我們使用 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等召回方式,後來發現效果甚至不如直接選擇熱門商品。因此我的解決(jue) 方案是直接為(wei) 每個(ge) 用戶選擇大約600個(ge) 最受歡迎的產(chan) 品(會(hui) 有一些非常簡單的策略來參考用戶的曆史)。

然後訓練一個(ge) LightGBM模型,根據模型得分為(wei) 每個(ge) 用戶選出130個(ge) 候選,然後將用戶在曆史上購買(mai) 的所有商品添加為(wei) 最終候選。

召回

我們(men) 使用各種計數來衡量不同組中商品的受歡迎程度:

  • 客戶屬性的不同的組合
  • 商品屬性的屬性不同的組合
  • 不同日期下的組合

排序

在排序模型中特征主要分為(wei) 以下幾組:

  • 用戶基本特征:包括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的相似度,進而計算出用戶是否會購買該產品的評分。

我為(wei) LGBMRanker 編寫(xie) 了一個(ge) lambdarankmap 目標損失,它比 lambdarank稍微好一點。在整個(ge) 比賽中,我使用 2-3 個(ge) 月的交易來訓練模型,並在一周數據上進行驗證。

第三名:sirius

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

我們(men) 的思路也是先召回,然後進行排序。在召回階段加入了多路的召回方法,召回方法包括:

  • 流行度
  • 曆史購買的相似商品
  • 不同屬性的熱門商品
  • 最近購買的同款商品

在排序階段首先進行了下采樣,正負樣本比為(wei) 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

首先為(wei) 每個(ge) 客戶使用不同的召回模型生。然後建立一個(ge) 排序模型。我創建了 5 折,並使用 3 折作為(wei) 訓練數據。我也嚐試了更多的訓練數據,但並沒有增加局部的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

召回

我們(men) 使用了幾種方法來生成不同的候選對象,以提高正樣本(用戶和用戶項目)的覆蓋率。

  • 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。

【競賽報名/項目谘詢+微信:mollywei007】

上一篇

申請歐洲Top20商學院GRE要考多少分?

下一篇

加拿大工程類碩士專業詳解

你也可能喜歡

  • 暫無相關文章!

評論已經被關(guan) 閉。

插入圖片
返回頂部