Python對中國電信消費者特征預(yù)測:隨機(jī)森林、樸素貝葉斯、神經(jīng)網(wǎng)絡(luò)、最近鄰分類、邏輯
全文鏈接:http://tecdat.cn/?p=31868
原文出處:拓端數(shù)據(jù)部落公眾號
分析師:Chang Gao
隨著大數(shù)據(jù)概念的興起,以數(shù)據(jù)為基礎(chǔ)的商業(yè)模式越來越流行,用所收集到的因素去預(yù)測用戶的可能產(chǎn)生的行為,并根據(jù)預(yù)測做出相應(yīng)反應(yīng)成為商業(yè)競爭的核心要素之一。單純從機(jī)器學(xué)習(xí)的角度來說,做到精準(zhǔn)預(yù)測很容易,但是結(jié)合具體業(yè)務(wù)信息并做出相應(yīng)反應(yīng)并不容易。預(yù)測精確性是核心痛點。
解決方案
任務(wù)/目標(biāo)
根據(jù)所收集到的用戶特征用機(jī)器學(xué)習(xí)方法對特定的屬性做預(yù)測。
數(shù)據(jù)源準(zhǔn)備
數(shù)據(jù)質(zhì)量低或者缺失,會影響模型預(yù)測效果。在建立的一個合理的模型之前,對數(shù)據(jù)要進(jìn)行清理。對于數(shù)據(jù)中的連續(xù)變量和離散變量進(jìn)行標(biāo)準(zhǔn)化和因子化處理,以使后面的預(yù)測更加準(zhǔn)確。
因子化標(biāo)準(zhǔn)化處理
首先將數(shù)據(jù)進(jìn)行屬性分類,分為名義變量('性別', '歸屬地', '換機(jī)頻率', '終端品牌', '終端類型', '最近使用操作系統(tǒng)偏好','渠道類型描述', '是否欠費', '產(chǎn)品大類', '產(chǎn)品分類')和間隔變量('年齡','在網(wǎng)時長','上網(wǎng)流量使用','漫游流量使用', '總收入','增值收入','流量收入','短信收入','彩信收入','語音收入')。
將數(shù)據(jù)處理成算法容易處理模式:
樸素貝葉斯數(shù)據(jù)集
樸素貝葉斯方法需要離散化數(shù)據(jù),于是按照分為點對于連續(xù)數(shù)據(jù)進(jìn)行離散化處理。然后將所有的離散變量進(jìn)行因子化。
神經(jīng)網(wǎng)絡(luò),支持向量機(jī)與最近鄰所需數(shù)據(jù):處理以保證在一個數(shù)量級
為方便起見,用one-hot編碼因子變量。對于連續(xù)變量,將數(shù)據(jù)映射到0,1之間 且不改變分布。
隨機(jī)森林與回歸所需數(shù)據(jù):直接使用因子化的原始數(shù)據(jù)。
劃分訓(xùn)練集和測試集
考慮到最終模型會在已知某些變量的同時,預(yù)測一些未知的特征,為了更真實的測試模型效果,將數(shù)據(jù)集分為分訓(xùn)練集和測試集。
建模
用其他用戶特征,用訓(xùn)練集進(jìn)行調(diào)參,預(yù)測用戶“收否欠費”這個屬性。
1. 隨機(jī)森林
用隨機(jī)的方式建立一個森林,森林由很多決策樹組成,隨機(jī)森林的每一棵決策樹之間是沒有關(guān)聯(lián)的。在得到森林之后,當(dāng)有一個新的輸入樣本進(jìn)入的時候,就讓森林中的每一棵決策樹分別進(jìn)行一下判斷,看看這個樣本應(yīng)該屬于哪一類(對于分類算法),然后看看哪一類被選擇最多,就預(yù)測這個樣本為那一類。
兩個主要參數(shù):n_estimators: 多少樹 max_features: 每個樹隨機(jī)選擇多少特征
比較不同參數(shù)預(yù)測結(jié)果的neg_log_loss,選擇最優(yōu)的參數(shù)(score最大的)
2. 樸素貝葉斯
3. 神經(jīng)網(wǎng)絡(luò)
在PyTorch框架下面進(jìn)行網(wǎng)絡(luò)的搭建及運算
需要調(diào)節(jié)的參數(shù):batch_size=[200,500,1000], 神經(jīng)元個數(shù)=[16,32,64,128]
學(xué)習(xí)率=[0.01,0.005,0.001,0.0005,0.0001,0.00005,0.00001] 再微調(diào),epoch=[10,20,30,40,50,60]
調(diào)參策略,第一調(diào)到最優(yōu)后選擇下一個進(jìn)行調(diào)參,并不進(jìn)行網(wǎng)格搜索
(a) 數(shù)據(jù)形式調(diào)整并進(jìn)行小批次數(shù)據(jù)訓(xùn)練(批訓(xùn)練):每次選擇1000數(shù)據(jù)集進(jìn)行擬合,避免局部最優(yōu)。
(b) 模型建立:我們采用了輸入層+兩層隱藏層+輸出層,的三層神經(jīng)網(wǎng)絡(luò),確定三層隱藏層的個數(shù):我們比較32,64 逐一變化,擇取最優(yōu)。
(c) 訓(xùn)練網(wǎng)絡(luò):優(yōu)化器:采用了Adam而不是簡單的SGD,主要也是避免局部最優(yōu)的問題。分類問題我們采用了普遍使用的交叉熵?fù)p失損失,但是與普遍的交叉熵相比,由于數(shù)據(jù)過于不平衡,因此我們增加了占比較少的數(shù)據(jù)的損失權(quán)重
4. 最近鄰分類
最近鄰分類:主要需要確定n_neighbors,我們比較n_neighbors=3,5,7,9情況下neg_log_loss
5. 邏輯回歸:這里主要也是需要對變量進(jìn)行篩選
由于數(shù)據(jù)非常不平衡,因此我們使用AUC作為標(biāo)準(zhǔn)進(jìn)行衡量。逐個遍歷自變量并將自變量名連接起來,升序排序accuracy值,最新的分?jǐn)?shù)等于最好的分?jǐn)?shù)。
6.?支持向量回歸(SVR):使用網(wǎng)格搜索法最佳C值和核函數(shù)
模型準(zhǔn)確性判定:
準(zhǔn)確度/查準(zhǔn)率/查全率

