Kaggle競賽總結:OTTO 多目標電商商品推薦

比賽名稱:OTTO – Multi-Objective Recommender System

基於(yu) 真實電子商務會(hui) 話構建推薦係統

比賽鏈接:https://www.kaggle.com/competitions/otto-recommender-system

比賽類型:推薦係統、電子商務

比賽介紹

本次比賽的目標是預測電子商務點擊、購物車添加和訂單。您將根據用戶會(hui) 話中的先前事件構建多目標推薦係統。

您的工作將有助於(yu) 改善所有相關(guan) 人員的購物體(ti) 驗。客戶將收到更多量身定製的建議,而在線零售商可能會(hui) 增加銷售額。

提交在 Recall@20 上針對每種操作類型進行評估,三個(ge) 召回值是加權平均的:{'clicks': 0.10, 'carts': 0.30, 'orders': 0.60}

數據描述

本次比賽的目標是預測電子商務點擊、購物車添加和訂單。您將根據用戶會(hui) 話中的先前事件構建多目標推薦係統。

訓練數據包含完整的電子商務會(hui) 話信息。對於(yu) 測試數據中的每個(ge) 會(hui) 話,您的任務是預測測試會(hui) 話中最後一個(ge) 時間戳 ts 之後發生的每個(ge) 會(hui) 話類型的幫助值。

  • session - 唯一的會話 ID
  • events - 會話中按時間排序的事件序列
  • aid - 相關事件的文章 ID(產品代碼)
  • ts - 事件的 Unix 時間戳
  • type - 事件類型,即產品是否被點擊、添加到用戶的購物車或在會話期間訂購

優勝解決方案

第二名:SOS3

(隊員一)senkin13:https://www.kaggle.com/competitions/otto-recommender-system/discussion/382839

整體思路

Kaggle競賽總結:OTTO 多目標電商商品推薦

召回

該競賽數據沒有user/item信息,並且流行性不起作用,我們(men) 努力改進召回方案,我們(men) 發現隻有重複行為(wei) 、下一個(ge) 行為(wei) 和itemcf是有效的,重複行為(wei) 、接下來的行為(wei) 沒有什麽(me) 可做的,最重要的工作是改進itemcf,我們(men) 嚐試了各種矩陣和itemcf權重,並取得了成效。

嚐試的行為(wei) 矩陣:

  • 手推車訂單
  • 單擊購物車和訂單
  • 點擊購物車訂單

嚐試調整的權重:

  • 類型
  • 共現時間距離
  • 共現順序
  • 會話操作命令
  • 人氣

排序

  • 特征工程

基本上,基於(yu) 召回策略創建特征,主為(wei) 重複行為(wei) 、下一個(ge) 行為(wei) 、itemcf的聚合的協同過濾分數、嵌入檢索的相似性創建user-item交互。

我為(wei) 訂單/購物車模型使用了198個(ge) 特征,為(wei) 點擊模型使用了106個(ge) 特征

類型 描述
聚合 session、aid、session-aid、計數,按當前session聚合的每種行為type
下一個行為 session的最後aid的下一個aid出現次數
時間 session、aid的首次、末次行為時間
基於協同過濾分數 基於session的最後一個aid、最後小時的aids、所有的aids與候選aid的協同過濾分數(最大、總和、加權和等)
基於嵌入向量相似分 基於word2vec(aid2aid)、ProNE(session2aid)的cosine similarity
  • 驗證集

我用標簽構建了3周的訓練數據,最後一周用作驗證,然後用固定的輪數重新訓練所有訓練數據,並用於(yu) 測試數據的預測,CV與(yu) LB非常匹配,我們(men) 不需要通過提交來觀察LB。

  • 模型

在H&M比賽中,我最好的模型是lightgbm,我在這次比賽中也從(cong) lightgbm開始,在最後幾天我嚐試了catboost ranker,結果讓我驚訝,訂單模型提升0.0007,購物車模型提升0.002,點擊模型提升0.0012。

我最好的單模是catboost ranker,CV 0.59066=0.67100.6+0.44160.3+0.5558*0.1,LB 0.602=0.409+0.137+0.056。

