賈志強,李 濤,樂金祥
(武漢科技大學 計算機科學與技術學院,湖北 武漢 430065)
在大數(shù)據(jù)和線上營銷的影響下,傳統(tǒng)營銷方式已經無法滿足銷售企業(yè)的發(fā)展要求,商家急需尋找新途徑刺激用戶的消費行為。而銷售企業(yè)發(fā)展至今,已經積累了龐大的用戶基數(shù)與消費數(shù)據(jù),于是,從海量的數(shù)據(jù)中挖掘有價值的信息,利用大數(shù)據(jù)算法推動營銷成為了企業(yè)關注重點[1]。
在實際應用上,消費行為預測[2]在營銷活動中具有很高的價值,如果能提前預測出用戶是否將要購買商品,那么企業(yè)在接下來的營銷活動中將會有針對性地選擇用戶,既能保證想要消費的用戶享受到優(yōu)惠,購買更多商品,增強忠誠度;也能避免不會到店消費的用戶對企業(yè)產生抵觸心理,降低企業(yè)形象。因此消費行為預測的研究是極具實用性與商業(yè)價值的。
在消費行為預測研究中,Wang Xingfen等[3]采取XGBoost算法作為特征變換,再輸入到邏輯回歸模型中,實驗證明該算法能很好地預測電子商務中用戶的購買行為。Kareena等[4]對決策樹、支持向量機、隨機森林、模糊聚類、遺傳算法等技術進行了實驗,最終得出支持向量機是最好的一種;H. Valecha等[5]研究了消費者購買產品行為與環(huán)境因素、組織因素、個體因素、人際因素等參數(shù)的變化關系,利用獨特特征工程設計實時演化隨機森林分類器預測消費者購買行為;X. Dou等[6]研究電子商務平臺不平衡的真實購物數(shù)據(jù),運用以對稱決策樹(oblivious trees)為基學習器的catboost模型對消費者是否會購買某一產品進行分析和預測,證明該模型有更高的準確率。
雖然消費行為預測的研究已經有了一定的成果,但大多數(shù)實驗在特征工程上都是盡可能多地考慮影響預測的各個方面,從不同的角度去挖掘特征,盡可能擴展特征挖掘的廣度[7]。而在已有數(shù)據(jù)和特征的基礎上繼續(xù)深入挖掘,擴展特征挖掘的深度方面還存在欠缺。在算法建模方面,大多數(shù)已有實驗都是利用單個模型進行預測,雖然也有提到集成學習的相關文獻,但也只是使用封裝好的帶有集成學習思想的某一種分類器,如catboost、隨機森林、XGBoost等這類強分類器,沒有充分利用多個經典分類器的優(yōu)點,利用集成學習將這些優(yōu)點結合起來進行預測。
為此,該文提出在深度上深入挖掘的特征工程方法。一是采用兩種滑動窗口相結合的特征提取方法提取到更多樣本數(shù)據(jù),深入挖掘消費數(shù)據(jù)的時間信息,給特征添加時間屬性,同時分別對離散和連續(xù)特征做獨熱編碼和分箱操作,更好地處理屬性數(shù)據(jù)、減少噪聲干擾;二是深入挖掘商品與用戶之間隱含的關聯(lián)關系,基于先驗知識與矩陣分解,對特征進行交叉,深入挖掘各特征中的協(xié)同信息,在原有特征的基礎上提取出新特征。而在算法建模方面,采用stacking策略構建集成學習模型,以XGBoost、隨機森林和梯度提升決策樹作為初級學習器進行特征變換,以邏輯回歸作為元學習器進行消費行為預測,充分利用到各模型算法的優(yōu)勢。通過特征工程和模型算法對比實驗證明該特征工程方法在多個模型算法中均能明顯提高精準率,提出的集成學習模型預測效果也均高于單個模型。
在對消費行為進行預測時,由于購買用戶通常比例很小,正負樣本不平衡,正樣本數(shù)據(jù)量較少,直接訓練模型效果不理想,為增加正樣本數(shù)據(jù)量,該文采用定長滑動窗口[8]提取更多樣本數(shù)據(jù),再結合欠采樣解決樣本不平衡問題。
根據(jù)企業(yè)實際營銷活動情況,定長滑動窗口特征提取方法先固定特征與標簽的區(qū)間長度,然后通過窗口的滑動不斷提取特征數(shù)據(jù)。如用第T1到T30提取第一批樣本數(shù)據(jù),再用T31到T37打上是否到店買藥的標簽,取滑動步長為N如7天,用第T8到T37提取第二批樣本數(shù)據(jù),用T38到T44打上是否到店買藥的標簽。依此類推,提取更多的樣本數(shù)據(jù),如圖1所示。
圖1 定長滑動窗口提取特征
為能充分挖掘用戶消費的時間屬性,還原用戶消費習慣,得到分類效果優(yōu)秀的特征,提出先固定待提取特征的數(shù)據(jù)區(qū)間長度,再通過變長滑動窗口的方法依次劃分時間段提取特征(見圖2)。因為用戶消費存在周期性,經過一個周期后再給用戶做推薦更能激起用戶的購買欲;同時,最新的消費記錄能更為準確地反映用戶消費情況,因此分別給不同時間段提取的特征賦予權重,給特征加上時間屬性,能更好地反映用戶的消費行為。同樣以30天作為提取特征的數(shù)據(jù)區(qū)間長度,采取前7天(T24-T30)、前14天(T17-T30)、前21天(T10-T30)和全部時間段分別提取如表1所示的數(shù)據(jù)特征。
圖2 變長滑動窗口提取特征
表1 特征集1提取的特征
在提取的特征中,存在較多連續(xù)型的消費特征,如各時間段的商品數(shù)、消費金額、消費客單價、購買種類數(shù)等,為降低噪音數(shù)據(jù)的影響,增強模型的魯棒性,同時加快模型的迭代速度,對上述連續(xù)型特征進行特征分箱。
對于用戶的離散型特征,對其進行編碼處理,主要是對二值取值的特征進行標簽編碼和對多類別的特征進行獨熱編碼,見表2。
表2 二值編碼和獨熱編碼特征
除了分別考慮用戶和商品的特征,二者相結合的組合特征也對預測有較大影響。該文采用基于先驗知識的特征交叉和基于矩陣分解的特征交叉方法,充分挖掘各個特征中的交互信息。
(1)基于先驗知識的特征交叉,通過分析相關銷售人員的工作經驗以及與商品相關的專業(yè)知識,找出有關聯(lián)的用戶特征和商品特征進行交叉組合。該文以醫(yī)藥企業(yè)為例,如把商品類別特征和用戶性別特征進行交叉組合,男性用戶可能會偏好體能保健類和男科類,而女性用戶可能會偏好美白保健類和婦科類,這樣組合在一起能得到較為有效的組合特征,如表3和表4所示。
表3 用于交叉的用戶特征
表4 用于交叉的商品特征
(2)基于矩陣分解的特征交叉,根據(jù)用戶購買商品的歷史消費記錄構造(m×n)的矩陣,其中m代表用戶數(shù)量,n代表商品數(shù)量。將用戶-商品矩陣分解成用戶矩陣(m×k)和商品矩陣(k×n),將每一位用戶和每一種商品分別映射到一個k維的隱空間中,每個用戶對應用戶矩陣中的一行,每個商品對應商品矩陣中的一列,如圖3所示,用戶和商品都可以用一個k維向量表示。計算用戶和商品隱向量之間的相似度,作為用戶和商品之間的潛在交叉特征。
圖3 矩陣分解獲取交叉特征
集成學習通過結合多個學習器完成學習任務,先訓練出多個個體學習器,再采用某種集成策略將這些個體學習器相結合。文獻[9]利用多源數(shù)據(jù)集和多種機器學習方法交叉構建單一檢測模型,并設計一種基于Logistic的集成學習方法,進一步提升惡意軟件未知變種檢測方法的準確性和魯棒性。文獻[10]考慮不同個體學習器在數(shù)據(jù)集上的表現(xiàn)以及各學習器之間的多樣性,提出一種基于Bagging異質集成學習的竊電檢測方法,并驗證了該模型在竊電檢測中的準確率、命中率、誤檢率等檢測指標更好。文獻[11]運用信息增益法篩選指標,采用V折交叉確認法,利用UCI的信用數(shù)據(jù)對單個分類器、集成分類器模型的分類精度和穩(wěn)健性進行試驗比較,證明集成分類器模型在個人信用評估的分析中有更為優(yōu)秀的效果。由此可以看出,集成學習在很多應用場景上都有較大的優(yōu)勢。
該文構建一種基于stacking策略[12]的集成學習模型對用戶的消費行為進行預測。stacking策略的集成學習模型結構如圖4所示。
圖4 stacking策略的集成學習模型結構
該集成學習模型采用XGBoost[3]、隨機森林[13]和梯度提升決策樹[14]作為初級學習器,對特征進行變換,再輸入到元學習器邏輯回歸模型中做最終的預測。具體算法步驟如下:
(1)劃分數(shù)據(jù)集為訓練集與測試集。
(2)將訓練集分別輸入初級學習器中,在每個初級學習器中采用k折交叉驗證,進行k次實驗,每次實驗對1/k的訓練集和全部測試集做預測,把每次預測出的1/k訓練集合并得出完整訓練集的預測結果,對k次測試集的預測結果取平均得到最終測試集預測結果;合并訓練集與測試集的預測結果得到完整數(shù)據(jù)集預測結果。
(3)將每一個初級學習器的預測結果作為一個特征輸入元學習器邏輯回歸模型得到最終預測結果。
算法1:初級學習器特征變換算法。
輸入:X_train:訓練集特征數(shù)據(jù);X_test:測試集特征數(shù)據(jù);y_train:訓練集標簽數(shù)據(jù)
輸出:變換后的訓練集特征數(shù)據(jù);變換后的測試集特征數(shù)據(jù)
1:clfs為初級學習器列表
2:k為正整數(shù),表示采取k折交叉驗證
3:X_train_stack = np.zeros((X_train.shape[0], len(clfs))) # 初始化用于存儲訓練集預測結果的二維數(shù)組
4:X_test_stack = np.zeros((X_test.shape[0], len(clfs))) # 初始化用于存儲測試集預測結果的二維數(shù)組
5:skf=StratifiedKFold(n_splits=k, shuffle=True, random_state=1) # 用于k折交叉劃分訓練集
6:for i, clf in enumerate(clfs): # 遍歷每一個初級學習器
7: X_stack_test_n = np.zeros((X_test.shape[0], n_folds)) # 初始化用于存儲測試集結果的二維數(shù)組
8: for j, (train_index, test_index) in enumerate(skf.split(X_train, y_train)): # 遍歷k折交叉劃分的訓練集
9: tr_x = X_train.iloc[train_index,:] # 讀取第j次劃分的訓練集中用于訓練的特征數(shù)據(jù)
10: tr_y = y_train[train_index] # 讀取第j次劃分的訓練集中用于訓練的標簽數(shù)據(jù)
11: clf.fit(tr_x, tr_y) # 訓練第i個初級學習器
12: X_train_stack[test_index, i] = clf.predict_proba(X_train.iloc[test_index,:])[:, 1] # 存儲第i個初級學習器
13:在第j次劃分下被用于測試的訓練集的預測結果
14: X_stack_test_n[:, j] = clf.predict_proba(X_test)[:, 1] # 存儲第i個初級學習器第j次對測試集預測的結果
15: X_test_stack[:, i] = X_stack_test_n.mean(axis=1) # 第i個初級學習器預測測試集的k次結果取平均
16:return X_train_stack,X_test_stack # 返回變換后的訓練集特征數(shù)據(jù)和測試集特征數(shù)據(jù)
實驗環(huán)境:Windows10操作系統(tǒng),16 G內存,3.6 GHz八核心處理器,實驗軟件為Python3.7。
該文采用某藥店服務商提供的四個月的用戶消費記錄,一個用戶購買一個藥品代表一條記錄,去掉沒有用戶Id的無效消費數(shù)據(jù)和單價小于等于0的贈品、塑料袋、退貨等噪音數(shù)據(jù),剩余有效數(shù)據(jù)共2 059 718條。按照前30天消費行為預測后7天是否有消費,后7天有消費即為正樣本,沒有消費即為負樣本,采取7天為步長,滑動提取更多樣本數(shù)據(jù)。一共提取的樣本數(shù)據(jù)為284 071條,其中正負樣本15 018條,負樣本269 053條。
考慮到實驗數(shù)據(jù)正負樣本不平衡的問題,為提高實驗可信度,采用精準率(PA)來評估特征工程的有效性,在算法建模效果驗證實驗上,為更為直觀地比較模型效果,添加auc值和roc曲線的對比。
將預測值分類匯總,建立如表5所示的混淆矩陣。TP代表模型中預測正確的會響應消費的用戶數(shù),F(xiàn)P代表模型中誤測會響應消費的用戶數(shù),TN代表模型中預測正確的不會響應消費的用戶數(shù),F(xiàn)N代表模型中誤測不會響應消費的用戶數(shù)。
表5 混淆矩陣
(1)精確率(Precision)。
P=TP/(TP+FP)
(1)
精確率P表示預測為正例的所有樣本中預測正確的比例,衡量了分類器對正例的識別能力。
(2)特效度(Sensitive)。
S=TN/(TN+FN)
(2)
特效度S表示所有預測為負例的樣本中預測正確的比例,衡量了分類器對負例的識別能力。
(3)精準率PA。
(3)
評價指標精準率PA受響應消費用戶和沒有響應消費用戶兩者的準確率的影響,避免因響應消費用戶與沒有響應消費用戶樣本數(shù)偏差影響評價指標。而auc值為roc曲線下的面積,auc值越大,roc曲線下的面積越大,模型效果越好。
文獻[4]在消費行為預測中使用了多種分類算法,對比證明支持向量機的預測效果要優(yōu)于其他方法,文獻[15]和文獻[3]使用邏輯回歸和XGBoost預測消費行為,文獻[5]使用隨機森林算法也獲得了較好的預測效果。為客觀地驗證特征工程的有效性,該文選用支持向量機、邏輯回歸、XGBoost和隨機森林這四種算法進行對比實驗。
為驗證文中特征工程方法在藥品消費行為預測中的有效性,采取實驗步驟如下:
(1)輸入未采用文中特征工程方法的原始特征進行預測;
(2)在原始特征的基礎上添加文中特征工程方法,再與原始特征的預測效果做對比。
為排除偶然性問題,采用十折交叉驗證的方法進行10次實驗,取平均,得到的結果如圖5所示。
圖5 特征工程有效性對比
在相同數(shù)據(jù)集中,對定長滑動窗口提取的原始特征添加文中特征工程處理方法,在支持向量機、邏輯回歸、XGBoost、隨機森林分類模型4種經典的模型算法中采用十折交叉驗證進行對比實驗。通過實驗結果可知,較原始特征相比,在添加文中特征工程方法后精準度提高約5.75% ~14.92%。以上對比實驗結果表明,文中特征工程方法對模型效果有提升作用,即在消費行為預測上具有一定的有效性。
為驗證文中提出的基于stacking策略的集成學習模型優(yōu)于單個的機器學習模型,選取集成學習模型與其包含的單個模型進行對比,即與XGBoost、隨機森林、梯度提升決策樹和邏輯回歸進行對比,實驗結果如圖6與表6所示。
圖6 文中模型與單個模型roc曲線對比
表6 文中模型與單個模型精準率對比
由圖6的roc曲線對比可知,在消費行為預測上,基于stacking策略的集成學習模型整體性能要優(yōu)于其他四個單個模型,其中auc值最大,達到72.74%。由表6可知,基于stacking策略的集成學習模型在精準率上也是最高的,達到82.81%,驗證了提出的集成學習模型在消費行為預測上的有效性。
銷售企業(yè)結合電子管理系統(tǒng)快速發(fā)展,已經積累了龐大的用戶基數(shù)與消費數(shù)據(jù),而在現(xiàn)今的互聯(lián)網(wǎng)時代,傳統(tǒng)的營銷方法已無法滿足企業(yè)的發(fā)展要求,商家急需尋找新途徑刺激用戶的消費行為,提高企業(yè)競爭力,于是從海量數(shù)據(jù)中挖掘價值信息,預測用戶的消費行為,從而促進銷售成為了企業(yè)關注的重點。該文考慮到多數(shù)特征工程方法在現(xiàn)有數(shù)據(jù)挖掘深度上不足的問題,通過結合具體活動場景,提出了深入挖掘特征的時間屬性和特征之間隱含信息的特征工程方法,并在多個算法模型中驗證了該特征工程方法的有效性,精準率提升約5.75%~14.92%。同時充分學習利用多個分類器的優(yōu)點,構建stacking策略的集成學習模型,對消費行為進行預測,實驗證明該集成學習模型比單個模型的效果更好,精準率最高,達到82.81%,充分驗證了該模型在消費行為預測上的有效性。