混淆矩陣


ROC曲線

?在此案例中,從準(zhǔn)確度來看,隨機(jī)森林模型的分類最好。從查準(zhǔn)率來看,神經(jīng)網(wǎng)絡(luò)模型的分類最好。從查全率來看,邏輯回歸模型的分類效果最好。同理,由上圖可知,在ROC曲線下對于“是否欠費”這個因變量,神經(jīng)網(wǎng)絡(luò)模型的分類效果最好,模型的ROC曲線下面積最高,擬合最優(yōu)。其余模型的擬合效果顯著。
但事實上,評估效果不能只看統(tǒng)計數(shù)據(jù),要綜合考慮現(xiàn)實情況,預(yù)測精度,模型可解釋性和客戶偏好等因素綜合考慮。預(yù)測結(jié)果僅作為參考一個權(quán)重值,還需要專家意見,按照一定的權(quán)重來計算。

關(guān)于分析師

在此對Chang Gao對本文所作的貢獻(xiàn)表示誠摯感謝,她在復(fù)旦大學(xué)完成了統(tǒng)計學(xué)學(xué)位,擅長數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、數(shù)據(jù)采集。
最受歡迎的見解
1.PYTHON用戶流失數(shù)據(jù)挖掘:建立邏輯回歸、XGBOOST、隨機(jī)森林、決策樹、支持向量機(jī)、樸素貝葉斯模型和KMEANS聚類用戶畫像
2.R語言基于樹的方法:決策樹,隨機(jī)森林
3.python中使用scikit-learn和pandas決策樹
4.機(jī)器學(xué)習(xí):在SAS中運行隨機(jī)森林?jǐn)?shù)據(jù)分析報告
5.R語言用隨機(jī)森林和文本挖掘提高航空公司客戶滿意度
6.機(jī)器學(xué)習(xí)助推快時尚精準(zhǔn)銷售時間序列
7.用機(jī)器學(xué)習(xí)識別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用
8.python機(jī)器學(xué)習(xí):推薦系統(tǒng)實現(xiàn)(以矩陣分解來協(xié)同過濾)
9.python中用pytorch機(jī)器學(xué)習(xí)分類預(yù)測銀行客戶流失