决策树实践案例一之拍拍贷客户逾期还款预测
-
本文分為兩大部分第一部分簡單舉例講述決策樹算法的原理概念
-
第二部分基于決策樹用案例實現貸款是否逾期預測
決策樹算法是機器學習經典算法之一,原理相對簡單易懂。首先決策樹畢竟是幫助做出更好的決策的一種算法,決策樹ID3根據信息增益的大小作為結點進行分支,拿最經典的西瓜書里判斷是否好瓜來舉例子,有十七課西瓜各有各的特征,但是我們第一思維是:好瓜畢竟有某種一致的屬性,相同不好的西瓜也有它自己獨特的特征,就根據這兩種特征來判斷瓜的品質,這就需要用決策樹的算法來學到這樣的一個規律從而在給定的一個新瓜中判斷瓜的品質。
一:原理計算:
首先算出樣本的信息熵,樣本結果有兩種可能分別是 “是”占了8/17與“否”占了9/17,如下圖公示累加求和求相反數。
得到信息熵的大小為0.998,然后計算各個屬性的信息增益,以西瓜的色澤舉例分析,色澤{青綠,淺白,烏黑}其中好瓜站樣本屬性分別為:3/6,4/6,1/5壞瓜樣本占屬性樣本比例分別是3/6,2/6,4/5。則根據信息熵公式(4.1)得到:
然后根據公式計算出色澤的信息增益:
同理其他屬性的信息增益如下:
計算可得信息增益最大的作為第一層屬性節點,所以選擇紋理作為第一層信息節點。
接下來就要挨個計算在清晰,模糊,稍微的條件下計算根蒂,紋理,敲聲,臍部,觸感的薪資增益,信息增益大的作為此節點下的第一個節點,之后一次類推。這篇文章有具體的推理步驟。
參考:https://blog.csdn.net/quinn1994/article/details/80083933
最后分完的結果就是這個亞子了
二:接下來就用決策樹算法來實現貸款是否逾期的預測
拍拍貸數據https://pan.baidu.com/s/1vrzcm_geXOGiEE_nWHCO7Q提取碼:d12a
數據格式
LC.csv 數據大小:50.7MB,標的特征表,每支標一條記錄。共有21個字段,包括一個主鍵(listingid)、7個標的特征和13個成交當時的借款人信息,全部為成交當時可以獲得的信息。
| ListingId | 列表成交特征 | 列表序號,為列表的唯一鍵。 |
| 借款金額 | 列表成交特征 | 列表成交總金額。 |
| 借款期限 | 列表成交特征 | 總的期數(按月計)。 |
| 借款利率 | 列表成交特征 | 年化利率(百分數)。 |
| 借款成功日期 | 列表成交特征 | 列表成交的日期。都在2015年1月1日以后。 |
| 初始評級 | 列表成交特征 | 列表成交時的信用評級。AAA為安全標,AA為賠標,A-F為信用等級。 |
| 借款類型 | 列表成交特征 | 分為'應收安全標',‘電商’,‘APP閃電’,‘普通’和‘其他’。 |
| 是否首標 | 列表成交特征 | 該標是否為借款人首標。 |
| 年齡 | 列表成交特征 | 借款人在該列表借款成功時的年齡。 |
| 性別 | 列表成交特征 | 該列表借款人性別。 |
| 手機認證 | 列表成交特征 | 該列表借款人手機實名認證是否成功。 |
| 戶口認證 | 列表成交特征 | 該列表借款人戶口認證是否成功。 |
| 視頻認證 | 列表成交特征 | 該列表借款人視頻認證是否成功。 |
| 學歷認證 | 列表成交特征 | 該列表借款人學歷認證是否成功。成功則表示有大專及以上學歷。 |
| 征信認證 | 列表成交特征 | 該列表借款人征信認證是否成功。成功則表示有人行征信報告。 |
| 淘寶認證 | 列表成交特征 | 該列表借款人淘寶認證是否成功。成功則表示為淘寶店主。 |
| 歷史成功借款次數 | 列表成交特征 | 借款人在該列表成交之前的借款成功次數。 |
| 歷史成功借款金額 | 列表成交特征 | 借款人在該列表成交之前的借款成功金額。 |
| 總待還本金 | 列表成交特征 | 借款人在該列表成交之前待還本金金額。 |
| 歷史正常還款期數 | 列表成交特征 | 借款人在該列表成交之前的按期還款期數。 |
| 歷史逾期還款期數 | 列表成交特征 | 借款人在該列表成交之前的逾期還款期數。 |
LP (Loan Periodic) 標的還款計劃和還款記錄表:標的還款計劃和還款記錄,每支標每期還款為一條記錄。 還款記錄和狀態更新至2017年2月22日。共有10個字段,包括兩個主鍵(listingid和期數),3個還款計劃字段和4個還款狀態字段
| listingid | 列表Id,主鍵 |
| 期數 | 期數Id,主鍵 |
| 還款狀態 | 到記錄日的當期狀態,分為0-‘未還款’,1-‘已正常還款’,2-‘已逾期還款’,3-‘已提前還清該標全部欠款’,4-‘已部分還款’ |
| 應還本金 | 當期計劃還款本金部分 |
| 應還利息 | 當期計劃還款利息部分 |
| 剩余本金 | 到記錄日,仍未還清的當期本金 |
| 剩余利息 | 到記錄日,仍未還清的當期利息 |
| 到期日期 | 當期應還款日 |
| 還款日期 | 當期最近一次實際還款日期 |
| recorddate | 記錄日 |
數據探索分析:
兩個表都有列表id,因此將兩個表按照列表id進行融合,融合之后去掉無關特征,在這里我把到期日期,還款日期,recordate,借款日期刪除掉了,因為還款狀態已經可以作為標簽了,到期日期與還款日期用處已經不大。再檢查一下是否存在空值然后把表格里的文字轉化成數字。其中不需要的字段我是在exce里手動刪掉的。
# 數據融合 import pandas as pd df1 = pd.read_csv('D:/word/拍怕貸/LC.csv') df2 = pd.read_csv('D:/word/拍怕貸/LP.csv') merage_df = pd.merge(df1, df2, how="left", on="ListingId") merage_df.to_csv("PPD.csv") df = pd.read_csv("PPD.csv",encoding="gbk") # 數據轉化 df = pd.read_csv("PPD.csv", encoding="utf-8") df = df.drop(["借款成功日期", "到期日期", "還款日期", "recorddate"], axis=1) LE = LabelEncoder() df.loc[:, "初始評級":"是否首標"] = df.loc[:, "初始評級":"是否首標"].apply(lambda x: LE.fit_transform(x)) df.loc[:, "性別":"淘寶認證"] = df.loc[:, "性別":"淘寶認證"].apply(lambda x: LE.fit_transform(x)) df.to_csv("NEWPPD.csv")數據轉化這一塊比較簡單,使用sklearn的LabelEncoder方法可以將文本轉化為數據,有幾種類型的數據就轉化為幾種連續性數據。可以對其進行批量轉化,利用dataframe的apply方法。但是除了文本之外其他的數據就不用變化,不用進行編碼。
套入模型數據預測:
數據已經準備好,那接下來就是進行訓練模型預測數據了。首先劃分數據集,把dataframe格式 的數據轉化為數據矩陣。
from sklearn.tree import DecisionTreeClassifier as DTC from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_scoredf3 = pd.read_csv("final_PPD.csv") feature = df3.loc[:,1:-1].values give_money = df3.loc[:,-1].values.reshape(-1,1) train_x,test_x,train_y,test_y = train_test_split(feature,give_money,test_size=0.3) dt = DTC(criterion="entropy") dt.fit(train_x,train_y) result = dt.predict(test_x) print("準確率:"+str(accuracy_score(test_y,result))) print("真實結果:") print(test_y[:20]) print("測試結果:") print(result[:20])?
最后的預測準確率0.83,后期我還會再對數據特征進行優化以得到更好的結果
調試參數換用基尼系數,并對決策樹進行剪枝達到最優。
dt = DTC(criterion="gini",max_depth=16,random_state=30# min_samples_leaf=15# min_samples_split=10)調整樹的最大深度之后預測的準確率有所上升從原來的0.83上升到0.86,我通過調試發現對于此數據集使用基尼系數還是信息熵預測結果都差不多,但是存在過擬合現象需要剪枝。
?
總結
以上是生活随笔為你收集整理的决策树实践案例一之拍拍贷客户逾期还款预测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 中AutoMapper的使用方法
- 下一篇: 十一、方法的使用