For interview:京東

                                                                            京東項目

 

 數據來源:京東JDATA算法大賽:如期而至-用戶購買時間預測

 數據描述:五個表(用戶、商品、訂單、用戶行爲、評價) 原始數據爲2016.5至2017.5月

 項目目的:預測數據範圍內的每位用戶對其在原始數據範圍內有過交互的每件商品在下一個月的購買情況;

 

 項目分析:判斷用戶在下一個月內是否會購買一件商品本質上等價於機器學習中的二分類問題,分別是購買和未購買。

首先對以上五個表格進行合併處理,以用戶編號和商品編號唯一標識每個樣本,形成了共計2991065條樣本的數據集

接着樣本劃分成爲訓練集和測試集兩部分,訓練集樣本的時間範圍在2016年5月至2017年3月之間,共計10個月,並用2017年4月的購買情況作爲目標變量標記訓練集中的樣本。測試集的時間樣本在2016年5月至2017年4月之間,共計11個月,並以2017年5月的購買情況作爲目標變量的標籤。

原始數據中的商品等級、用戶信息等我們可以作爲原始特徵,但只有這些特徵是不夠的,我們需要對原始數據進行特徵提取,對影響消費者購買行爲的因素進行更深層次的挖掘。特徵提取可以分爲三個方面,分別是基礎特徵、組合特徵、交叉特徵。

基礎特徵構建上,從用戶和商品兩個角度出發,提取了在距離當前時間一天、兩天、一週等等共十種時間粒度的用戶和商品特徵。基礎特徵提取的意義在於:1針對用戶,測量每個用戶的活躍度、購買力等;2 針對商品,測量每個商品的熱度、好評率、轉化率等。

組合特徵構造上,將用戶和商品進行組合,提取了用戶在十種時間粒度上分別瀏覽、關注、購買每種商品的次數;針對每種商品,計算每個用戶最近一次瀏覽、購買等行爲距今的天數;以及每位用戶對商品的評價信息等等。組合特徵的意義在於測量每位用戶對每種商品的興趣度、關注衰減程度等等。

交叉特徵構建上:根據用戶的性別和年齡信息,對所衍生出的上述特徵進行交叉,例如男性對商品的

最終總計構建了158個特徵,形成了2991065*158的數據集。

爲了增強模型的泛化能力,減少過擬合,我們進行了特徵選擇來選擇對目標最有影響的變量。最終通過隨機森林的方法確定了81個特徵變量。

由於原始數據存在樣本比例不平衡,正負樣本比例爲0.015:1,因此我們進行了正樣本上採樣,負樣本下采樣,構造了十個訓練數據集,將正負樣本比例修改爲1:5。

基於bagging的思想,我們在這10個訓練集上分別訓練了5個xgboost分類器和5個lightgbm分類器,並計算了10個分類器在訓練集上的召回率作爲分類器加權的權重。

最終模型在測試集上的acc達到98%,auc達到94%,recall達到90%,precision爲52%,f1爲66%

  

項目過程:(1)以用戶編號和商品編號唯一標識每個樣本 共計2991065條樣本;商品共有37724種類別 用戶共有98924位??這樣寫對不對

(2)根據歷史數據進行了特徵提取:比如用戶購買力、商品購買轉化率、用戶在最後三天對該商品的瀏覽量、最後七天對該商品的瀏覽量等等;共構造了158個特徵;

(3)變量選擇:採用lasso 遞歸特徵消除 隨機森林三種方法 分別選出了61 88 81個特徵;

(4)消除樣本不平衡:原始正負樣本比例爲0.015:1 通過對正樣本上採樣,負樣本下采樣,構造了十個訓練數據集,將正負樣本比例修改爲1:5

(5)建立分類器:xgboost lightgbm

項目細節:acc計算的是預測出來的所有正負樣本里,預測正確的比例。Precision計算的是預測出的所有正樣本里,預測正確的比例。Recall是所有正確預測的樣本佔所有正樣本的比例。F1綜合計算了pre和recall。Auc計算的是ROC曲線下的面積,ROC曲線以賈正類作爲橫軸,以真正作爲縱軸,賈正類也就是錯誤預測爲正的佔所有負類的比例,真正類也就是正確預測爲正的佔所有正類的比例,Auc越高越好。

Acc爲90%也就是說,在所有顧客裏,預測他們下個月買或不買的預測準確度達到了90%。

Pre爲50%也就是說,預測下個月會買的顧客裏,有50%的顧客是下個月真正會買的。

Recall爲90%也就是說,下個月真正會買的顧客中,有90%是被我們預測到了的。

 

在使用隨機森林進行特徵選擇時,實際上也就是使用隨機森林進行模型構建,RF會計算每個特徵的信息增益或基尼係數,這也就是我們要尋找的特徵重要性。

 

XGboost的調參:

初始值:學習率 樹的最大深度(3-10) 節點分裂所需的最小損失函數下降值 最小葉子節點樣本權重和(如果一個葉子節點的樣本權重和小於這個值 則不再分裂) 行採樣(0.5-0.9)(對樣本採樣) 列採樣(類似RF

可以採用GridSearchCV進行參數調優的搜索 可以先對樹最大深度 最小葉子節點樣本權重和進行搜索 這個參數搜索範圍可以先設大一些 然後得到一個值之後 再在這個值附近進行搜索(就是把參數搜索範圍設小一點)

由於節點分裂所需的最小損失函數下降值和損失函數相關,因此我們需要進行調整 同樣使用GridSearchCV進行參數調優的搜索

然後調整行列採樣的比例 然後是學習率

其中最小葉子節點樣本權重和與樣本不平衡有關,所以我們可以針對這個參數進行調整

 

Xgboost的介紹

 

Lightgbm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章