0 前言
隨著移動互聯(lián)網(wǎng)時代的到來,在移動通信市場上,內(nèi)部而言,各家運(yùn)營商之間的產(chǎn)品優(yōu)勢相對有限;外部而言,運(yùn)營商面臨互聯(lián)網(wǎng)企業(yè)的沖擊,對單個用戶價值的開發(fā)使得競爭更加激烈。在存量用戶十分有限的情況下,對于運(yùn)營商而言,維護(hù)高價值老客戶的投入比開發(fā)新用戶的投入更能有效節(jié)省企業(yè)成本開支。電信客戶離網(wǎng)分析相關(guān)研究已經(jīng)開展了很多年,從早期利用數(shù)據(jù)庫進(jìn)行OLAP分析,到使用數(shù)據(jù)挖掘算法進(jìn)行用戶離網(wǎng)預(yù)測。針對離網(wǎng)傾向的用戶實(shí)施客戶挽留,展開維系與關(guān)懷,以利于電信企業(yè)客戶的保持,對增強(qiáng)電信企業(yè)的綜合競爭力具有重要意義[5-6]。本文介紹了使用近年來機(jī)器學(xué)習(xí)中的流行算法來分析潛在離網(wǎng)用戶的方法,和早期研究使用的邏輯回歸、決策樹[2]、SVM等方法相比,XGBOOST適用于二分類問題,并具有很好泛化能力。
1 數(shù)據(jù)挖掘流程
采用機(jī)器學(xué)習(xí)的方法進(jìn)行數(shù)據(jù)挖掘,一般流程如圖1所示。
圖1 數(shù)據(jù)挖掘基本流程
給機(jī)器學(xué)習(xí)算法輸入的數(shù)據(jù),是經(jīng)過處理后的數(shù)據(jù),包括對空值、異常值的處理,對數(shù)據(jù)取值范圍和取值類型的處理,離散化、歸一化處理等;使其滿足所選擇的機(jī)器學(xué)習(xí)算法對數(shù)據(jù)類型和數(shù)據(jù)值的要求。算法選擇模塊包含訓(xùn)練模型時的單個算法選擇以及多個算法融合時的多算法選擇,以實(shí)際開發(fā)時測試樣本集的預(yù)測正確率為標(biāo)準(zhǔn)調(diào)整。各階段耗費(fèi)時間占比如圖2所示。
圖2 數(shù)據(jù)挖掘項(xiàng)目時間耗費(fèi)占比
其中程序開發(fā)涵蓋算法選擇、算法實(shí)現(xiàn)和模型輸出。由于目前很多算法已經(jīng)實(shí)現(xiàn)了功能模塊化,因此,這部分算法可以通過直接調(diào)用現(xiàn)成API[3]或者安裝功能模塊來實(shí)現(xiàn)。
2 用戶離網(wǎng)預(yù)測問題
在預(yù)測離網(wǎng)客戶的分析中,通常有幾個關(guān)鍵步驟:問題定義、算法選擇、數(shù)據(jù)準(zhǔn)備、結(jié)果評估、反饋修正。
問題定義:在電信企業(yè)實(shí)際業(yè)務(wù)中,對客戶離網(wǎng)理解最深入的是該領(lǐng)域的專家,因此對客戶流失的重要因素的判定具有指導(dǎo)意義。相關(guān)理解應(yīng)包括,定義什么是離網(wǎng),離網(wǎng)用戶類型有哪些(高價值用戶還是普通用戶),離網(wǎng)有哪些形式(是主動流失,例如由于客戶不滿意當(dāng)前服務(wù)或競爭對手提供了更優(yōu)質(zhì)服務(wù)而主動停止當(dāng)前服務(wù),進(jìn)行轉(zhuǎn)網(wǎng)、退網(wǎng),還是被動流失,例如學(xué)生客戶畢業(yè)異地工作,或客戶職業(yè)升遷異地調(diào)動的原因),離網(wǎng)分析通常更關(guān)注高價值用戶的主動流失,他們是電信企業(yè)利潤的重要來源。
算法選擇:確定好問題以后,對離網(wǎng)用戶的分析是根據(jù)準(zhǔn)備使用的算法來進(jìn)行建模的,需要確定原始數(shù)據(jù)集的來源,以及使用潛在離網(wǎng)用戶的哪些相關(guān)屬性。同時,原始數(shù)據(jù)集通常也被拆分為2個部分,一部分是訓(xùn)練集,用作構(gòu)造算法模型,另一部分是測試集,用于評估分類算法通過學(xué)習(xí)生成的模型是否合理。兩者的拆分通常是按照1∶1的比例,也可以根據(jù)業(yè)務(wù)分析專家的判斷進(jìn)行比例的調(diào)整。
數(shù)據(jù)輸入:據(jù)統(tǒng)計(jì),電信企業(yè)平均每月有97.5%的在網(wǎng)客戶,以及2.5%的離網(wǎng)客戶,因此原始數(shù)據(jù)集存在嚴(yán)重的比例不平衡。另外,電信企業(yè)一個地(市)的用戶數(shù)據(jù)就達(dá)到幾十萬甚至上百萬,如果對所有數(shù)據(jù)進(jìn)行訓(xùn)練,時間上很難滿足要求。并且,原始數(shù)據(jù)集由于來源于電信企業(yè)的不同領(lǐng)域和部門,許多比較重要的屬性值存在缺失和錯誤,降低了對潛在用戶離網(wǎng)的預(yù)測精度。同時,要進(jìn)行用戶離網(wǎng)預(yù)測,需要將能收集到的用戶相關(guān)屬性組織成一張表,稱為數(shù)據(jù)聚集,新生成的表稱為數(shù)據(jù)寬表,例如將用戶基本信息、持有終端信息和月消費(fèi)信息整合為一張寬表。
效果評估:算法輸出的模型用于測試樣本集時,混淆矩陣約定:TP(True Positive)指真實(shí)為1,預(yù)測也為1;FN(False Negative)指真實(shí)為0,預(yù)測為1;FP(False Positive)指真實(shí)為1,預(yù)測為0;TN(True Negative)指真實(shí)為0,預(yù)測也為0,則模型效果可通過以下各項(xiàng)指標(biāo)反映[4]。
準(zhǔn)確率 P = TP/(TP+FP) (1)
召回率 R = TP/(TP+FN) (2)
F1-score = 2×P×R/(P+R) (3)
3個指標(biāo)用于綜合評估模型效果優(yōu)劣。
模型輸出:通過指標(biāo)的綜合評定,確定使用或保留何種機(jī)器學(xué)習(xí)算法,保存訓(xùn)練模型以供調(diào)用。
3 機(jī)器學(xué)習(xí)算法
機(jī)器學(xué)習(xí)從無序的數(shù)據(jù)中挖掘有用的信息,狹義的指計(jì)算機(jī)“學(xué)習(xí)算法”的一門學(xué)問。關(guān)鍵術(shù)語包括:特征(也稱為屬性)、標(biāo)識(標(biāo)簽)、任務(wù)(分類或聚類、回歸)、訓(xùn)練樣本集、測試樣本集等。開發(fā)機(jī)器學(xué)習(xí)應(yīng)用程序的基本步驟通常包括[1]:收集數(shù)據(jù)、標(biāo)準(zhǔn)化輸入數(shù)據(jù)、分析輸入數(shù)據(jù)、訓(xùn)練模型、測試驗(yàn)證、實(shí)際應(yīng)用。機(jī)器學(xué)習(xí)的目的就是給定輸入x,得到預(yù)測值,并希望預(yù)測值與真實(shí)值y之間的誤差盡可能的小。下面介紹機(jī)器學(xué)習(xí)的4個經(jīng)典挖掘算法。
3.1 邏輯回歸
相對于線性回歸處理因變量是連續(xù)變量,邏輯回歸能更好地適用于因變量是分類變量的回歸問題,常見的就是二分類問題。邏輯回歸的因變量和自變量之間通常采用Sigmoid函數(shù)來描述:
(4)
它是一個S形的曲線(見圖3)。
圖3 S形函數(shù)
3.2 決策樹
決策樹是最經(jīng)常使用的數(shù)據(jù)挖掘算法,大量地應(yīng)用于分類問題。它是一種樹形結(jié)構(gòu),分為內(nèi)部節(jié)點(diǎn),葉子節(jié)點(diǎn)和分支。每個內(nèi)部節(jié)點(diǎn)表示一個特征或者屬性上的測試,每個分支代表一個測試輸出,每個葉子節(jié)點(diǎn)代表一個類別。它的優(yōu)點(diǎn)是計(jì)算復(fù)雜度不高,輸出結(jié)果易于理解,對中間值的缺失不敏感,可以處理不相關(guān)的特征數(shù)據(jù)。圖4為決策樹經(jīng)典模型圖。
圖4 決策樹
3.3 支持向量機(jī)(SVM)分類算法與核函數(shù)
SVM是機(jī)器學(xué)習(xí)中的有監(jiān)督線性分類算法,最初正式發(fā)表于1995年。SVM應(yīng)用在文本分類尤其是針對二分類任務(wù)顯示出卓越的性能,因此得到了廣泛的研究和應(yīng)用,后期在多分類任務(wù)也進(jìn)行了專門推廣。SVM通過向高維度空間映射來解決多維線性不可分問題,使樣本線性可分。如圖5所示,可將一維不可分問題轉(zhuǎn)化為二維可分問題[7]。核函數(shù)選擇是SVM中性能差別的最大原因。核函數(shù)選擇不合適,意味著樣本被映射到了不合適的特征空間,很可能導(dǎo)致性能不佳。
圖5 SVM高維映射
3.4 XGBoost
XGBoost(eXtreme Gradient Boosting)采用了回歸樹和集成Boosting 2種技術(shù)。在數(shù)據(jù)建模中,當(dāng)我們有數(shù)個連續(xù)值特征時,經(jīng)常采用Boosting分類器將成百上千個分類準(zhǔn)確率較低的樹模型組合起來,形成一個準(zhǔn)確率很高的預(yù)測模型。XGB可以理解為多個樹的并行預(yù)測,并將預(yù)測分值相加用于類別判斷。這個樹模型經(jīng)過不斷地迭代,在每次迭代就生成一棵新的樹,從而使預(yù)測值不斷逼近真實(shí)值(即進(jìn)一步最小化目標(biāo)函數(shù))。
XGBoost的并行樹如圖6所示,以樣本1為例,預(yù)測得分為:Tree1.樣本1.得分(2)+ Tree2.樣本1.得分(0.9)=2.9,相比于樣本2的-0.8,樣本3的-0.1,樣本4、5的-1.9,具有更大的預(yù)測概率。注意到,由于XGBoost出眾的效率與較高的預(yù)測準(zhǔn)確度在機(jī)器學(xué)習(xí)領(lǐng)域引起了廣泛關(guān)注。
圖6 XGBoost 并行樹
4 實(shí)驗(yàn)驗(yàn)證
電信企業(yè)可利用的輸入數(shù)據(jù)包括但不限于:用戶的基本信息、用戶的賬單信息、用戶的詳單信息、用戶的終端信息、用戶繳費(fèi)情況等各種表結(jié)構(gòu)信息。本次試驗(yàn)采用了電信企業(yè)的用戶賬單信息、用戶詳單信息和終端庫信息3張表中的字段,通過用戶編號user_id的關(guān)聯(lián),匯聚成一張數(shù)據(jù)寬表,其中賬單和詳單信息使用至少3個月以上的信息(見表1)。
表1 數(shù)據(jù)寬表
為了增加模型的有效性,可以通過單個算法的測試以及融合多個算法的測試,例如可以在實(shí)踐應(yīng)用時,第1次采用邏輯回歸算法建模和預(yù)測,第2次采用決策樹算法,第3次采用XGBoost算法,第4次采用將邏輯回歸和XGBoost算法的結(jié)果合并的預(yù)測方法。采用XGBoost算法建模的實(shí)驗(yàn)偽代碼如下。
第1步:
#導(dǎo)入xgboost模塊:
import xgboost as xgb
第2步:
#讀取訓(xùn)練屬性,為建模準(zhǔn)備輸入數(shù)據(jù):用戶離網(wǎng)預(yù)測是一個典型的有監(jiān)督分類問題。因此需要讀入訓(xùn)練特征,以及目標(biāo)標(biāo)識:
feature_file_name = "train.feat"
target_file_name = "train.target"
feature_file = open(feature_file_name,'rt')
target_file = open(target_file_name,'rt')
#準(zhǔn)備矩陣型訓(xùn)練數(shù)據(jù):
#讀寫樣本特征,生成訓(xùn)練矩陣training_matrix和目標(biāo)列表target_list。
第3步:
#生成訓(xùn)練模型,在測試集上驗(yàn)證并調(diào)參。
param = {'booster':'gbtree','objective':'binary:logistic','eval_metric':'auc','max_depth':5,'min_child_weight':1,'subsample':0.9,'lambda':10,'gamma':0.0,'eta':0.3,'silent':1 }
num_round = 100
dtrain=xgb.DMatrix(training_matrix,label=target_list)
bst = xgb.train(param,dtrain,num_round)
bst.save_model('model.xgb')
第4步:
#使用及應(yīng)用。將生成的xgb模型用于需要生成標(biāo)簽的樣本集。
#加載樣本屬性數(shù)據(jù)
#加載訓(xùn)練模型數(shù)據(jù)
bst = xgb.Booster({'nthread':4})
bst.load_model("model.xgb")
#預(yù)測
dtest = xgb.DMatrix(trainingMatrix)
y_pred = bst.predict(dtest)
result_list = (y_pred ≥ 0.5) × 1
#結(jié)果寫入文件
result_file = open(result_file_name,'wt')
for index in range(len(y_pred)):
result_file.write('%s/t%d/n'%(uid_list[index],result_list[index]))
result_file.close()
第5步:
#如果采用多算法融合,例如除XGBoost之外同時采用邏輯回歸的判決概率,可將XGBoost輸出判決概率和邏輯回歸輸出判決概率取均值,作為最終判決依據(jù)。
bst = xgb.Booster({'nthread':4})
bst.load_model("model.xgb")
pred_leaves = bst.predict(xgb.DMatrix(test_matrix),pred_leaf=True)
tree_node_enc = OneHotEncoder()
lr_model = LogisticRegression()
……
transformed_feature = tree_node_enc.transform(pred_leaves).toarray()
y_pred = lr_model.predict_proba(transformed_feature)[:,1]
result_list = (y_pred ≥ 0.5) × 1
5 總結(jié)
使用機(jī)器學(xué)習(xí)來預(yù)測用戶離網(wǎng),是大數(shù)據(jù)相關(guān)技術(shù)在電信企業(yè)的一個典型應(yīng)用[8-11]。機(jī)器學(xué)習(xí)在現(xiàn)代的應(yīng)用已經(jīng)相當(dāng)廣泛,用戶可以不必再開發(fā)最原始的算法代碼,而是直接安裝、調(diào)用現(xiàn)成的模塊或者API。電信企業(yè)的數(shù)據(jù)資產(chǎn)是寶貴的礦藏,通過數(shù)據(jù)挖掘,無論是用于提升企業(yè)內(nèi)部運(yùn)營效率,還是和外部合作進(jìn)行行業(yè)應(yīng)用支撐,都將是一筆非?捎^的財(cái)富。
參考文獻(xiàn):
[1] HARRINGTON P.機(jī)器學(xué)習(xí)實(shí)戰(zhàn)[M].李銳,李鵬,曲亞東,等,譯.北京:人民郵電出版社,2013
[2] 王凱. 數(shù)據(jù)挖掘在移動離網(wǎng)用戶分析模型中的研究與應(yīng)用[D]. 鄭州:鄭州大學(xué),2014.
[3] 陳康,向勇,喻超.大數(shù)據(jù)時代機(jī)器學(xué)習(xí)的新趨勢[J].電信科學(xué),2012,28(12):88-95.
[4] 周志華,王玨. 機(jī)器學(xué)習(xí)及其應(yīng)用[M]. 北京:清華大學(xué)出版社,2009.
[5] HASSOUNA M,TARHINI A,ELYAS T,et al. Customer Churn in Mobile Markets A Comparison of Techniques[J]. International Business Research,2015,8(6):224-237.
[6] SINGH I,SINGH S. Framework for Targeting High Value Customers and Potential Churn Customers in Telecom using Big Data Analytics[J]. International Journal of Education & Management Engineering,2017,7(1):36-45.
[7] DONG R,SU F,YANG S,et al. Customer Churn Analysis for Telecom Operators Based on SVM[C]// International Conference On Signal And Information Processing,Networking And Computers. Springer,Singapore,2017:327-333.
[8] 張婧姣. 電信社會網(wǎng)絡(luò)離網(wǎng)用戶預(yù)測及分析[D]. 北京:北京郵電大學(xué),2017.
[9] 陳曄. 基于組合預(yù)測的電信客戶流失預(yù)測分析[D].長沙:湖南大學(xué),2011.
[10] 楊曉峰,嚴(yán)建峰,劉曉升,等.深度隨機(jī)森林在離網(wǎng)預(yù)測中的應(yīng)用[J].計(jì)算機(jī)科學(xué),2016,43(6):208-213.
[11] 趙慧,劉穎慧,崔羽飛,等.機(jī)器學(xué)習(xí)在運(yùn)營商用戶流失預(yù)警中的運(yùn)用[J].信息通信技術(shù),2018,12(1):14-21.
來源:郵電設(shè)計(jì)技術(shù)