夏國恩,唐 琪 ,張顯全
1.廣西師范大學 計算機科學與信息工程學院,廣西 桂林 541000
2.廣西財經(jīng)學院 工商管理學院,南寧 530000
當代社會,隨著各行業(yè)的市場趨近于飽和,行業(yè)之間的競爭愈發(fā)激烈,企業(yè)家開始意識到,減少老用戶的流失應該作為公司的首要目標[1]??蛻舯A舨呗灾饕槍Ω唢L險的潛在流失客戶,改善其現(xiàn)有服務,降低其流失可能性。另外,經(jīng)研究表明,吸引一個新用戶所需的成本遠高于保留一個老用戶的成本[2]。因此,及時并準確地識別潛在流失客戶對于企業(yè)降低成本是至關重要的。
客戶流失預測是客戶管理關系中的一個重要組成部分,如圖1所示,包括業(yè)務分析、數(shù)據(jù)分析、數(shù)據(jù)預處理、建模、評估和部署[3]。本文所關注的是客戶流失預測的建模過程,該模塊通過構建合適的機器學習算法擬合客戶歷史數(shù)據(jù),來推斷客戶未來某個時期的特定狀態(tài)。企業(yè)通過預測模型可以精準地識別存在流失風險的用戶,及時制定有針對性的營銷策略,挽留這部分客戶。
圖1 客戶流失預測流程圖
自20世紀90年代以來,客戶流失預測的研究主要分為兩個方向。第一個方向:研究者通過構造更加復雜的分類模型,來不斷提升模型預測的表現(xiàn)及泛化能力。2008年夏國恩等人[4]提出了基于支持向量機的客戶流失預測模型,該模型在預測精度方面表現(xiàn)較好,但缺乏可解釋性。Huang等人[5]于2014年提出了可理解的支持向量機,該模型不僅在精度方面表現(xiàn)優(yōu)異,而且通過構建樸素貝葉斯樹,可以精準地分析客戶流失的原因。文獻[6]使用粒子群智能優(yōu)化算法來代替多層感知機中的梯度下降優(yōu)化算法,該模型避免了神經(jīng)網(wǎng)絡陷入局部最優(yōu)的問題,大幅提高了預測精度。文獻[7]使用遺傳算法來進行建模并加入了利益最大化準則,在提高模型預測表現(xiàn)的基礎上,還為企業(yè)選擇利益最大化的方案。文獻[8]提出了使用CUSUM算法構建自動化流失報警系統(tǒng),利用當前與最近的過程數(shù)據(jù)來檢驗過程均值中不大的變化或變異性,累加樣本偏差,在超過設定閾值時自動報警。
第二個方向:管理者通常想了解客戶流失的真正原因,以此來改善企業(yè)的服務質量,避免產(chǎn)生更多的流失客戶。2014年Verbeke W等人[9]通過社交網(wǎng)絡分析來劃分客戶群體,針對不同的客戶群體使用不同的分類模型,既提高了預測表現(xiàn),又分析了不同社交群體的流失原因。2017年Amin A等人[10]使用窮舉法(EA)、遺傳算法(GA)、覆蓋算法(CA)與LEM2算法(LA)這四個規(guī)則生成機制來提取客戶歷史數(shù)據(jù)中的隱藏準則,提取并組合成有用的客戶特征。文獻[11]使用了Logistic回歸與決策樹的混合算法來構建預測模型,該算法在預測表現(xiàn)與可解釋性上都較好。文獻[12]提出了一種基于帕累托多目標優(yōu)化的特征組合方法,提高了對特征擴展空間的理解。
近些年,由于GPU運算速度的提升、數(shù)據(jù)量的不斷增長和模型架構的優(yōu)化[13],深度神經(jīng)網(wǎng)絡在計算機視覺[14]、語音識別[15]和機器翻譯[16]等方面取得了巨大的進步,并且準確度遠高于大部分傳統(tǒng)模型。在客戶流失預測領域,深度神經(jīng)網(wǎng)絡模型如多層感知機的應用大幅提高了模型的準確率和時效性,然而與圖像、語音等非結構化數(shù)據(jù)不同的是客戶數(shù)據(jù)中含有大量離散屬性,這些離散數(shù)據(jù)是無法被神經(jīng)網(wǎng)絡擬合的,這就使得多層感知機不能充分發(fā)揮其優(yōu)勢。
針對上述問題,本文將分別使用堆疊自編碼器與實體嵌入方法,對傳統(tǒng)的多層感知機模型進行優(yōu)化,并運用于客戶流失預測模型,解決了one-hot編碼后數(shù)據(jù)維度過高及數(shù)據(jù)稀疏帶來的計算消耗等問題。
離散屬性指的是結構化數(shù)據(jù)中具有有限或無限可數(shù)個值,可以使用或不使用整數(shù)表示的屬性,包括序數(shù)屬性、二元屬性和標稱屬性。例如,使用1,2,3,4來表示客戶的職業(yè)(標稱屬性):教師、牙醫(yī)、程序員和農(nóng)民,自然不能說農(nóng)民是教師的4倍或者教師加程序員等于農(nóng)民,這些表征數(shù)字僅僅是名義上的數(shù)字,不具備實際的意義。
相對于傳統(tǒng)機器學習算法來說,深度神經(jīng)網(wǎng)絡能夠更好地擬合連續(xù)型數(shù)值函數(shù)[17]。然而,在客戶流失預測中,用戶數(shù)據(jù)中的離散特征幾乎不存在連續(xù)性,極大地影響了損失函數(shù)的收斂,如果只是簡單將這些離散數(shù)據(jù)用整數(shù)表征,那么神經(jīng)網(wǎng)絡的效果自然不理想。通常情況下,為了解決上述問題,通常使用one-hot編碼來處理離散數(shù)據(jù),如{性別:{男,女,未知}}編碼為{男性{100},女性{010},未知{001}},但這種方式存在三個弊端:第一,在樣本量較大的情況下,one-hot編碼會產(chǎn)生大量稀疏數(shù)據(jù),這會影響分類器的準確度;第二,完全獨立地處理離散屬性中不同的值,忽略了不同值之間的內在關系[18];第三,若離散屬性或某些離散屬性值過多,容易造成維度災難。
多層感知機(MLP)是一種相鄰層之間的神經(jīng)元節(jié)點全連接,而同一層內的神經(jīng)元節(jié)點無連接的神經(jīng)網(wǎng)絡模型。如圖2所示,樣本的訓練數(shù)據(jù)由輸入層輸入,通過一個或多個全連接層,每一個全連接層中的神經(jīng)元能對原始數(shù)據(jù)進行擬合,最后由輸出層將數(shù)據(jù)輸出,使用輸出值與樣本標簽來構建損失函數(shù),通過反向傳播的梯度下降算法[13]迭代降低損失函數(shù)并更新模型的參數(shù),使損失函數(shù)達到最小值,此時的多層感知機模型就具備了精確擬合樣本特征的能力。
圖2 多層感知機
堆疊自編碼器[19]是一種能將高維數(shù)據(jù)以低維形式表征的神經(jīng)網(wǎng)絡模型,該模型能有效地降低數(shù)據(jù)維度并保留絕大部分信息,相比于單層的自編碼器,其保留的數(shù)據(jù)信息更多。如圖3所示,數(shù)據(jù)由輸入層輸入,經(jīng)編碼層編碼后,在隱藏層以低維向量表征高維數(shù)據(jù),再通過解碼層解碼,最后由輸出層輸出,與傳統(tǒng)神經(jīng)網(wǎng)絡模型不同,自編碼器并不使用樣本標簽來構造損失函數(shù),而是使用輸入的樣本數(shù)據(jù)與輸出值來構造均方差損失函數(shù):
其中,xi為第i個樣本的輸入數(shù)據(jù),outi為第i個樣本的輸出值,γ為模型參數(shù),m為樣本個數(shù)。通過多次迭代降低損失函數(shù),使模型輸出值盡可能與輸入數(shù)據(jù)相同,那么隱藏層中的向量就是樣本數(shù)據(jù)的低維表征形式。
圖3 堆疊自編碼器
實體嵌入[20]在神經(jīng)網(wǎng)絡中最早用于相關數(shù)據(jù)的表征,時至今日,應用范圍越來越廣泛,例如詞嵌入[21]已經(jīng)在自然語言處理領域占有重要的地位。實體嵌入方法不僅增加同一屬性內不同值之間的相關性,而且在嵌入空間中不同的嵌入向量若相關性越高,則距離越近,反之則越遠。對于嵌入前后的向量通常使用三元組(h,r,l)表示,h代表高維原始數(shù)據(jù),l代表嵌入后的低維表征向量,r代表兩個向量之間的聯(lián)系。如圖4所示,對于高維稀疏向量,將其映射到低維空間:
其中,xj為第 j個離散屬性進行one-hot編碼后的向量,Xi為映射后的向量。假設tj為第 j個離散屬性的值的個數(shù),則xj的維度為tj,進行映射后的向量Xj維度在1到tj-1之間。通過映射入低維空間,每一個離散屬性的編碼向量都降低了維度,并且增加了屬性值之間的交互作用。
圖4 實體嵌入
在本文的客戶流失預測模型中,如圖5所示,使用單層網(wǎng)絡模型,其全連接層節(jié)點使用Elu激活函數(shù):
其中,α為超參數(shù),需要調試。相比于Sigmoid、Relu等激活函數(shù),Elu函數(shù)能有效解決梯度彌散和無法攜帶負值信息的問題[22]。輸出層只有1個神經(jīng)元,采用sigmoid激活函數(shù):
該函數(shù)能將輸出值壓縮在0到1之間,當預測值大于等于0.5時,意味著該客戶為潛在流失客戶;當值小于0.5時,則該客戶為正??蛻簟T诜聪騻鞑ミ^程中,使用Adam梯度下降算法[23]最小化交叉熵損失函數(shù):
其中,m為樣本個數(shù),yi∈{0,1}為第i個樣本的標簽值,1代表該客戶屬于流失群體,0代表該客戶屬于非流失群體,predi∈(0,1)為第i個樣本的預測值,θ為模型參數(shù),a為任意自然常數(shù)。以單個樣本為例:當yi=1時,若要使損失最小,則 predi→1;當yi=0時,若要使損失函數(shù)最小,則predi→0。通過多次迭代,使得損失函數(shù)達到小值,模型的參數(shù)趨于穩(wěn)定,輸出值與樣本標簽盡可能相同,以此實現(xiàn)模型預測的能力。
圖5 多層感知機模型
一般來說,堆疊自編碼器用于數(shù)據(jù)的預處理,但在本文中,為了將低維表征數(shù)據(jù)與預測模型產(chǎn)生關聯(lián),將自編碼器對于編碼數(shù)據(jù)的低維表征過程與多層感知機模型的反向傳播過程同時進行,目的是在保留離散數(shù)據(jù)絕大部分信息的同時,將高維的稀疏數(shù)據(jù)以一種低維的形式表征,并用于多層感知機的優(yōu)化過程。
圖6 融合堆疊自編碼器的多層感知機模型
如圖6所示,首先,將進行one-hot編碼后的離散數(shù)據(jù)放入堆疊自編碼器處理,得到低維表征向量:
其中,w2與b2分別為堆疊自編碼器中隱藏層的權重與偏移量。然后,將數(shù)值型數(shù)據(jù)與低維表征向量合并:
最后,使用多層感知機處理合并后的向量:
并使用sigmoid函數(shù)將其概率化輸出,該模塊構造的損失函數(shù)及迭代優(yōu)化算法與基于多層感知機的預測模型相同。
在訓練的過程中,同時使用Adam優(yōu)化算法迭代優(yōu)化堆疊自編碼器模塊的均方差損失函數(shù)與多層感知機模塊的交叉熵損失函數(shù)。這兩個過程通過訓練逐漸達到平衡,既實現(xiàn)了數(shù)據(jù)降維、解決了數(shù)據(jù)稀疏問題,也在一定程度上增加了離散數(shù)據(jù)間不同值的相關性。堆疊自編碼器模塊的編碼層,隱藏層和解碼層均使用sigmoid激活函數(shù),目的是使低維表征后的數(shù)據(jù)盡可能接近于預處理后的數(shù)值型數(shù)據(jù),以免影響模型分類效果。
相比于傳統(tǒng)感知機,融合了實體嵌入的模型并不直接將離散數(shù)據(jù)的編碼向量與數(shù)值型數(shù)據(jù)合并輸入多層感知機模型,而是如圖7所示,首先在每個編碼層后分別添加了一個嵌入層,即將k個離散屬性編碼后的向量進行映射:
其中,xj代表第 j個離散屬性的one-hot編碼,該過程使得每一個嵌入層都是原編碼向量的復雜組合形式。然后,將嵌入后的所有表征向量與數(shù)值型數(shù)據(jù)合并:
最后將組合的特征向量放入多層感知機訓練,該模塊的構建方式與上述的兩個模型相同。
圖7 融合實體嵌入的多層感知機模型
該模型在訓練的過程中通過迭代使用反向傳播能夠同時優(yōu)化實體嵌入過程與多層感知機模塊,利用神經(jīng)網(wǎng)絡的分布式表征能力,將編碼后的特征向量轉化為低維表征向量,既解決了數(shù)據(jù)稀疏的問題也加強了離散數(shù)據(jù)不同值之間的交互作用。在實際操作中,Xj的維度,即嵌入層神經(jīng)元的個數(shù),對于二元屬性,維度值取1,而其余嵌入層的維度,則需要在實驗中不斷地調試來確定。
本文的對比模型使用CART、KNN、樸素貝葉斯和SVM,這些模型在客戶流失預測中得到了廣泛的應用,并且在準確性和健壯性等方面效果較好。
CART是一類決策樹算法,采用二叉樹結構,在分類預測中,通過計算基尼系數(shù)選出最優(yōu)特征及特征值,來劃分數(shù)據(jù)集并建立左右結點:
其中,k表示第k個類別,pk為第k個類別的概率。
相比于ID3和C4.5,CART的計算復雜度較低,且實行剪枝策略,能有效解決過擬合問題,提高模型的泛化能力:
其中,α為正則化參數(shù),Cα為損失函數(shù),C(T)為訓練數(shù)據(jù)的預測誤差, ||T為子樹T的葉子結點數(shù)。
在分類預測中,KNN算法通過計算閔可夫斯基距離,來選擇最接近預測樣本的k個樣本的多數(shù)類別作為預測值輸出:
其中,xp、xq為樣本中的兩個樣本,n為樣本的屬性個數(shù)。
樸素貝葉斯是一種生成式機器學習分類算法。該算法首先計算樣本標簽與樣本屬性之間的聯(lián)合概率密度,再通過貝葉斯公式計算條件概率密度,最后選擇概率最大的類別作為預測輸出:
其中,k表示第k個類別。
SVM雖然誕生時間不久,但憑借其在分類精度和泛化能力方面的優(yōu)異表現(xiàn),得到了極為廣泛的應用。
對線性可分的數(shù)據(jù)集來說,SVM首先構造帶約束的優(yōu)化問題:
其中,m為樣本數(shù),αi為拉格朗日乘子。通過SMO算法可以計算出α向量,進而得到切分數(shù)據(jù)集的最優(yōu)超平面。然而,在現(xiàn)實中,數(shù)據(jù)集一般是線性不可分的,這時則需要通過核函數(shù)將低維不可分數(shù)據(jù)映射到高維可分空間,然后計算出最優(yōu)的超平面,用來劃分數(shù)據(jù)集。
本文實驗使用ubuntu18操作系統(tǒng),工程軟件為Jupyter Notebook。使用深度學習框架TensorFlow構建基于多層感知機的模型,機器學習庫Sklearn構建對比實驗。硬件為16核32線程2.1 GHzCPU(E5-2620),6 GB顯存的顯卡(Quadro M5000),64 GB內存。
本文實驗使用兩個不同的真實電信用戶數(shù)據(jù)集:
(1)數(shù)據(jù)集1選自kaggle數(shù)據(jù)科學大賽。該數(shù)據(jù)集包含了7 043個樣本,其中流失客戶數(shù)為1 869,非流失客戶數(shù)為5 174;屬性個數(shù)為19,其中離散屬性15個,數(shù)值屬性4個。由于該數(shù)據(jù)集樣本數(shù)較少,且流失客戶數(shù)量遠小于正常客戶,所以屬于非平衡型小樣本數(shù)據(jù)集。
(2)數(shù)據(jù)集2選自kaggle數(shù)據(jù)科學大賽。該數(shù)據(jù)集包含了100 000個樣本,其中流失用戶數(shù)量為49 562,非流失用戶數(shù)量為50 436;屬性個數(shù)為100,其中有79個數(shù)值型屬性和21個離散型屬性。由于該數(shù)據(jù)集樣本數(shù)較多,且流失客戶數(shù)量與正??蛻艋境制剑詫儆谄胶庑痛髽颖緮?shù)據(jù)集。
對于二分類的預測模型來說,一般使用準確率(accuracy)、精準率(precision)、召回率(recall)和F1值(F1)作為模型評判的主要指標,公式如下:
其中,TP為正確劃分為流失客戶的樣本數(shù);TN為正確劃分為非流失客戶的樣本數(shù);FP為錯誤劃分為流失客戶的樣本數(shù);FN為錯誤劃分為非流失客戶的樣本數(shù)。為了直觀地分析模型優(yōu)劣,實驗使用了ROC曲線與PR曲線[24],其中ROC曲線縱坐標為TPR(正確預測的流失客戶數(shù)與總流失客戶數(shù)的比值),橫坐標為FPR(錯誤預測的流失客戶數(shù)與總流失客戶數(shù)的比值);PR曲線的縱、橫坐標分別為精準率與召回率。
在客戶流失預測中,如果分類模型預測某一客戶會流失,但實際上沒有,這類錯誤是可以接受的。然而,如果分類模型預測某一用戶會留下,但該用戶卻屬于流失群體,這類錯誤是無法接受的。因此,對于流失客戶數(shù)較少的非平衡型數(shù)據(jù)集1,最重要的指標則是召回率;對于均衡型數(shù)據(jù)集2,最重要的指標則是精準率和召回率。另外,考慮到預測模型的實效性,實驗指標還增設了測試集的總擬合時間。
實驗中的MLP,融合自編碼器的MLP及對比模型的參數(shù)如表1所示,融合實體嵌入的MLP的部分嵌入層維數(shù)如表2所示。
表1 模型參數(shù)
本文使用5折交叉驗證進行實驗,將測試集實驗結果的平均值作為模型評判的標準,各指標如表3所示,ROC曲線與PR曲線如圖8所示。
CART在兩個數(shù)據(jù)集上的實驗效果表現(xiàn)良好,即使是非平衡型數(shù)據(jù)集,也能很好地處理。總的來說,該算法擅長處理結構化數(shù)據(jù),計算復雜度較低,在實效性方面有優(yōu)勢,但在處理大樣本多屬性的數(shù)據(jù)集時,如果樣本中某些特征的樣本比例過大,那么模型精度會受到較大的影響。
表2 部分嵌入層的維度
KNN通過計算歐氏距離來選擇預測樣本附近的部分樣本,即劃分客戶群體,選擇該群體中的多數(shù)類別作為預測值輸出。這種方法等同于默認了樣本各屬性屬于同一數(shù)據(jù)分布與范圍,但實際上,每一個屬性都有各自的數(shù)據(jù)分布與范圍,僅僅通過計算歐氏距離所得到的客戶群體是極為不準確的,特別是在屬性值較多或者處理非平衡數(shù)據(jù)集的情況下,會極大地影響模型精度。另外,該算法計算量太大,導致模型時效性很差。
樸素貝葉斯通過先驗概率和數(shù)據(jù)來得到后驗概率,所以在給定輸出類別的情況下,默認假設樣本屬性之間是相互獨立的,但在實際中,這個假設是不成立的,各個屬性之間必然存在相關性,所以一旦屬性個數(shù)較多或者屬性之間相關性較強,則分類效果會很差。另外,在處理非平衡型數(shù)據(jù)集時,該算法的表現(xiàn)較差。
SVM通過各類核函數(shù)將低維線性不可分的樣本映射到高維可分空間,該算法在模型精度方面優(yōu)勢較大,但隨著樣本量的增加,核函數(shù)映射的維度會越來越高,這就使得計算量不斷增加,大大影響了預測模型的時效性,所以SVM不適合處理大樣本數(shù)據(jù)集。
在模型精度和時效性方面,使用GPU運算的神經(jīng)網(wǎng)絡模型有較大的優(yōu)勢。即使是處理深度神經(jīng)網(wǎng)絡所不擅長的小樣本數(shù)據(jù)集,改進后的多層感知機模型也能很好地學習樣本屬性的內在特征。與傳統(tǒng)的多層感知機模型相比,自編碼器與實體嵌入解決了one-hot編碼造成的問題,將高維編碼數(shù)據(jù)向低維空間映射,降低了神經(jīng)網(wǎng)絡收斂于局部最小值的可能性,增加了數(shù)據(jù)之間的關聯(lián)度,將離散屬性以數(shù)值表示,改善了離散屬性的度量方式,提高了各項評判指標。相比于自編碼器對所有離散屬性的編碼數(shù)據(jù)進行映射,實體嵌入則是分別將每一個離散屬性向低維空間映射,對數(shù)值間關聯(lián)的表征能力更強,因此,其分類準確度更高。
表3 實驗結果
圖8 ROC曲線與PR曲線
多層感知機模型在客戶流失預測的應用中,由于用戶數(shù)據(jù)存在大量的離散屬性,使得模型無法很好地擬合數(shù)據(jù),而自編碼器和實體嵌入能有效解決這個問題,改進后的模型效果提升明顯。然而,本文的研究依舊存在一些不足,未來的重點工作將包含以下兩個方面:
第一,由于多層感知機能擬合數(shù)值型離散數(shù)據(jù),所以在本文的實驗中,只是對非數(shù)值型離散數(shù)據(jù)進行編碼,而將數(shù)值型離散數(shù)據(jù)與非數(shù)值型離散數(shù)據(jù)以相同方式處理,是否能夠進一步提高模型準確度是一個值得研究的問題。
第二,在實體嵌入的實驗中,每個離散屬性對應的嵌入層大小需要不斷調試,如果數(shù)據(jù)集存在大量離散數(shù)據(jù)又或者每個離散屬性包含大量的值,那么調試的工作量無疑是巨大的,因此,一個確定嵌入層大小的方法是至關重要的。