最後,我與(yu) lightgbm和catboost混合,混合LB更高0.602,與(yu) 隊友的0.602混合後,LB為(wei) 0.604

優化

最後幾天,我將所有的特征工程代碼從(cong) panda重寫(xie) 為(wei) polar,polar的速度要快得多,尤其是兩(liang) 個(ge) 大表連接,從(cong) pandas.merge到polars.join速度上提升40多倍。

我使用TreeSite加速lightgbm推理速度(快2倍),catboost gpu比lightgbm cpu推理快30倍。

隊友補充

(隊員二)ONODERA:https://www.kaggle.com/competitions/otto-recommender-system/discussion/382790

提到,隊友已經有了出色的功能,但CF功能還有改進的空間。因此,聚焦於(yu) CF相關(guan) 特征,具體(ti) 如下:

  • 計數
  • 時差
  • 序列差異
  • 加權統計
  • 聚合統計

總共有93個(ge) 特征。在這之後,我可以使用不同的組合(例如點擊訂購、購物車訂購等)生成幾乎4k個(ge) 特征,我最終隻使用了400~500個(ge) 特征。

模型則是使用XGBoost and CatBoost。

第五名:CWKTJ

https://www.kaggle.com/competitions/otto-recommender-system/discussion/382783

我們(men) 的解決(jue) 方案是兩(liang) 個(ge) 團隊先前解決(jue) 方案的組合版本。在團隊合並之前,我們(men) 的訓練有效分割、召回方法、特征集和重新排列模型都是不同的。我們(men) 不僅(jin) 簡單地集成了我們(men) 的獨立提交文件,還交換了進一步改進的特征。

集成

在這裏,我們(men) 使用小寫(xie) 字母表示提交版本(a,b,…),它可以是一個(ge) 重新提交的5倍集合,也可以是兩(liang) 個(ge) 或多個(ge) 提交的集合。S1和S2是公共驗證數據分割和私有再生驗證數據分割。R1和R2是兩(liang) 種不同的召回方法。F1和F2是兩(liang) 個(ge) 不同的特征集,F'1和F'2是重要的特征子集。XGB和CBT表示xgboost和catboost ranker 。“+”表示分數集合,這意味著我們(men) 對多個(ge) 模型的原始輸出進行平均,以重新排列候選。“&”表示索引集合,這意味著我們(men) 為(wei) 前20名候選人分配索引分數,從(cong) 1.00到0.05,步長為(wei) 0.05,然後我們(men) 使用召回分數的總和對候選item進行重新排序。我們(men) 的最終解決(jue) 方案應該是:

  • c = a * 0.45 & b * 0.575
  • d = d1 * 0.5 + d2 * 0.5
  • e = e1 * 0.5 + e2 * 0.5
  • g = c * 0.5 & d * 0.4 & e * 0.6
  • h = (c * 0.5 & d * 0.5) & f * 0.5
  • i = g * 0.6 & h * 0.5

Kaggle競賽總結:OTTO 多目標電商商品推薦

召回方法

  • R1

這種召回方法是基於(yu) 公共jupyer notebook(4個(ge) 矩陣:點擊、購物車、訂單和購買(mai) )開發的,並由numba優(you) 化。

特征集

  • F1

F1包括統計特征和模型訓練特征。與(yu) 大多數團隊一樣,我們(men) 使用交互曆史和共同訪問分數的總和、最大值、最小值和平均值,基於(yu) session、aid和交互的聚合。大多數統計特征的重要性並不顯著。

在模型訓練特征中,我們(men) 使用了來自implicit包的BPR、ALS和LMF,來自gensim包的W2V和SAS。在這裏提到的所有算法中,我們(men) 都可以得到item的embedding,因此我們(men) 使用候選嵌入和session最新平均嵌入的內(nei) 積作為(wei) 交互特征。在BPR、ALS和LMF中,我們(men) 可以獲得會(hui) 話和項目的嵌入,因此我們(men) 另外使用session嵌入和候選嵌入的內(nei) 積作為(wei) 交互特征。

