客戶流失預測--基於R語言C5.0

對於中國各大電信運營商而言,在整體市場規模相對穩定的情況下,能否維護好現有的客戶是保證其收益的重中之重。因此,預測客戶流失的可能性與否,直接關係到運營商的客戶維護的重點正確與否。本文將基於”狗熊會“基礎案例:收集客戶流失,來演示基於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個,而將流失用戶的被預測爲非流失的代價更大(可通過添加代價矩陣解決,見 點擊打開鏈接),故該優化效果不明顯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章