周賀陽
(北京云杉世界信息技術(shù)有限公司 北京市 100006)
電商秒殺系統(tǒng)[1],就是網(wǎng)絡賣家發(fā)布一些超低價格的商品,所有買家在同一時間網(wǎng)上搶購的一種銷售方式。由于商品價格低廉,往往一上架就被搶購一空,有時只用一秒鐘。2011年以來,在淘寶京東等大型購物網(wǎng)站中,秒殺活動是非常的一種形式。為了增加秒殺商品的營業(yè)額,提高秒殺商品的點擊率ctr[2]是非常重要的事情,常見的ctr預估方案是利用LR[3]邏輯斯特回歸來預測,這種方案簡單效果也很好,在工業(yè)界得到了大規(guī)模推廣,但是LR是強記憶模型對于泛化特征并不友好。直接利用深度學習來預測秒殺ctr[7]也是一種不錯的方案,但模型比較重,在線上環(huán)境部署的要求比較高。
對于用戶對秒殺商品的泛化特征提取可以通過隱語義模型[6]來提取,隱語義模型更加注意挖掘用戶秒殺包含商品之間的泛用信息。具體來說隱語義模型和協(xié)同過濾有點像,協(xié)同過濾中的相似性都是基于現(xiàn)實世界中具有實際意義的語義維度來定義的。類比在SVM(Support Vector Machine)中的核函數(shù)等模型,將數(shù)據(jù)映射到高維空間,調(diào)整坐標軸,以使得數(shù)據(jù)在新的空間中更好分的這個思想,調(diào)整后的空間和維度可以比現(xiàn)實世界中具有實際語義的空間和維度能更好地描述事物對象。也就是說,如果可以把事物的描述通過某種轉(zhuǎn)換,變換到一個新的語義空間,可能會更好地描述事物的相似性。
本文總體結(jié)構(gòu)借鑒了谷歌Wide&Deep[8]網(wǎng)絡的思路,將用戶對秒殺商品特征分為三種,分別為用戶對秒殺商品的記憶特征、用戶秒殺商品泛化特征、用戶秒殺商品時間序列特征,其中記憶特征承擔了wide部分,泛化特征和時間序列特征承擔了deep部分,然后通過XGBoost模型將wide部分和deep部分聯(lián)合進行訓練。
對于用戶秒殺商品而言,需要首先提取其記憶特征,記憶特征主要分為三個方面,首先是用戶的特征包含戶的年齡,性別,地理位置,職業(yè),手機平臺等,然后是秒殺商品的特征,包括秒殺商品信息、商品一級分類信息、商品二級分類信息、秒殺商品圖片信息等,最后是環(huán)境上下文特征,包括星期、所處的頁面,用戶對于ctr的反饋等。這些特征有一個共同點就是屬于顯性的特征,如果出現(xiàn)在模型中,屬于強記憶特征,基于記憶的推薦通常更貼近主題,并且與用戶已經(jīng)執(zhí)行的操作直接相關(guān)。
獲取到上述記憶特征后,需要進行特征的離散化,以秒殺商品的反饋ctr,用戶年齡,性別三個特征為例。反饋ctr是一個浮點數(shù),直接作為特征是可以的,假設1號特征就是反饋ctr。對應年齡來說就不是這樣了,因為年齡不是浮點數(shù),而且年齡的20歲跟30歲這兩個數(shù)字20,30大小比較是沒有意義的,相加相減都是沒有意義的,哪怕用邏輯化公式再比較,得到的值也是比較大的,但是往往20歲的人跟30歲的人對同一個秒殺商品的興趣差距不會那么大。解決這樣的情況的方法就是,每個年齡一個特征,如總共只有20歲到29歲10種年齡,就把每個年齡做一個特征進行OneHot編碼轉(zhuǎn)化為對應的二進制,這樣的特征稱為離散化特征。
離散化完成后會進行特征交叉,比如對于生鮮電商來說,黃燜雞用戶更加喜歡雞肉用品,酸菜魚用戶更加喜歡魚類,就可以用用戶的門店屬性跟商品分類屬性的交叉得到的特征值。還有很多其他的方式可以進行交叉,比如秒殺商品跟用戶經(jīng)濟實力的交叉特征,秒殺商品跟手機平臺的交叉特征,秒殺商品跟地域的交叉特征,用戶和秒殺活動的交叉特征,本文的離散特征和交叉特征總共47個。
除了上述的用戶秒殺商品記憶特征外,泛化特征也是很重要的一種補充。記憶能力”可以被理解為模型直接學習并利用歷史數(shù)據(jù)中物品或者特征的“共現(xiàn)頻率”的能力?!胺夯芰Α笨梢员焕斫鉃槟P蛡鬟f特征的相關(guān)性,以及發(fā)掘稀疏甚至從未出現(xiàn)過的稀有特征與最終標簽相關(guān)性的能力。
協(xié)同過濾能夠很好的解決用戶商品相似性問題但泛化能力不足。為了增強泛化能力,從協(xié)同過濾中衍生出矩陣分解模型(Matrix Factorization, MF)或者叫隱語義模型, 就是在協(xié)同過濾共現(xiàn)矩陣的基礎上,使用更稠密的隱向量表示用戶和物品,挖掘用戶和物品的隱含興趣和隱含特征。
本文利用Funk-SVD[5]矩陣分解算法進行矩陣分解,F(xiàn)unk-SVD的思想為: 把求解上面用戶和秒殺商品兩個隱矩陣的參數(shù)問題轉(zhuǎn)換成一個最優(yōu)化問題,可以通過訓練集里面的觀察值利用最小化來學習用戶矩陣和秒殺物品矩陣,具體如下所示:
其中rui是用戶對秒殺商品的下單次數(shù),是用戶矩陣,qi是秒殺商品矩陣,用戶矩陣和秒殺商品矩陣的維度都為64,也就是用戶和秒殺商品都會轉(zhuǎn)化為64維的向量,訓練時會采用梯度下降法來求解上述問題,其中分解時的學習率alpha 為0.1,正則化系數(shù)lmbda為0.1, 最大迭代次數(shù)為max_iter為100。
由于用戶對每天秒殺商品的點擊關(guān)系是一個比較典型的時間序列問題,本文用lstm來提取其時間序列特征,并將lstm最后一個序列ot的狀態(tài)作為XGBoost模型的特征輸入,如下所示:
長短期記憶網(wǎng)絡(LSTM, Long Short-Term Memory)是一種時間循環(huán)神經(jīng)網(wǎng)絡,是為了解決一般的RNN(循環(huán)神經(jīng)網(wǎng)絡)存在的長期依賴問題而專門設計出來的,所有的RNN都具有一種重復神經(jīng)網(wǎng)絡模塊的鏈式形式。在標準RNN中,這個重復的結(jié)構(gòu)模塊只有一個非常簡單的結(jié)構(gòu),例如一個tanh層。LSTM 同樣是這樣的結(jié)構(gòu),但是重復的模塊擁有一個不同的結(jié)構(gòu)。不同于單一神經(jīng)網(wǎng)絡層,這里是有四個,以一種非常特殊的方式進行交互。
LSTM如圖1所示,內(nèi)部主要有三個階段:忘記階段,這個階段主要是對上一個節(jié)點傳進來的輸入進行選擇性忘記。簡單來說就是會 “忘記不重要的,記住重要的”。具體來說是通過計算得到的來作為忘記門控,來控制上一個狀態(tài)的哪些需要留哪些需要忘。選擇記憶階段,這個階段將這個階段的輸入有選擇性地進行“記憶”。主要是會對輸入進行選擇記憶。哪些重要則著重記錄下來,哪些不重要,則少一些。當前的輸入內(nèi)容由前面計算得到的表示。輸出階段,這個階段將決定哪會被當成當前狀態(tài)的輸出。
圖1:lstm網(wǎng)絡結(jié)構(gòu)
本文選用的時間序列輸入特征包含如下:
(1)用戶按天的秒殺點擊行為時間序列,衡量用戶秒殺的點擊習慣;
(2)用戶秒殺商品點擊距離上一次點擊天數(shù)時間序列,衡量用戶商品的點擊周期;
(3)用戶秒殺商品下單距離上一次下單天數(shù)時間序列,衡量用戶商品的下單周期;
(4)用戶下單時間序列,衡量用戶下單按天的購買習慣;
(5)用戶下單距離上一次下單天數(shù)時間序列,衡量用戶下單的購買周期;
(6)用戶下單按天購買商品數(shù)量時間序列,衡量用戶下單按天購買商品數(shù)量習慣;
(7)用戶秒殺商品下單星期時間序列,衡量用戶秒殺商品下單對星期的習慣。
本文采用 XGBoost[4]來進行最終的秒殺商品點擊預測,XGBoost是陳天奇等人開發(fā)的一個開源機器學習項目,高效地實現(xiàn)了GBDT算法并進行了算法和工程上的許多改進,被廣泛應用在Kaggle競賽及其他許多機器學習競賽中并取得了不錯的成績。XGBoost是有k個基模型組成的一個加法模型,假設我們第t次迭代要訓練的樹模型是ft(x),則有:
(1)設定函數(shù)初始值F0,為一個恒值函數(shù),論文中基于變量優(yōu)化出恒值,實際上也可以給定任意值或者直接為0。
(2)根據(jù)參數(shù)M,進行M次迭代,不斷將當前函數(shù)Fm-1往最優(yōu)函數(shù)F*空間上逼近,逼近方向就是當前函數(shù)下的函數(shù)負梯度方向。由于優(yōu)化函數(shù),而非變量,本質(zhì)上屬于泛函優(yōu)化。
(3)每次迭代計算出函數(shù)負梯度,基于訓練數(shù)據(jù)構(gòu)建模型來擬合負梯度。原則上可以選擇任何模型:樹模型,線性模型或者神經(jīng)網(wǎng)絡等等,很少框架支持神經(jīng)網(wǎng)絡,如果用樹模型進行擬合進行CART建樹過程。
(4)優(yōu)化步長,根據(jù)目標函數(shù)來最優(yōu)步長ρm,屬于變量優(yōu)化,并更新當前函數(shù),繼續(xù)迭代。框架并沒有收縮機制來控制過擬合,采用樹模型和線性模型也可能過度擬合,目前現(xiàn)代的boosting框架都支持收縮,即最終的優(yōu)化步長應乘以shrinkage參數(shù):。
本文將輸入的用戶商品記憶特征、用戶商品隱語義特征、用戶秒殺商品時間序列特征進行拼接后作為最終的特征輸入,將用戶秒殺商品當天的是否點擊作為預測標簽,然后利用XGBoost進行訓練,訓練學習速度參數(shù)learning_rate為0.1,迭代次數(shù)為n_estimators為100,最大樹深度max_depth是7,子樹觀測權(quán)重之和的最小值min_child_weight為1,損失參數(shù)為binary:logistic二分類的邏輯回歸,最終模型返回預測的概率。
本文選擇四種模型進行對比,分別為LR、決策樹、隨機森林和本文模型,模型評價選擇Auc(ROC曲線下的面積)和Acc(準確率)兩個指標,詳細結(jié)果見表1所示,其中離線部分和LR、決策樹、隨機森林三個模型均有對比結(jié)果,線上A/B測試部分對比了baseline最好的隨機森林,這樣通過離線和在線兩種方式更能對本文提出的模型進行客觀的評價。
表1:算法結(jié)果對比
算法隨機抽取線上50000條標準的秒殺商品數(shù)據(jù)進行評測,訓練集和測試集、的比例為7:3。由于采用特征選擇后,可以看到模型效果,LR、決策樹、隨機森林都是屬于傳統(tǒng)的機器學習模型,用的特征也都是以記憶特征為主,本文在以前的模型基礎上主要增加了lstm提取的時間序列特征和用戶商品之間的隱語義特征,相比較最好的baseline隨機森林,本文提出的模型在Auc增加了5.3%,Acc增加了4.6%,線上A/B測試點擊率提高了4.2%。
在本文中,我們提出了一種將記憶特征和泛化特征相結(jié)合來進行秒殺商品點擊預估的機器學習方案,在記憶特征保留了傳統(tǒng)的用戶秒殺商品的交互特征,在泛化特征方面引入了隱語義分解和lstm時間序列來分別提取泛化特征和時間序列特征,實驗表明這樣在保證模型輕量級的前提下,可以有效的提高線上秒殺商品的點擊率。在未來,我們將在這些問題上繼續(xù)實踐我們的方法,并進一步地設計更完善的算法結(jié)構(gòu)來解決類似的問題。