數(shù)據(jù)分享|Python決策樹、隨機(jī)森林、樸素貝葉斯、KNN(K-最近鄰居)分類分析銀行拉新活
原文鏈接:http://tecdat.cn/?p=23518
最近我們被客戶要求撰寫關(guān)于銀行拉新活動的研究報告,包括一些圖形和統(tǒng)計輸出。
項目背景:銀行的主要盈利業(yè)務(wù)靠的是貸款,這些客戶中的大多數(shù)是存款大小不等的責(zé)任客戶(存款人)。銀行擁有不斷增長的客戶
該銀行希望增加借款人(資產(chǎn)客戶),開展更多的貸款業(yè)務(wù),并通過貸款利息賺取更多利潤。因此,銀行希望將負(fù)債的客戶轉(zhuǎn)換為個人貸款客戶。(同時保留他們作為存款人)。該銀行去年針對負(fù)債客戶開展的一項活動顯示,成功實現(xiàn)了9%以上的成功轉(zhuǎn)化率。該部門希望建立一個模型,來幫助他們確定購買貸款可能性更高的潛在客戶??梢栽黾映晒β剩瑫r降低成本。
數(shù)據(jù)集
下面給出的文件包含5000個客戶的數(shù)據(jù)?(?查看文末了解數(shù)據(jù)獲取方式?)?。數(shù)據(jù)包括客戶人口統(tǒng)計信息(年齡,收入等),客戶與銀行的關(guān)系(抵押,證券賬戶等)以及客戶對上次個人貸款活動的因變量(個人貸款)。在這5000個客戶中,只有480個(= 9.6%)接受了先前活動中提供給他們的個人貸款
data.head()
data.columns
屬性信息
屬性可以相應(yīng)地劃分:
變量?ID?一個人的客戶ID與貸款之間沒有關(guān)聯(lián),也無法為將來的潛在貸款客戶提供任何一般性結(jié)論。我們可以忽略此信息進(jìn)行模型預(yù)測。
二進(jìn)制類別具有五個變量,如下所示:
個人貸款-該客戶是否接受上一個廣告系列提供的個人貸款??這是我們的目標(biāo)變量
證券帳戶-客戶在銀行是否有證券帳戶?
CD帳戶-客戶在銀行是否有存款證明(CD)帳戶?
網(wǎng)上銀行-客戶是否使用網(wǎng)上銀行?
信用卡-客戶是否使用銀行發(fā)行的信用卡?
數(shù)值變量如下:
年齡-客戶的年齡
工作經(jīng)驗
收入-年收入(元)
CCAvg-平均信用卡消費
抵押-房屋抵押價值
有序分類變量是:
家庭-客戶的家庭人數(shù)
教育程度-客戶的教育程度
標(biāo)稱變量是:
ID
郵政編碼
data.shape
data.info()
#?文件中沒有列有空數(shù)據(jù)data.apply(lambda?x?:?sum(x.isnull()))
#?對數(shù)據(jù)進(jìn)行目測
data.describe().transpose()
#查看有多少不同數(shù)據(jù)data.apply(lambda?x:?len(x.unique()))
兩兩變量散點圖
年齡?特征通常是分布的,大多數(shù)客戶年齡在30歲到60歲之間。
經(jīng)驗?大多分布在8年以上經(jīng)驗的客戶。這里的?平均值?等于中?位數(shù)。有負(fù)數(shù)?。這可能是數(shù)據(jù)輸入錯誤,因為通常無法衡量負(fù)數(shù)的工作經(jīng)驗。我們可以刪除這些值,因為樣本中有3或4條記錄。
收入出現(xiàn)?正偏斜。大多數(shù)客戶的收入在45,000到55K之間。我們可以通過說平均值?大于?中位數(shù)來確認(rèn)這一點
CCAvg?也是一個正偏變量,平均支出在0K到10K之間,大多數(shù)支出不到2.5K
抵押?70%的人的抵押貸款少于4萬。但是最大值為635K
家庭和教育變量是序數(shù)變量。家庭分布均勻
有52條記錄經(jīng)驗為負(fù)數(shù)。在進(jìn)一步進(jìn)行之前,我們需要對這些記錄進(jìn)行清理
data[data['Experience']?<?0]['Experience'].count()
52
#清理負(fù)數(shù)變量dfExp?=?data.loc[data['Experience']?>0]
data.loc[negExp]['ID'].tolist()?#?得到有負(fù)數(shù)經(jīng)驗的客戶ID
有52條負(fù)數(shù)經(jīng)驗的記錄
以下代碼執(zhí)行以下步驟:
對于具有ID的記錄,獲取
Age
?column的值對于具有ID的記錄,獲取
Education
?column的值從具有正數(shù)經(jīng)驗的記錄的數(shù)據(jù)框中過濾符合以上條件的記錄,并取中位數(shù)
將中位數(shù)填充原本負(fù)數(shù)經(jīng)驗的位置
data.loc[np.where(['ID']==id)]["Education"].tolist()[0]df_filtered['Experience'].median()
#?檢查是否有負(fù)數(shù)經(jīng)驗的記錄
data[data['Experience']?<?0]['Experience'].count()
0
收入和教育對個人貸款的影響
boxplot(x='Education',y='Income',data=data)
觀察?:看來教育程度為1的客戶收入更高。但是,接受了個人貸款的客戶的收入水平相同
點擊標(biāo)題查閱往期內(nèi)容
R語言基于決策樹的銀行信貸風(fēng)險預(yù)警模型
左右滑動查看更多
01
02
03
04
推論?:從上圖可以看出,沒有個人貸款的客戶和擁有個人貸款的客戶的抵押貸款較高。
觀察?:大多數(shù)沒有貸款的客戶都有證券賬戶
觀察:家庭人數(shù)對個人貸款沒有任何影響。但是似乎3歲的家庭更有可能借貸??紤]未來的推廣活動時,這可能是一個很好的觀察結(jié)果。
觀察:沒有CD帳戶的客戶,也沒有貸款。這似乎占多數(shù)。但是幾乎所有擁有CD帳戶的客戶也都有貸款
觀察:該圖顯示有個人貸款的人的信用卡平均費用更高。平均信用卡消費中位數(shù)為3800元,表明個人貸款的可能性更高。較低的信用卡支出(中位數(shù)為1400元)不太可能獲得貸款。這可能是有用的信息。
觀察?上圖顯示與經(jīng)驗和年齡呈正相關(guān)。隨著經(jīng)驗的增加,年齡也會增加。顏色也顯示教育程度。四十多歲之間存在差距,大學(xué)以下的人也更多
#?與熱圖的關(guān)聯(lián)性corr?=?data.corr()
plt.figure(figsize=(13,7))#?創(chuàng)建一個掩碼,以便我們只看到一次相關(guān)的值a?=?sns.heatmap(corr,mask=mask,?annot=True,?fmt='.2f')
觀察
收入和CCAvg呈中等相關(guān)。
年齡和工作經(jīng)驗高度相關(guān)
sns.boxplot
看下面的圖,收入低于10萬的家庭比高收入的家庭更不可能獲得貸款。
應(yīng)用模型
將數(shù)據(jù)分為訓(xùn)練集和測試集
train_labels?=?train_settest_labels?=?test_set
決策樹分類器
DecisionTreeClassifier(class_weight=None,?criterion='entropy',?...)
dt_model.score
0.9773333333333334
dt_model.predict(test_set)
預(yù)測
array([0,?0,?0,?0,?0])
查看測試集
test_set.head(5)
樸素貝葉斯
naive_model.fit(train_set,?train_labels)
naive_model.score
0.8866666666666667
隨機(jī)森林分類器
RandomForestClassifier(max_depth=2,?random_state=0)
Importance.sort_values
randomforest_model.score(test_set,test_labels)
0.8993333333333333
KNN(K-最近鄰居)
data.drop(['Experience'?,'ID']?,?axis?=?1).drop(labels=?"PersonalLoan"?,?axis?=?1)train_set_dep?=?data["PersonalLoan"]
acc?=?accuracy_score(Y_Test,?predicted)print(acc)
0.9106070713809206
模型比較
for?name,?model?in?models: ? ?kfold?=?model_selection.KFold(n_splits=10) ? ?cv_results?=?model_selection.cross_val_score(model,?X,?y,?cv,?scoring)#?箱線圖算法的比較plt.figure()
結(jié)論
通用銀行的目的是將負(fù)債客戶轉(zhuǎn)變?yōu)橘J款客戶。他們想發(fā)起新的營銷活動;因此,他們需要有關(guān)數(shù)據(jù)中給出的變量之間的有聯(lián)系的信息。本研究使用了四種分類算法。從上圖可以看出,隨機(jī)森林?算法似乎?具有最高的精度,我們可以選擇它作為最終模型。
本文選自《Python決策樹、隨機(jī)森林、樸素貝葉斯、KNN(K-最近鄰居)分類分析銀行拉新活動挖掘潛在貸款客戶》。
點擊標(biāo)題查閱往期內(nèi)容
PYTHON銀行機(jī)器學(xué)習(xí):回歸、隨機(jī)森林、KNN近鄰、決策樹、高斯樸素貝葉斯、支持向量機(jī)SVM分析營銷活動數(shù)據(jù)|數(shù)據(jù)分享
用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測銀行客戶流失模型
R語言用FNN-LSTM假近鄰長短期記憶人工神經(jīng)網(wǎng)絡(luò)模型進(jìn)行時間序列深度學(xué)習(xí)預(yù)測4個案例
Python中TensorFlow的長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)、指數(shù)移動平均法預(yù)測股票市場和可視化
R語言KERAS用RNN、雙向RNNS遞歸神經(jīng)網(wǎng)絡(luò)、LSTM分析預(yù)測溫度時間序列、 IMDB電影評分情感
Python用Keras神經(jīng)網(wǎng)絡(luò)序列模型回歸擬合預(yù)測、準(zhǔn)確度檢查和結(jié)果可視化
Python用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)對不穩(wěn)定降雨量時間序列進(jìn)行預(yù)測分析
R語言中的神經(jīng)網(wǎng)絡(luò)預(yù)測時間序列:多層感知器(MLP)和極限學(xué)習(xí)機(jī)(ELM)數(shù)據(jù)分析報告
R語言深度學(xué)習(xí):用keras神經(jīng)網(wǎng)絡(luò)回歸模型預(yù)測時間序列數(shù)據(jù)
Matlab用深度學(xué)習(xí)長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對文本數(shù)據(jù)進(jìn)行分類
R語言KERAS深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)分類識別手寫數(shù)字圖像數(shù)據(jù)(MNIST)
MATLAB中用BP神經(jīng)網(wǎng)絡(luò)預(yù)測人體脂肪百分比數(shù)據(jù)
Python中用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測銀行客戶流失模型
R語言實現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類
R語言用神經(jīng)網(wǎng)絡(luò)改進(jìn)Nelson-Siegel模型擬合收益率曲線分析
R語言基于遞歸神經(jīng)網(wǎng)絡(luò)RNN的溫度時間序列預(yù)測
R語言神經(jīng)網(wǎng)絡(luò)模型預(yù)測車輛數(shù)量時間序列
R語言中的BP神經(jīng)網(wǎng)絡(luò)模型分析學(xué)生成績
matlab使用長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對序列數(shù)據(jù)進(jìn)行分類
R語言實現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測和結(jié)果可視化
用R語言實現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實例
使用PYTHON中KERAS的LSTM遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行時間序列預(yù)測
python用于NLP的seq2seq模型實例:用Keras實現(xiàn)神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯
用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類