朱玨樟
(浙大城市學院計算機系,杭州310000)
近年來,隨著電商行業的不斷發展,網上購物的用戶不斷增加,用戶的行為數據相比以前網絡不普及,電商平臺不成熟的時候要多得多。
電商行業的蓬勃發展使各個商家希望運用計算機分析方法從大量的商品數據、客戶數據、客戶購買行為數據中找到某些規律并根據規律來進一步預測客戶的購買行為,從而來減小營銷成本并提升收益,更好的留住用戶。雖然目前已經有了很多成熟的算法,例如協同過濾,可以利用興趣相同或有相似行為的用戶歷史數據,來推薦或者預測未來用戶可能會對哪些商品有行為。但是由于現實場景中的用戶數據量、商品數據量、用戶購買行為數據量巨大,直接使用算法會導致計算效率低而且無法運用于實際場景中。本文想要從大量的商品中,挑選出部分商品,再結合用戶的歷史購買行為從這部分商品中選出用戶未來最有可能對其有購買行為的商品,這種方法可以更好地應用到實際中。
通過查閱相關內容的文獻和研究發現,國內外學者對用戶的行為預測主要可以分為,通過電商平臺所獲得的真實用戶行為數據記錄,發現用戶所感興趣的商品,并根據推薦算法來為用戶推薦可能感興趣的商品的方法,還有一種是通過機器學習算法,分析用戶行為記錄來找到用戶行為的某些規律來預測用戶的行為,兩種方式。
在基于推薦系統進行用戶行為預測方面,韓民琦通過挖掘用戶的隱式反饋數據來研究用戶在決策過程中的行為,發現隱式反饋的數據更能反映消費者的購物傾向[1]。高茂庭提出了融合主題模型和協同過濾的彈幕視頻推薦算法(DRCFT)來解決一些網站由于缺乏用戶評分而無法推薦的問題[2]。
在基于機器學習進行用戶行為預測方面,楊颯然在XGBoost 和LightBGM 算法上進行了客戶購買行為的建模和預測[3]。陳軍華利用客戶購買行為數據構建了基于隱藏多維度的客戶偏好推薦算法[4]。胡東波對電子商務消費者調查問卷使用了決策樹來進行挖掘[5]。Silahtaroglu 等在顧客歷史購物行為數據和人口統計數據基礎上,用決策樹和神經網絡來預測顧客是否會購買自己購物車里的商品[6]。
本文希望借用先召回少量商品再用XGBoost、LightGBM、CatBoost 算法對召回的商品進行排序的方法,來實現對用戶行為的準確預測。
該競賽提供的數據是一組1-16 天的用戶行為日志和用戶信息以及感興趣商品信息。原本是要用1-16天的用戶行為來預測未來17 天的用戶行為,但是線上的測試集不可見。所以我改為用1-15 天的用戶行為預測未來第16 天的用戶行為。同時因為原數據集數據量過大,硬件條件的限制,所以從原數據中提取了100000 個用戶的5537110 條行為記錄作為訓練集,第16 天5000 個用戶的行為記錄,作為測試集。在用戶行為數據集中,分別包含了4 個字段,用戶ID、商品ID、行為類型、時間戳。其中行為類型有‘pv’、‘buy’、‘cart’、‘fav’,分別對應瀏覽,購買,添加到購物車,收藏等用戶行為,并視每一種行為均為用戶對該商品感興趣的表現。在用戶信息數據集中也包含了4 個字段,用戶ID,性別,年齡,購買力。其中性別由數字0 和1來表示,0 代表男性用戶,1 代表女性用戶。購買力由整數1-9 來表示不同用戶的購買能力。
在商品信息數據集中同樣包含了4 個字段,商品ID,類目ID,店鋪ID,品牌ID。
通過查看用戶信息、商品信息、用戶行為數據集發現無缺失值。由于用戶行為數據集中的時間戳不方便觀察和統計,所以將其轉化為天數,以便后續的統計分析。之后我們將用戶行為按照興趣程度分別把‘pv’設為1,‘fav’設為2,‘cart’設為3,‘buy’設為4。圖1 統計了在未來用戶感興趣的商品類別在過去15 天的數量變化情況。

