對於中國各大電信運營商而言,在整體市場規模相對穩定的情況下,能否維護好現有的客戶是保證其收益的重中之重。因此,預測客戶流失的可能性與否,直接關係到運營商的客戶維護的重點正確與否。本文將基於”狗熊會“基礎案例:收集客戶流失,來演示基於C5.0算法的客戶流失預測,數據下載 點擊打開鏈接。
一、數據結構查看與初步分析
讀入並查看數據(見下圖),一共包含10個變量,其中ID爲每個用戶的唯一標識,在進行預測分析時需要刪除;流失用戶爲因變量,”0“表示未流失,”1“表示已流失。
>customers<-read.csv("customer.csv",stringsAsFactors= FALSE)
查看整體的用戶流失情況(見下圖),可以發現流失用戶數較未流失用戶數多
除此之外,我們還可以通過交叉表的形式查看各變量與用戶流失與否的關係(見下多圖)
由上圖不難發現,簽訂過服務合約、改變過行爲、有過關聯購買、集團用戶、套餐金額較高的用戶有更高的概率不流失;反之,用戶流失的概率就相對較高。
同時,我們也可以查看下用戶的使用行爲,包括使用月數、額外流量和額外通話時長,的分佈情況,見下圖
>par(mfrow=c(1,3)) ##將畫板變爲1行3列的樣式,讓三張圖在同一行分佈
> hist(customers$使用月數,main = '使用月數分佈',xlab = "使用月數",ylab = "頻次")
> hist(customers$額外通話時長,main="額外通話時長分佈",xlab="額外通話時長",ylab="頻次")
> hist(customers$額外流量,main="額外流量分佈",xlab="額外流量",ylab="頻次")
可見,使用月數以12-14月居多,額外通話時長與額外流量較集中分佈。
二、流失預測與模型評價
首先,需要將原始數據隨機劃分爲訓練集和測試集
> set.seed(11) ##設置隨機可重複
> t_sample<-sample(4975,4000) ##設置訓練集抽取隨機因子,訓練集包含4000條記錄
> c_train<-customers[t_sample,] ##抽取訓練集
> c_test<-customers[-t_sample,] ##以提出訓練集的形式,抽取測試集
查看訓練集和測試集中的記錄是否符合隨機分佈要求,見下圖,基本符合隨機分佈要求
> prop.table(table(c_train$流失用戶))
> prop.table(table(c_test$流失用戶))
接着,利用C5.0決策樹算法進行訓練
> c_train<-c_train[-1]
> c_test<-c_test[-1]##去掉id
library(C50)
> c_model<-C5.0(c_train[-9],c_train$流失用戶) ##c_train 要剔除類變量“流失用戶”
> summary(c_model) ##查看樹
由上圖可知,該樹共有7各分支,並且準確劃分了當中的3965條記錄,錯誤率僅是0.9%。
下面用測試集對模型 c_model 進行評估
> c_t_model<-predict(c_model,c_test)
> table(c_test$流失用戶,c_t_model) ##利用交叉表查看預測的準確率情況
可見,該模型的預測準確率在98.15%以上,僅18個預測出錯,其中是流失用戶的被預測爲非流失的有4個,非流失用戶被預測爲流失用戶的有14。
再接下來,嘗試下優化模型(見 點擊打開鏈接 ,內有兩種優化模型的方法)
自適應增強算法是通過將很多能力較弱的學習算法組合在一起,使得這樣的組合算法比任何單獨的算法都強很多。在C5.0算法中,可以通過參數 trials,引入boosting算法,表示在模型中使用的獨立決策樹的數量。
> c_model_boost10<-C5.0(c_train[-9],c_train$流失用戶,trials = 10) ##trials=10 已經成爲一個事實標準的數字
> c_t_model_b<-predict(c_model_boost10,c_test)
> table(c_test$流失用戶,c_t_model_b)
預測準確率上升到98.46%,上述幅度不明顯。但流失用戶的被預測爲非流失的有6個,比原來的模型多了2個,而將流失用戶的被預測爲非流失的代價更大(可通過添加代價矩陣解決,見 點擊打開鏈接),故該優化效果不明顯。