這是一批電話卡用戶的使用數(shù)據(jù)催植,包括不同時段的通話時長和是否流失的字段。
數(shù)據(jù)清洗
先導(dǎo)入數(shù)據(jù)清洗需要用到的包,讀入數(shù)據(jù)并且觀察一下數(shù)據(jù)大概情況拜效。
數(shù)據(jù)類型為Int、float等的一些字段為通話時長的特征各谚。還有一些為yes\no的離散分類特征紧憾,之后要對這些字符串類型的特征進(jìn)行處理。Churn?字段為是否流失昌渤,true為流失赴穗。
首先要去除空值和無用特征。(無用特征中包括了結(jié)果字段)
因為數(shù)據(jù)集沒有空值膀息,所以跳過dropna()步驟般眉。
于是得到了cleaned_churn。將特征值篩選出來潜支。特征值的字段原來是字符串類型煤篙,‘True.’
和‘False’。所以用np.where將等于true.的替換為1毁腿,反之為0辑奈。(也可使用pd.Dataframe.replace函數(shù))
將數(shù)據(jù)歸一化,導(dǎo)入StandardScaler包已烤。但Sklearn包只能處理數(shù)組形式鸠窗,所以先將特征轉(zhuǎn)換為ndarray格式,然后用進(jìn)行歸一化胯究。
得到了清洗過后的特征稍计,cleaned_churn。
建立模型
這里使用sklearn中的交叉驗證的KFold和cross_val_predict裕循,并且使用4種模型來評測每個模型的精度臣嚣。
先定義兩個函數(shù)和導(dǎo)入4個機器學(xué)習(xí)的模型支持向量機svm净刮、隨機森林、邏輯回歸和k近鄰模型硅则。
第一個函數(shù)是建模函數(shù)淹父,放入訓(xùn)練集x、測試集y和模型怎虫,進(jìn)行交叉驗證暑认,并且得到了預(yù)測的結(jié)果,二分類的y_pred大审。
第二個函數(shù)是對精度進(jìn)行計算蘸际,np.mean()來求得測試集和驗證集相等占總數(shù)據(jù)的比重,也就是數(shù)據(jù)精度徒扶。
接下來就是帶入四個模型進(jìn)行輸出粮彤。
可見隨機森林模型的精度最高。
但是姜骡,用戶召回率的模型好壞并不能單純靠精度來判別导坟,譬如一個模型是所有未流失客戶你都預(yù)測對了,但是流失客戶沒有預(yù)測對溶浴。另一個模型是所有流失客戶你都預(yù)測對了乍迄,但是未流失你預(yù)測錯了管引。哪個模型好呢士败?顯而易見是第二個。所以需要引入其他的概念來界定模型的好壞褥伴。
模型評估
用戶流失模型是用來檢測用戶是否流失谅将,挽回可能流失的用戶。所以這個模型的檢測標(biāo)準(zhǔn)應(yīng)該是在N個流失用戶中重慢,檢測出了多少個饥臂。所以需要被檢測出的流失用戶占比更大。
recall=被檢測出的流失用戶/(被檢測出的流失用戶+未被檢測出的流失用戶)
recall和精度兩個指標(biāo)都很重要似踱,有一個指標(biāo)叫mAP隅熙,是一個綜合衡量recall和精度的指標(biāo)。
所以求讓曲線中的積分值核芽,也就是面積最大的mAP值囚戚。
現(xiàn)在求4個模型的recall值。
可以知道隨機森林的recall值也是最好的轧简。
結(jié)果樣本的選擇
每個樣本流失的概率不同驰坊,可以選用predict_proba函數(shù)來求得樣本流失的概率。
然后對樣本流失概率最大的樣本進(jìn)行召回哮独。
定義一個求樣本流失概率的函數(shù)拳芙。
這里用上面求得的最好的隨機森林模型察藐。
在0.6這個概率的時候,55個樣本最終有百分之87的樣本都流失了舟扎。
所以最后對流失率為0.6以上的樣本進(jìn)行召回分飞。可以對用戶發(fā)送優(yōu)惠政策浆竭,或者發(fā)送召回短信等等浸须。