圖1 未來用戶感興趣商品在過去15天的數量分布情況
從圖1 中可以看出隨著時間離第15 天越近,未來被用戶感興趣的商品被感興趣的次數就越多,離第15天越遠,未來被用戶感興趣的商品被感興趣的次數就越少。所以我們根據時間對行為的重要程度,將時間轉化為權重計算用戶對商品的感興趣程度。
用戶信息在本數據集中分別有性別、年齡、消費水平三個特征。數據集包含了100000 個用戶。我們首先根據性別進行統計,其中男性用戶有40822 位,女性用戶有59178 位,以女性用戶居多。統計各個年齡的用戶數量發現用戶主要集中在20-40 歲左右,這也和實際情況相符合,這個年齡段的人相比20 歲以下的還未有經濟能力的少年來說,更有能力和時間進行網上購物,相比40 歲以后的人來說,更有購物的欲望和對更好品質生活的追求。這個年齡段的用戶有69067位,差不多占了所有用戶的2/3。最后統計不同消費能力的用戶數量。經過統計發現消費水平為‘6’的用戶占絕大多數。根據編號的順序可以知道,這一消費水平的用戶屬于中產階級或略微好于中產階級的這一類人群,有27742 位用戶差不多占了總用戶的1/3 左右。圖2 展示了男性用戶在不同年齡所擁有的不同消費能力的數量情況。圖3 展示了女性用戶在不同年齡所擁有的不同消費能力的數量情況。
從圖中可以明顯的發現,小于20 歲的人群以低消費水平為主,20 歲之后,隨著年齡的增長低消費人群快速變少,高消費人群快速增加。在30 歲左右低消費和高消費人群都到達頂峰,之后隨著年齡的增長緩慢下降。圖中各個消費水平人數隨年齡的變化曲線都比較類似,側面反映出了年齡對消費水平和消費欲望的影響。

圖2 男性用戶年齡-消費能力數量分布圖

圖3 女性用戶年齡-消費水平數量分布圖
數據集中所記錄的是0-14 天的用戶行為(假定最早的行為發生在第0 天)。對這15 天用戶所進行的操作類型進行統計,發現‘pv’操作,即瀏覽的次數最多,有4896977 次,占據了所有記錄的88.4%,‘cart’操作,即添加購物車的次數有318981 次,占了所有記錄的6%左右,‘buy’操作,即購買的次數有186855 次,占所有記錄的3.3%,‘fav’操作,即收藏的次數僅有134297次,占所有記錄的2.3%。這說明,在網購期間,絕大多數用戶以瀏覽為主,即絕大多數人都喜歡在電商平臺‘閑逛’,雖然該行為只是瀏覽,但是也反映了該商品吸引了用戶點擊瀏覽。添加購物車的行為比瀏覽更代表用戶對商品感興趣。值得注意的是,經比賽解釋,并不是所有購買的行為都有添加購物車的記錄,有可能添加購物車是在第0 天之前,所以購買行為和添加購物車行為沒有必然的聯系,經統計在15 天內先發生‘cart’再發生‘buy’的記錄只有僅僅數百條。為了更加明顯直觀的看出不同用戶群體的用戶行為特征,我們將用戶信息數據集和用戶行為數據集連接在一起,根據上述對用戶信息的分析,將用戶分為低消費水平男性/女性少年/壯年/中年/老年用戶,中等消費水平男性/女性少年/壯年/中年/老年用戶,高消費水平男性/女性少年/壯年/中年/老年用戶,這24 類用戶。為了發現同年齡段,同性別的用戶之間的行為共同點,我們挑選了20-40 歲之間的男性用戶,并對這些用戶所操作過的共同商品數量進行統計計算,同時考慮到不同消費水平的用戶所喜愛的商品也會有所不同,所以將20-40 歲之間的男性用戶分為20-40 歲消費水平1-5/6/7-9 的男性用戶。圖4 為20-40 歲消費水平1-5 即低消費的男性用戶,圖5 為20-40 歲消費水平為6 即中等消費的男性用戶,圖6 為20-40 歲消費水平7-9 即高等消費的男性用戶。

