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