楊成義 林瑞瓊
摘? 要:文章結(jié)合了某電信公司系統(tǒng)存儲的業(yè)務(wù)數(shù)據(jù),對數(shù)據(jù)進(jìn)行清洗和分析,在提取重要特征后,利用了Python所提供的scikit-learn核心算法庫,實(shí)現(xiàn)了邏輯回歸,支持向量機(jī),K近鄰等監(jiān)督學(xué)習(xí)算法的建模,最后對各個(gè)算法的結(jié)果進(jìn)行分析。在實(shí)際的商業(yè)活動中,企業(yè)人員可以綜合利用模型中準(zhǔn)確率較高的幾種算法,制定對應(yīng)的運(yùn)營方案和挽回策略,從而有效地減少客戶的流失。
關(guān)鍵詞:客戶流失預(yù)警;Python;sklearn;邏輯回歸
中圖分類號:TP311 ? 文獻(xiàn)標(biāo)識碼:A 文章編號:2096-4706(2021)17-0032-03
Abstract: Combined with the business data stored in the system of a telecom company, this paper cleans and analyzes the data. After extracting important features, it uses the scikit-learn core algorithm library provided by Python to realize the modeling of supervised learning algorithms such as logistic regression, support vector machine and k-nearest neighbor. Finally, the results of each algorithm are analyzed. In actual business activities, enterprise personnel can make comprehensive use of several algorithms with high accuracy in the model to formulate corresponding operation schemes and recovery strategies, so as to effectively reduce the loss of customers.
Keywords: customer churn early warning; Python; sklearn; logistic regression
0? 引? 言
在電信行業(yè)中,客戶的庫存流失包括主動網(wǎng)外流失,被動網(wǎng)外流失和潛在流量流失這三種主要的表現(xiàn)形式。顧客主動要求注銷和關(guān)閉之前購買過的賬戶,并將服務(wù)轉(zhuǎn)移到其他運(yùn)營商的損失,稱之為主動網(wǎng)外損失,該現(xiàn)象的損失是可衡量的。用戶將服務(wù)和需求轉(zhuǎn)移到其他網(wǎng)絡(luò),終止當(dāng)前服務(wù)之前,必須經(jīng)過相關(guān)的流程或者程序通過才可實(shí)現(xiàn)。客戶欠費(fèi)、停機(jī)的情況(即沒有通過流程的客戶)稱為被動網(wǎng)外流失。該損失可以衡量,不過這會造成企業(yè)的壞賬。由于使用意愿的轉(zhuǎn)移和服務(wù)次數(shù)明顯降低,客戶雖然目前還是在網(wǎng)絡(luò)中的,但客戶的流量(呼叫使用率)卻大大下降,稱之為潛在流量損失。這種損失往往是很難去估量的,是因?yàn)槲覀儾磺宄蛻舻氖褂靡鈭D發(fā)生何種變化。
對客戶的流失情況進(jìn)行分析,其目的是為了挽留可能會流失的用戶,提升業(yè)務(wù)效益??蛻袅魇ьA(yù)警分析,就是使用數(shù)據(jù)倉庫、數(shù)據(jù)挖掘等綜合分析方法,對已經(jīng)流失的客戶在過去一段時(shí)間內(nèi)所撥打的電話、客戶服務(wù)情況、交費(fèi)信息等數(shù)據(jù)進(jìn)行分析,提取出已經(jīng)流失或有流失傾向的客戶所具有的各種行為特征,建立了客戶流失的預(yù)警模型,并將該模型廣泛地應(yīng)用于實(shí)際的客戶服務(wù)中,及時(shí)預(yù)測潛在的可能流失的客戶,并提前采取相應(yīng)的市場營銷措施和手段,使客戶維持原有的服務(wù)。
1? 數(shù)據(jù)分析
本次建模一共準(zhǔn)備了30多份數(shù)據(jù),包含了3 000多個(gè)用戶信息,將其導(dǎo)入Python中用于數(shù)據(jù)分析的pandas庫,進(jìn)行數(shù)據(jù)分析和處理。使用pandas庫的方法來了解數(shù)據(jù)的基本情況。數(shù)據(jù)庫中存儲的電信業(yè)務(wù)數(shù)據(jù)如圖1、2所示,圖1展示了前10列數(shù)據(jù)。圖2則展示后11列數(shù)據(jù),通過兩圖可以得知,收集的dataset總共包含21個(gè)屬性。
在圖1、圖2中,所選中的數(shù)據(jù)含義分別是:State:地區(qū)名縮寫;Account Length:賬戶長度為128;Area Code:區(qū)號值為415;Phone:電話號碼為382-4657;Int'l Plan:國際漫游需求與否為no,說明該客戶沒有國際漫游的需求;Mail Plan:參與活動為yes,說明有參加活動;Mail Message:語音郵箱信息數(shù)量是25;Day Mins:白天通話分鐘數(shù)265.1分鐘;Day Calls:白天打電話個(gè)數(shù)為110;Day Charge:白天收費(fèi)情況是45.07;Eve Mins:晚間通話分鐘數(shù)197.4分鐘;Eve Calls:晚間打電話個(gè)數(shù)為99個(gè);Eve Charge:晚間收費(fèi)情況是16.7;Night Mins:夜間通話分鐘數(shù)是244.7分鐘;Night Calls:夜間打電話個(gè)數(shù)是91個(gè);Night Charge:夜間收費(fèi)是11.01;lntl Mins:國際通話分鐘數(shù)為10分鐘;lntl Calls:國際打電話個(gè)數(shù)是3個(gè);lntl Charge:國際收費(fèi)是2.7;CustServ Calls:客服收到的電話數(shù)量為1個(gè);最后是屬性Churn:流失與否,為False,即該客戶沒有流失。
2? 特征提取
針對數(shù)據(jù)之間的關(guān)系屬性,使用matplotlib和seaborn這兩個(gè)庫進(jìn)行數(shù)據(jù)的可視化。
查看VMail Message的分布,語音郵箱個(gè)數(shù)集中在1個(gè)。查看Intl Calls和Churn的關(guān)系,流失用戶的白天電話個(gè)數(shù)平均值要比沒有流失的用戶高:
(1)用柱狀條形圖查看VMail Plan和Churn的關(guān)系,如圖3所示。以客戶是否參與活動的比例來比較,流失用戶中沒有參與活動的比例是遠(yuǎn)遠(yuǎn)高于忠實(shí)用戶的。
(2)查看Churn與CustServ Calls的關(guān)系,如圖4所示??蛻糁艺\度最高的是只撥打1次客服電話,但是隨著撥打次數(shù)的增加,用戶流失的比例也隨著增加,撥打3個(gè)或3個(gè)以上電話的用戶基本處于流失狀態(tài)。通過子圖查同一類型的數(shù)據(jù)分布可以知道:白天通話的分鐘數(shù)、打電話個(gè)數(shù)和最終收費(fèi)趨勢都呈正態(tài)分布,這是符合實(shí)際情況的,數(shù)據(jù)沒有其他異常情況。
(3)用熱力圖查看各個(gè)特征屬性之間的關(guān)系:用正數(shù)代表兩個(gè)維度是正相關(guān)的,負(fù)數(shù)代表兩個(gè)維度之間是負(fù)相關(guān)的。從而獲得與流失率相關(guān)性最高的10個(gè)特征屬性,如圖5所示。
3? 建模及結(jié)果分析
重新編碼,將這Int'l Plan和VMail Plan這兩列object類型編碼為數(shù)值類型,方便后面的建模。刪除掉三個(gè)無關(guān)屬性列:地區(qū)名、電話、區(qū)號。在訓(xùn)練模型之前采用as_matrix()方法對數(shù)據(jù)進(jìn)行統(tǒng)一的數(shù)組轉(zhuǎn)換,然后實(shí)現(xiàn)scale,去除量綱的影響。使用model_selectiond的train_test_split方法把數(shù)據(jù)集劃分為訓(xùn)練集和測試集,進(jìn)行模型驗(yàn)證。將常見的10種監(jiān)督學(xué)習(xí)算法來訓(xùn)練本次的數(shù)據(jù):
#依次為模型命名
classifier_Names = ['AdaBoost', 'Bagging', 'ExtraTrees', 'GradientBoosting', 'RandomForest', 'GaussianProcess', 'PassiveAggressive', 'Ridge', 'SGD', 'KNeighbors', 'GaussianNB', 'MLP'DecisionTree',? 'ExtraTree',? 'svc',? 'LinearSVC']
print("定義完成")
#然后,劃分?jǐn)?shù)據(jù)集,70%用于訓(xùn)練,另外30%用于測試。
#導(dǎo)入數(shù)據(jù)集切分模塊
from sklearn.model_selection import train_test_split
#切分?jǐn)?shù)據(jù)集
X_train, X_test, y_train, y_test = train_test_split(X, Y,? test_size=.3)
#準(zhǔn)備好數(shù)據(jù)之后,開始模型訓(xùn)練和測試。
from sklearn.metrics import accuracy_score#導(dǎo)入準(zhǔn)確度評估模塊
#遍歷所有模型
for name, model in zip(classifier_Names, models) :
model.fit(X_train, y_train)#訓(xùn)練模型
pre_labels = model.predict(x_test)#模型預(yù)測
score = accuracy_score(y_test, pre_labels)#計(jì)算預(yù)測準(zhǔn)確度
print('%s : %.2f'%(name, score))#輸出模型準(zhǔn)確度
各個(gè)監(jiān)督學(xué)習(xí)算法在本次客戶流失預(yù)警系統(tǒng)的準(zhǔn)確率分別是為:AdaBoost算法:0.86;Bagging算法:0.94;ExtraTrees算法:0.91;GradientBoosting算法:0.94;RandomForest算法:0.94;GaussianProcess算法:0.90,PassiveAggressive算法:0.79,Ridge算法:0.87,SGD算法:0.80,KNeighbors算法:0.90;GaussianNB算法:0.85;MLP算法:0.92;DecisionTree算法:0.92;ExtraTree算法:0.86;SVC算法:0.93;LinearSVC算法:0.87;最高的為Bagging算法,GradientBoosting算法,RandomForest算法,三者準(zhǔn)確率均為94%,而準(zhǔn)確率最差的是PassiveAggressive算法,只有79%。
這十幾個(gè)分類器最終的準(zhǔn)確度均在70%~90%之間,差距不是很大。出現(xiàn)這樣的情況,主要原因有兩個(gè)。首先,本次建模使用的是一個(gè)非常規(guī)范、整潔的線性分類的數(shù)據(jù)集。其次,所有的分類器均采用了默認(rèn)參數(shù),而scikit-learn 提供的默認(rèn)參數(shù)已經(jīng)較優(yōu),因此不能使用這個(gè)準(zhǔn)確度結(jié)果,來簡單斷定哪種分類器的性能更優(yōu),具體的分類效果表現(xiàn)還取決于參數(shù)的選擇,比如在支持向量機(jī)的算法中,如將gamma系數(shù)調(diào)整一下,預(yù)測結(jié)果會大大改變。
4? 結(jié)? 論
本次電信業(yè)務(wù)樣本數(shù)據(jù)中,注冊客戶數(shù)量占市場份額大約為75.5%,這就意味著用于預(yù)測“忠實(shí)客戶”的模型,必須超過75.5%的準(zhǔn)確度,并能進(jìn)行精確定位。在本次建模中,各算法的計(jì)算準(zhǔn)確率均不低于此數(shù)值,且有多個(gè)算法準(zhǔn)確度顯著高于該數(shù)值。所應(yīng)用的scikit-learn 中常見的多種監(jiān)督學(xué)習(xí)方法,從結(jié)果上看,不同方法之間有一定的差別。雖然對于不同應(yīng)用環(huán)境中分布的數(shù)據(jù),模型的適用情況具有差異性。但在大多數(shù)線性分類中,模型的表現(xiàn)和適用性都較好。因此,在電信行業(yè)中,可以收集客戶的個(gè)人信息,將客戶的重要特征信息“喂”給模型中準(zhǔn)確率較高的幾種算法,在進(jìn)行綜合分析的基礎(chǔ)上,可以準(zhǔn)確預(yù)測客戶是否會流失,針對可能的流失客戶,企業(yè)營銷人員可以提前制定相應(yīng)的挽留策略,來避免損失。
參考文獻(xiàn):
[1] 王仁武.Python與數(shù)據(jù)科學(xué) [M].上海:華東師范大學(xué)出版社,2016.
[2] 莫凡.機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn) [M].北京:機(jī)械工業(yè)出版社,2020.
[3] 鄧立國.Python機(jī)器學(xué)習(xí)算法與應(yīng)用 [M].北京:清華大學(xué)出版社,2020.
[4] 鄺濤,張倩.改進(jìn)支持向量機(jī)在電信客戶流失預(yù)測的應(yīng)用 [J].計(jì)算機(jī)仿真,2011,28(7):329-332.
[5] 劉晨晨.基于數(shù)據(jù)挖掘的通信客戶流失預(yù)警模型研究 [D].武漢:華中師范大學(xué),2017.
作者簡介:楊成義(1985.09—),男,漢族,湖北孝感人,講師,碩士研究生,研究方向:群決策支持系統(tǒng);林瑞瓊(1997.08—),女,漢族,廣東揭陽人,本科,研究方向:軟件工程。