圖4 20-40歲低消費男性用戶操作的商品和商品數量分布

圖5 20-40歲中等消費男性用戶操作的商品和商品數量分布

圖6 20-40歲低消費女性用戶操作的商品和商品數量分布
從上述圖表中可以很明顯的發現,相似的用戶群體對相同商品有著相似的興趣,而且都在第200 個商品左右用戶關注的商品開始分散,并且每種商品被用戶操作的次數都差不多,所以呈現出了長尾分布。這種長尾分布的尾部占了很大一部分,而且這一部分的商品種類很多,但是數量又很少。所以我們把每個用戶群體最感興趣的前k 個商品當做是能夠代表這個用戶群體興趣的商品,這為之后從商品庫中挑選商品候選集提供了思路。
在商品信息數據集中,有商品ID,商品類別,店鋪ID,品牌ID,4 個字段的信息。一共有1306170 件商品。其中商品類別有7824 個,店鋪有423589 個,品牌有177464 個。為了發現用戶行為和商品信息之間的關系,我們將用戶行為數據集和商品信息數據集進行連接。對于歷史上用戶曾經感興趣過的商品類型是否會在未來仍會被用戶所感興趣的問題,我們沒有區分用戶行為一同分析了用戶在15 天內的行為記錄。如圖7 所示,大半用戶在未來仍會對之前感興趣的商品類型有操作,這些被重復操作的商品類型更能表現用戶的喜好,而這些商品類型隨著用戶的數量增多重復次數也會增多。

圖7 用戶對歷史感興趣商品類別重復操作數量情況
同樣對于歷史上用戶曾經感興趣過的店鋪是否在未來仍會被用戶所感興趣的問題,同樣進行了上述統計計算。如圖8 所示,用戶對之前感興趣的店鋪在未來仍有較大可能訪問。

圖8 用戶對歷史感興趣店鋪重復操作數量情況
這些信息都表明,用戶對同樣的商品類型和店鋪有一定的依賴性,用戶更喜歡去訪問以前有訪問或接觸過的東西。這對之后構造特征有所幫助。
由于商品數量非常龐大,評估用戶對每個商品的興趣度不現實,所以要從大量的商品信息中盡可能的挑選出用戶可能會感興趣,可能會對其有所行為的商品。這不僅減少了之后對商品排序的工作量,又剔除了一些長尾分布中處于尾部,可能會影響排序的樣本。本文通過商品類別和用戶類別進行召回,并結合兩種召回所得到的商品,作為商品候選集,同時構造測試集。
根據對數據的分析,發現用戶行為離未來越近,用戶感興趣的商品類別和未來用戶感興趣的商品類別越相似。而傳統的根據商品類別召回的方法是根據用戶所有的感興趣的商品類別不加區分的進行推薦,但是用戶很可能對很久之前買過的那種類別的商品已經失去了興趣,例如用戶在過去對鼠標很感興趣,但某一段時間之后對鼠標沒有任何操作,近期對自行車類的商品經常有行為,那么可以認為這個用戶的興趣已經發生了改變,對鼠標類的商品已經失去了興趣而對自行車類的商品有著濃厚的興趣。所以在進行商品類別召回的時候,可以多召回一些自行車類的商品,少召回一些鼠標類的商品,這樣的方法相比傳統的方法更加符合實際情況,召回的效果更好。
同時根據傳統的商品類別進行召回,以便在最后進行結果對比。
針對在15 天內沒有過行為的新客戶進行召回,以解決冷啟動問題。因為在過去沒有任何關于新用戶的行為記錄,所以無法利用之前的得出的結論進行預測。所以我們根據之前通過分析用戶信息得到的結果,將不同性別、年齡、消費水平的用戶分為20 歲以下/20-40 歲/40-60 歲/60 歲以上的男/女性低消費/中等消費/高消費用戶24 類。因為同類用戶所感興趣的商品數量呈現長尾分布,所以我們選擇前k 件商品作為能代表該類用戶興趣的商品,并將這些商品推薦給同類的新用戶。
根據歷史用戶行為數據分別構造了用戶特征,用戶-商品行為特征,商品特征中提取相關特征,并根據是否加入時間因素分為靜態特征和動態特征兩種特征,一共69 種特征。通過對之前召回的商品進行排序就可以獲得最終的推薦列表,也就是用戶在未來可能會對其有所行為的商品列表。我們將對商品排序的問題轉化為二分類問題,即判斷該商品是否會被用戶有所行為,并根據可能為1 的概率對商品進行排序。根據15 天內的用戶行為記錄和商品候選集構造訓練集。將用戶曾經感興趣的商品同該類商品類別中熱門的商品做并集,并把曾經感興趣的商品的標簽置為1,其余商品的標簽置為0,即從商品候選集中選取正樣本和負樣本,并不是將所有用戶所感興趣的商品都作為正樣本,因為有些商品被感興趣的次數太少,如果將其作為正樣本可能會影響結果。用同樣方法對不同類別的用戶構造訓練集。
由于正樣本和負樣本的比例過于不均衡,所以我們對負樣本采取隨機抽樣的方法最終將正、負樣本數的比例定為1:10,正樣本數量232329,負樣本數量2323290。最終的訓練集大小為2555619 條數據。之后使用XGBoost、LGBM、CatBoost 進行建模預測,根據預測的每個商品為1 的可能性進行排序,選出前k 個商品作為推薦商品,使用競賽給出的公式(1)計算結果。其中u 表示用戶,Pu(∣Pu∣≤50)為最后選出的用戶u的未來感興趣商品合集。Gu 為用戶u 的真實興趣商品合集,Hu 為用戶u 的歷史感興趣商品集合。即要從預測的商品合集中刪除用戶以往感興趣的商品。