特征重要性

我們(men) 使用reranker模型中的特征重要性來決(jue) 定要交換哪些特征。

第六名:NikhilMishra

https://www.kaggle.com/competitions/otto-recommender-system/discussion/382802

候選集生成

我認為(wei) 有一個(ge) 強有力的候選集產(chan) 生方法對我幫助很大,所以我是這樣做的。

每個(ge) session的候選項個(ge) 數:我在大部分比賽中產(chan) 生了80個(ge) 候選項,然後在最後階段將其提高到120個(ge) ,並提高約0.001的分數。我對80個(ge) 候選項的最大召回率為(wei) 0.648(在驗證集上)。我也在一次實驗中嚐試了200名候選人,但這對分數沒有幫助。

此外,如果我從(cong) 自己的候選集生成模型中選取前20個(ge) 候選項,我的LB分數將為(wei) 0.585。

對於(yu) 候選集的生成,我使用了類似於(yu) covisit矩陣的方法,並基於(yu) 不同行為(wei) 組合構建多個(ge) covisit矩陣,如

  • 任何操作到任何操作
  • 點擊加購
  • 訂單加購
  • 訂單到訂單

為(wei) 了保持低內(nei) 存使用率,我隻選擇了排名前(k*100)的候選項。K是我想要生成的候選項個(ge) 數。

此外,我還通過第一項的頻率對權重進行了歸一化。矩陣中的權重通過我們(men) 所討論的兩(liang) 個(ge) aid之間訪問的item數量進行了歸一化。假設我們(men) 有5個(ge) aids,aid1、aid2、aid3、aid4、aid5。那麽(me) (aid1,aid5)的權重將為(wei) (5-1)/(aid1的頻率)。

此外,(aid5,aid1)的權重將為(wei) (aid1,aid5)/2(隻是添加一些類似於(yu) 購買(mai) aid5是由購買(mai) aid1驅動的,而不是反過來)。對於(yu) 推斷時間,為(wei) 了決(jue) 定我應該選擇哪一個(ge) 前k名候選,我使用optuna,將每個(ge) covisit矩陣的權重、item最近性的權重、該項目的標準化總體(ti) 頻率等作為(wei) 參數。

特征生成

基本特征,如item的頻率、點擊與(yu) 加購的比率等,訪問item的最近時間(如果session中的候選項超過20個(ge) ,這將非常有用)。

生成的候選項與(yu) session中任何已看到的aid的關(guan) 聯。這可以通過使用covisit矩陣權重來創建。深入了解這些特征幫助我大大提高了分數。其想法是,可以用不同的方式創建covisit矩陣,以建立兩(liang) 個(ge) item之間的關(guan) 係,例如:

  • 隻計算兩個aid之間的平均距離(aids共現次數)。
  • 距離也可以用時間戳差來衡量。
  • 隻考慮第一鄰居的候選aid(直接候選人)。
  • 隻考慮最近周的關係等。

排序模型

我使用了lightgbm,進行5%的負采樣,大約400個(ge) 特征,以及最近兩(liang) 周的數據。一些對我有用的東(dong) 西或技巧:

  • 使用單個模型(而不是3個單獨的模型)訓練所有點擊、購物車和訂單。這在本地很容易被認為得到了大約0.001到0.002更好的分數(數據被分組到session中,而不是分組到session、type)。
  • 在排序時,對點擊、購物車和訂單使用單獨的標簽,將標簽增益排序為訂單(6)->購物車(3)->點擊(1),而不是在用戶執行操作(點擊、購物和訂單)時使用1,而在用戶未執行操作時使用0(這將分數提高約0.0005)。
  • 使用階段1候選生成模型的排名作為階段2模型的特征。如果你認為,第一階段模型的權重可以達到0.585,所以使用這個排名是我模型的重要特征。

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

上一篇

英國Halcyon London International School哈爾西恩倫敦國際學校介紹

你也可能喜歡

  • 暫無相關文章!

評論已經被關(guan) 閉。

插入圖片
返回頂部