楊 進,張 晨
(上海理工大學(xué)理學(xué)院,上海 200093)
用戶的購買行為預(yù)測一直是零售行業(yè)的重要課題[1-3],伴隨著大數(shù)據(jù)時代的到來,人們生活、行為和思考方式發(fā)生了變化,同時也提供了大量的數(shù)據(jù)用于挖掘分析。網(wǎng)民們在電商平臺上購買商品,往往伴隨著瀏覽、加購物車和收藏的行為,因此電子商務(wù)平臺儲存了大量的用戶購物歷史數(shù)據(jù),分析這些數(shù)據(jù)可以更好地預(yù)測他們的購物習(xí)慣、偏好和意圖。本文主要研究消費者網(wǎng)上購買行為的預(yù)測,進而網(wǎng)站能夠根據(jù)用戶的喜好推薦用戶感興趣的產(chǎn)品,從而改善用戶體驗,改善網(wǎng)上購物環(huán)境。
對于該問題國內(nèi)方面,李旭陽等人[4]提出了長短期記憶模型循環(huán)神經(jīng)網(wǎng)絡(luò)(Long Short-Term Memory, LSTM)[5]和隨機森林相結(jié)合的預(yù)測模型,他們從原始數(shù)據(jù)中分別提取靜態(tài)特征和動態(tài)特征。靜態(tài)特征指用戶和商品本身的屬性特征。動態(tài)特征指用戶對商品發(fā)生交互行為產(chǎn)生的特征。對這些特征通過LSTM進行特征選擇,再用隨機森林算法做預(yù)測。劉瀟蔓[6]先是從原始數(shù)據(jù)中分別提取用戶特征、商品特征和用戶-商品特征,再通過“滑動時間窗”[7]的方法對歷史數(shù)據(jù)反復(fù)使用使得正負樣本得以均衡,而后用極端隨機樹(Extra-tree)的方法提取特征,最后將邏輯斯特回歸[8]和支持向量機用軟投票(Softvoting)方法相結(jié)合后進行預(yù)測。周成驥[9]也是通過滑動時間窗的方法來提取新數(shù)據(jù),在生成新的特征后,通過求各個特征的皮爾遜相關(guān)系數(shù)[10]進行特征選擇,再通過裝袋算法(Bootstrap aggregating, Bagging)把多個極限梯度提升算法(Extreme Gradient Boosting, XGBoost)的預(yù)測結(jié)果結(jié)合后進行預(yù)測。胡曉麗等人[11]使用“分段下采樣”的方法來平衡樣本數(shù)據(jù),在特征工程生成衍生特征后用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)[12]進行特征選擇,通過算法LSTM進行預(yù)測,實驗結(jié)果表明,基于CNN-LSTM的預(yù)測模型F1值相比基準模型得到了提高。杜世民[13]主要研究電商的復(fù)購行為,詳細分析了用戶的購買行為習(xí)慣,分別從用戶和商品2個方面構(gòu)建關(guān)聯(lián)特征,最后用軟投票策略將多算法融合后進行預(yù)測。
國外方面,Tian等人[14]提供了一種新模型解決Pareto/NBD模型的缺陷,只需要購買行為的頻率和時間就可以預(yù)測電子商務(wù)中消費者的復(fù)購行為。Zuo等人[15]通過收集消費者在超市產(chǎn)生的射頻識別(RFID)數(shù)據(jù),用支持向量機(Support Vector Machines, SVM)模型去預(yù)測消費者的購買行為[16]。Chang等人[17]通過聚類分析收集忠誠顧客的關(guān)鍵特征來定位潛在客戶,通過關(guān)聯(lián)分析收集忠誠客戶的購買信息來預(yù)測潛在客戶對產(chǎn)品的近期興趣。Cho等人[18]提出了一種基于最近一次消費、消費頻率和消費金額的增量加權(quán)挖掘方法來進行用戶購買行為預(yù)測,并驗證了該算法的有效性。Gupta等人[19]對在線客戶靈活定價,幫助客戶尋找一個合適的價格去購買,并通過機器學(xué)習(xí)的方法來預(yù)測不同價格下的客戶購買決策。
實際情況中,由于購買的數(shù)量遠遠小于未購買的數(shù)量,造成了樣本的不均衡。對于該問題,本文采用簡單欠采樣方法和改進的EasyEnsemble[20]采樣方法。簡單欠采樣以發(fā)生購買行為和未發(fā)生購買行為按比例為1∶1進行采樣,改進的EasyEnsemble采樣方法按發(fā)生購買行為和未發(fā)生購買行為的采樣比這種接近原始的數(shù)據(jù)進行采樣。本文通過阿里巴巴天池大賽[21]所提供的數(shù)據(jù)經(jīng)過數(shù)據(jù)處理后做特征工程,生成新的衍生特征,再通過互信息的方法進行特征選擇。本文提出使用改進的EasyEnsemble算法下的軟投票策略方法對數(shù)據(jù)做預(yù)測,然后將預(yù)測結(jié)果與傳統(tǒng)的機器學(xué)習(xí)方法的結(jié)果相對比,也將簡單欠采樣、EasyEnsemble和改進后的EasyEnsemble這3種方法得出的預(yù)測結(jié)果作對比,得出結(jié)論。
本文所使用的數(shù)據(jù)來源于阿里巴巴提供的2014年11月18日到2014年12月18日的10000名用戶在某網(wǎng)站上的用戶與商品的歷史交互記錄。由于無法從這些數(shù)據(jù)中得到實用的特征數(shù)據(jù),所以必須對原始數(shù)據(jù)進行特征提取。原始數(shù)據(jù)特征如表1所示。
表1 原始特征
本文根據(jù)表1所給出的原始特征來提取新的特征,同樣也把它們分為用戶特征、商品特征和用戶-商品特征3個特征類別。
用戶特征保留了原始特征User_id,而對于特征User_geohash缺失數(shù)據(jù)超過了總數(shù)據(jù)的2/3,并且對數(shù)據(jù)進行了加密處理,因此數(shù)據(jù)間不具有相關(guān)性,所以將該特征值剔除掉。新加入的用戶特征有用戶的活躍度(userF1),即對某用戶在過去一段時間購買、添加購物車、收藏和瀏覽的次數(shù)的加權(quán)和。用戶的購買瀏覽轉(zhuǎn)化率(userF2)、用戶的購買加購物車轉(zhuǎn)化率(userF3)和用戶的購買收藏轉(zhuǎn)化率(userF4),是用戶在過去的某段時間購買商品的次數(shù)分別與用戶瀏覽、加購物車和收藏次數(shù)的比值。用戶購買數(shù)量(userF5)、瀏覽數(shù)量(userF6)、加購物車數(shù)量(userF7)、收藏數(shù)量(userF8)分別是用戶在過去一段時間購買商品的次數(shù)和、瀏覽商品的次數(shù)和、對商品加購物車的次數(shù)和和收藏商品的次數(shù)和。
商品特征保留了原始特征item_id和item_category,增添了新的商品特征。如商品瀏覽數(shù)量(itemF1)是指商品在過去某段時間被瀏覽的數(shù)量;商品收藏數(shù)量(itemF2)是指商品在過去的某段時間被收藏的數(shù)量;商品加購物車數(shù)量(itemF3)是指商品在過去某段時間加購物車的數(shù)量;商品購買數(shù)量(itemF4)是指商品在過去某段時間被購買的數(shù)量;商品熱度(itemF5)是指商品在過去的某段時間購買、添加購物車、收藏和瀏覽的次數(shù)的加權(quán)和;商品種類熱度(itemF6)是指商品不同的種類在過去的某段時間里購買、添加購物車、收藏和瀏覽次數(shù)的加權(quán)和。
對于用戶-商品特征,本文將用戶購買商品的時間劃分為日期和具體的時刻,用戶-商品的原始特征無法作為所需要的特征直接使用,但是用戶特征、商品特征以及用戶-商品特征當中的新特征都是從特征Behavior_type和Time中提取出來的。提取出新的用戶-商品特征有用戶-商品熱度(item_userF1)和用戶對商品的購買行為(item_userF2)。用戶商品熱度是某用戶對某商品在過去的某段時間購買、添加購物車、收藏和瀏覽的次數(shù)的加權(quán)和。用戶對商品的購買行為則是在過去的某段時間用戶是否購買過某商品,購買過則設(shè)為1,未購買則設(shè)為0。用戶商品瀏覽數(shù)量(item_userF3)、用戶商品收藏數(shù)量(item_userF4)、用戶商品加購物車數(shù)量(item_userF5)、用戶商品購買數(shù)量(item_userF6)分別指用戶在過去的一段時間對某個商品瀏覽的次數(shù)和、收藏的次數(shù)和、加購物車的次數(shù)和和購買的次數(shù)和。
由于不同的時間刻度對當前的預(yù)測影響不同,所以選取了5個時間刻度9天、7天、5天、3天、1天,對不同的時間刻度通過以上方式提取特征,再加上保留的部分原始特征,總共有108維特征。
互信息[22]是一種信息度量方式,可以看成為一種隨機量包含另一種隨機量的信息量。
設(shè)2個隨機變量(X,Y)的聯(lián)合分布為p(x,y),邊緣分布分別為p(x)、p(y),互信息I(X;Y)是聯(lián)合分布p(x,y)與邊緣分布p(x)、p(y)的相對熵,即:
(1)
公式(1)可計算每一個特征和目標值的互信息值,本文通過大小順序排列,選擇互信息值較大的特征。
XGBoost[23]是根據(jù)梯度提升實現(xiàn)的半監(jiān)督學(xué)習(xí)算法,可以解決分類、回歸等問題。訓(xùn)練采用的數(shù)據(jù)集樣本為(xi,yi),其中xi∈Rm,yi∈R。xi表示m維的特征向量,yi表示樣本標簽,模型包含K棵樹,則XGBoost模型的定義如下:
(2)
其中,fK(xi)表示第K棵決策樹,它映射樣本特征,使每個樣本落在該樹的某個葉子節(jié)點上,FK(xi)表示K棵決策樹的預(yù)測結(jié)果的累加和。每個葉子節(jié)點均包含一個權(quán)重分數(shù),作為落在此葉子節(jié)點的樣本在該樹的預(yù)測值ω。計算樣本在每棵樹的預(yù)測值(即ω)之和,并將其作為樣本的最終預(yù)測值。
XGBoost的目標函數(shù)定義如下:
(3)
其中,目標函數(shù)Obj由2項組成:第一項為損失函數(shù)和;Ω(f)項為正則項,傾向于選擇簡單的模型,避免過擬合。正則化項的定義如下:
(4)
為找到最優(yōu)的f(xi)使目標函數(shù)最優(yōu),對公式中的目標函數(shù)XGBoost采用了近似的方法。對式(3)改寫為:
(5)
XGBoost引入泰勒公式近似和簡化目標函數(shù)。取二階泰勒公式的定義如下:
(6)
(7)
式(7)中,gi為損失函數(shù)的一階梯度統(tǒng)計;hi為二階梯度統(tǒng)計。gi、hi計算公式分別如下:
(8)
(9)
(10)
隨機森林[24]是一種集成學(xué)習(xí)方法,該方法結(jié)合Bagging[25]集成學(xué)習(xí)理論和隨機子空間方法,將多個決策樹作為基分類器,以一定策略選取部分屬性和數(shù)據(jù)分別建樹;在預(yù)測階段根據(jù)森林中各棵樹的預(yù)測結(jié)果進行投票表決,最終表決結(jié)果為隨機森林預(yù)測結(jié)果。
軟投票[26]也稱加權(quán)平均概率投票,是使用輸出類概率分類的投票法,其通過輸入權(quán)重,得到每個類概率的加權(quán)平均值,并選擇值較大的那一類。
EasyEnsemble[27]算法主要處理類別不平衡問題,使樣本數(shù)據(jù)能得到充分利用。
算法流程主要描述如下:
輸入:所有大類樣本數(shù)據(jù)N;所有小類樣本P;從N中采樣的子集數(shù)量m。
輸出:集成模型H(x)。
1)fork=1:m
2)從N中隨機采樣子集Ni,且滿足|Ni|=|P|。
3)將小類樣本集合P和大類樣本子集Ni組合成一個均衡的訓(xùn)練樣本子集Ni∪P。
4)在訓(xùn)練樣本子集Ni∪P上訓(xùn)練分類器:
(11)
其中,hk,j(x)是Hk的第j個弱分類器,αk,j為hk,j(x)所對應(yīng)的權(quán)重,θk為集成的閾值。
5)end for
6)集成模型為:
(12)
本文模型主要分為3個步驟:1)產(chǎn)生訓(xùn)練樣本子集;2)訓(xùn)練基分類器;3)基分類器融合。
先將數(shù)據(jù)集分為購買和未購買2個大類,再從這2類數(shù)據(jù)中進行隨機抽樣,使抽取的測試集數(shù)據(jù)中購買和未購買這2類數(shù)據(jù)比例接近數(shù)據(jù)集中購買與未購買的數(shù)量比,再對抽取的數(shù)據(jù)進行特征提取,得到訓(xùn)練樣本集。
隨機森林(RF)是機器學(xué)習(xí)中常用的解決分類問題算法之一,是一個包含多個決策樹的分類器。
XGBoost是基于提升樹模型設(shè)計的,還支持二階導(dǎo)數(shù)運算和并行計算,可以利用正則項控制模型復(fù)雜度,準確率高。
本文選擇XGBoost和隨機森林作為基分類器,用改進的EasyEnsemble算法來解決類別不平衡的問題。為了方便調(diào)節(jié)參數(shù),用一般網(wǎng)絡(luò)搜索和貝葉斯方法調(diào)參,都會花費大量時間,本文通過逐步調(diào)節(jié)各個參數(shù),根據(jù)F1值的大小來選取較優(yōu)的參數(shù)。
通過前2步的工作,可以得到m個經(jīng)由不同的訓(xùn)練集進行訓(xùn)練的以軟投票策略融合XGBoost和RF的基分類器。運用EasyEnsemble的方法將這些基分類器通過公式(12)聯(lián)合起來做預(yù)測。
給定樣本x=(x1,x2,…,xn),xi∈Rm,集成模型有m個基分類器h1(x),h2(x),…,hm(x),則對于樣本x,其集成輸出的結(jié)果為:
(13)
輸入:未購買行為樣本N和發(fā)生購買行為樣本集P,且使得樣本集N與P的比值關(guān)系滿足數(shù)據(jù)集中未購買行為和發(fā)生購買行為的數(shù)據(jù)比;基分類器的個數(shù)m;
輸出:購買行為預(yù)測結(jié)果H(x)。
1)對樣本集N中的數(shù)據(jù)進行排序,按照順序不重復(fù)地均勻劃分為m個子樣本集Ni(i=1,2,…,m);
2)將樣本集Ni分別與樣本集P組合成m個訓(xùn)練集train_datai(i=1,2,…,m);
3)令hi=Softvoting(RF,XGBoost)(i=1,2,…,m),對測試集test_data預(yù)測得到m個結(jié)果;
4)將得到的m個結(jié)果hi(x)代入式(13),得到最終的二分類預(yù)測結(jié)果。
在處理樣本類別不平衡問題上,本文采用改進的EasyEnsemble的采樣方法。傳統(tǒng)的EasyEnsemble方法從大類樣本隨機選取和小類樣本相同的數(shù)據(jù),會導(dǎo)致樣本數(shù)據(jù)不能夠全面地利用大類樣本數(shù)據(jù)。相比傳統(tǒng)的EasyEnsemble方法,改進后的EasyEnsemble方法將反例均勻劃分成若干個集合分別與正例一起供不同的分類算法學(xué)習(xí),這樣不僅可以充分利用樣本數(shù)據(jù),又可以借鑒Bagging的思想來降低算法預(yù)測結(jié)果的偏差。通過軟投票的方法將XGBoost和隨機森林進行結(jié)合后做預(yù)測,降低了單一算法預(yù)測產(chǎn)生的概率偏差,可以使一些預(yù)測概率接近0.5的數(shù)據(jù)得到正確預(yù)測,從而優(yōu)化預(yù)測效果。
max_depth、min_child_weight和colsample_bytree是XGBoost的3個重要參數(shù)。max_depth為決策樹的最大深度,取值范圍為1~32,其F1曲線如圖1所示。min_child_weight表示葉節(jié)點的最小樣本權(quán)重,取值范圍為1~6,其F1曲線如圖2所示。colsample_bytree表示樣本特征采樣比,取值范圍為0.5~1,其F1曲線如圖3所示。
圖1 在XGBoost中關(guān)于max_depth的F1曲線
圖2 在XGBoost中關(guān)于min_weight_child的F1曲線
圖3 在XGBoost中關(guān)于colsample_bytree的F1曲線
由圖1~圖3可知,本文實驗得到的XGBoostt算法的最優(yōu)參數(shù)選擇如下:max_depth為10,min_child_weight為3,colsample_bytree為0.74。
n_estimators、max_depth、min_child_leaf是隨機森林的3個重要參數(shù)。n_estimators是決策樹的數(shù)量,取值范圍為10~200,其F1曲線如圖4所示。max_depth為決策樹的最大深度,取值范圍為1~40,其F1曲線如圖5所示。min_child_leaf表示最小的葉節(jié)點樣本數(shù),取值范圍為1~50,其F1曲線如圖6所示。
圖4 在隨機森林中關(guān)于n_estimators的F1曲線
圖5 在隨機森林中關(guān)于max_depth的F1曲線
圖6 在隨機森林中關(guān)于min_samples_leaf的F1曲線
由圖4~圖6可知,本文實驗得出的隨機森林算法的最優(yōu)參數(shù)選擇如下:n_estimators為70,max_depth為15,min_samples_leaf為12。
本文實驗數(shù)據(jù)來源于阿里巴巴天池大賽提供的2014年11月18日到2014年12月18日移動電商平臺數(shù)據(jù)集,以11月中的27日、28日和29日用戶對商品的交互行為實驗數(shù)據(jù),其中行為信息有瀏覽、收藏、加購物車、購買4種方式。
對于提供的數(shù)據(jù),先將重復(fù)數(shù)據(jù)去掉,再對數(shù)據(jù)進行特征提取。對于生成的大量空數(shù)據(jù),根據(jù)實驗數(shù)據(jù)的特點來進行填充,提取購買瀏覽轉(zhuǎn)化率、購買收藏轉(zhuǎn)化率、購買加購物車轉(zhuǎn)化率的特征時,瀏覽、收藏、加購物車的次數(shù)為0,則特征為空值的意義是接近于無窮大,那么選擇用相對較大的數(shù)據(jù)進行填充。特征工程結(jié)束后,對數(shù)據(jù)進行歸一化處理,用互信息的方法對數(shù)據(jù)進行特征選擇,選擇了互信息值較大的58個特征。
本文采用精確率P、召回率R和F1值這3個指標來對模型的性能進行評估。其中,將預(yù)測類別組合化為真正例(TP)、真負例(FP)、假正例(TN)、假負例(FN),3個指標的計算公式為:
為了驗證本文提出的預(yù)測模型及算法的有效性,實驗使用上述的數(shù)據(jù)集和評價標準,與當前熱門的機器學(xué)習(xí)模型進行縱向?qū)Ρ?,其中包括邏輯回歸模型(LR)、支持向量機模型(SVM)、隨機森林模型(RF)、梯度提升樹模型(GBDT)和極限梯度提升模型(XGBoost)。再對數(shù)據(jù)集進行不同采樣方法的橫向?qū)Ρ?,其中包括簡單欠采樣、EasyEnsemble和改進后的EasyEnsemble這3種采樣方法。最后對特征選擇前和特征選擇后的數(shù)據(jù)結(jié)果進行對比。
以精確率P、召回率R和F1值為評價指標,與當前熱門的機器學(xué)習(xí)算法進行縱向?qū)Ρ?,與不同的采樣方法進行橫向?qū)Ρ?,特征選擇前的對比見表2,特征選擇后的對比見表3。
表2 特征選擇前的不同算法對比
表3 特征選擇后的不同算法對比
1)所有對比實驗中,本文改進的EasyEnsemble的軟投票策略模型的P值和F1值最高,說明對用戶購買行為預(yù)測效果最好。
2)2種關(guān)于EasyEnsemble采樣方法都比簡單欠采樣方法預(yù)測結(jié)果更好,說明平衡樣本數(shù)據(jù)對于模型的訓(xùn)練十分有必要。
3)進行特征選擇后的預(yù)測結(jié)果不僅沒有低于特征選擇前的預(yù)測結(jié)果,甚至還略優(yōu)于特征選擇前的預(yù)測結(jié)果,說明特征選擇不僅能夠減少計算量,還能減少一些帶有噪聲的數(shù)據(jù)。
4)本文算法的分類效果比其它的模型要優(yōu)秀很多,主要是因為改進的EasyEnsemble的采樣方法能夠使全局數(shù)據(jù)參與模型訓(xùn)練,而且也降低了模型的偏差和方差。使用本文的方法,使P值和R值更加均衡,從而提高F1值。
關(guān)于各個特征在商品購買預(yù)測的重要性,可以在刪去某些特征后,通過訓(xùn)練分類器得到F1值來判斷,F(xiàn)1值越小,則刪去的特征重要性越強。本文將分別對用戶特征、商品特征和刪除用戶-商品特征作對比,如表4所示。再分別刪除關(guān)于不同時間形成的特征作對比,如表5所示。
表4 不同屬性特征對預(yù)測結(jié)果的影響
由表4得知,刪除用戶特征、商品特征或者用戶-商品特征,其F1值均有下降,說明這些特征對于商品銷售預(yù)測均有意義。從這3種特征的比較中,發(fā)現(xiàn)去除用戶特征后,F(xiàn)1值較去除另外2種特征有明顯下降,說明在用戶購買預(yù)測中,用戶特征發(fā)揮著更重要的作用。
表5 不同時間構(gòu)造的特征對預(yù)測結(jié)果的影響
由表5得知,刪除由時間刻度9天生成的特征對預(yù)測值的影響最大,F(xiàn)1值的下降也更為明顯,說明在給用戶推薦商品時,9天以內(nèi)的銷售記錄發(fā)揮很重要的作用,也更能顯示用戶網(wǎng)上購物的傾向程度。
本文提出了一種改進的EasyEnsemble算法的軟投票策略下用戶購買預(yù)測方法。通過分析阿里巴巴天池大賽所提供的數(shù)據(jù),從用戶、商品和用戶-商品方面提取了108個特征。使用互信息的方法對數(shù)據(jù)進行特征選擇,一方面降低了計算量,另一方面消除了部分數(shù)據(jù)噪聲。在處理類別不平衡問題方面,使用了改進的EasyEnsemble算法,與簡單采樣法和傳統(tǒng)EasyEnsemble算法相比,它利用了集成學(xué)習(xí)機制,將反例均勻劃分成與正例數(shù)量相同的若干組數(shù)據(jù),用分類算法對每組數(shù)據(jù)進行訓(xùn)練,這樣就可以將全局數(shù)據(jù)進行充分利用。用軟投票的方法將XGBoost和隨機森林結(jié)合起來進行訓(xùn)練,再作為一個分類器做預(yù)測。用改進的EasyEnsemble算法可以把Bagging和Boosting方法結(jié)合起來,降低偏差和方差。通過用軟投票的方法將XGBoost和隨機森林進行融合的方法與單一的算法相比,可以更好地判斷一些“似是而非”的數(shù)據(jù),從而提高了F1值。在與熱門的機器學(xué)習(xí)算法進行對比實驗后,本文提出方法具有更高的F1值,表明本文模型更加有效,也能更好地解決用戶購買預(yù)測問題。