本文采取交叉驗證的方式來對模型的訓練效果進行驗證,從訓練集中按照4:1 的比例劃分訓練集和驗證集,同時生成混淆矩陣來計算相應的預測結果,如召回率、AUC、F1-score,最后用全部訓練集數據建模預測測試集樣本。
在召回階段,本文采取的召回方式相較于傳統的根據商品類別召回方式不同,傳統的根據商品類別進行召回是將所有用戶所產生的用戶行為當做是同一時間發生的行為,并沒有對用戶行為的時間順序加以區別。實際情況中,用戶對商品的興趣會隨著時間的增加而不斷減弱,所以本文將用戶最后一次對某商品類別感興趣的時間轉化為相對應的權重,時間離未來近的商品類別所占的比重就越大,該商品類別召回的商品就越多。同時盡可能保持和傳統方式所召回的商品數量一致,方便結果對比。最后通過對兩組不同的5000 個用戶進行預測推薦,結果取平均值。
實驗結果如表1 所示,根據實驗結果顯示,XGBoost 要優于CatBoost 要優于LightGBM。

表1 實驗結果
最后將本文采用的方法與傳統的方法預測的結果相比較,如圖9 所示。

圖9 本文方法與傳統方法結果比較
從結果對比圖中發現,使用XGBoost 模型進行排序,本文的方法要比傳統方法提升了30%,使用LGBM模型進行排序結果提升了5.3%,使用CatBoost 模型進行排序結果提升了10.6%。根據以上結論,可以得出本文使用的方法要比傳統根據商品類別召回的方法更加符合實際情況,能更好地預測未來用戶的行為和適應用戶興趣的變化,在實際場景中有一定的應用價值。
本文通過對阿里巴巴天池大數據比賽提供的用戶行為數據進行研究,發現了用戶歷史行為對未來用戶行為的影響,并嘗試從大量的商品中召回少量商品再通過模型進行排序的方法,來提高預測用戶行為、推薦用戶商品的效率和準確率。對于將推薦算法更好地應用于實際場景有著一定的借鑒意義。