- 數據可視化
- 結論
上一篇文章中,我們說到了如何處理數據,并且最后篩選出比較重要的一些特征。按道理來說,接下來我們應該對數據進行去重、歸一化、進行建模了。然而時間、精力有限,且與最終要研究的目的沒多大關系,所以這一部分并沒有進行深層研究。
接下來我們從數據可視化開始說起,探究潛藏在數據背后的信息。
五、數據可視化
首先我們來看一下2016年第一季度業務開展情況,主要是放款筆數,金額,期限等情況
perform_data = analysis_data.groupby('month')['loan_amnt'].agg(['count','sum'])#貸款筆數與放貸金額
f, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
x = perform_data.index #月份month
y1 = perform_data['count']#貸款筆數
sns.barplot(x, y1, ax=ax1)
y2 = perform_data['sum']#貸款金額
ax1.set_xlabel("")
ax1.set_ylabel("loan_count")
sns.barplot(x, y2,ax=ax2)
ax2.set_ylabel("loan_amount")
sns.despine(bottom=True)
可以看出,1月份至3月份的貸款筆數、貸款金額都在提升。
在同時,第一季度中不同等級的貸款數量都有所增長,其中F、G等級貸款繼續維持在一定的、較低的成交數量,而其他等級貸款的數量和漲幅都較為明顯。
通過兩個圖表我們對第一季度整體的業績有了一些了解,接下來我們將更具體的了解業務的內容,比如說貸款金額、貸款期限以及利率等。
from scipy.stats import norm #貸款金額分布
sns.distplot(analysis_data.loan_amnt,fit=norm,kde=False,color='blue')
sns.despine(top=True)
單筆貸款金額在1萬~2萬美元范圍內占比較多,較高金額的貸款數量較少,也間接證明了lending club 主營小額度的貸款項目。
analysis_data.term.value_counts().plot.pie(autopct='%.2f',figsize=(10, 10),colors = ['yellowgreen','lightblue']) #借款周期分布比例
貸款周期分為36個月與60個月,主要以36個月為主,不過60個月的比重也不小。在p2p平臺上以短期貸款為主,長期貸款也有,利率較高,但周期較長。借出人收獲利息,承擔風險,而借入人到期要償還本金。貸款周期越長,對借出人來說風險越高。
在國內的環境下,借出人不僅要承擔推遲還款的風險,還要擔心平臺跑路、本息全無的高風險;對借入人來說,因為國內缺少健全的征信體系,借款方違約及重復違約成本低。
對國內的情況不再多說,話題繞回來。國外的部分國家已有健全的征信體系,一旦違約還款,違約率不斷上漲,個人征信也會保留記錄,對后序的貸款、買房有很大的影響。所以如果貸款周期較長,且如果沒有固定的工作和固定的收入的話(即使有未定收入也不一定如期償還),償還本金充滿變數,很有可能違約。
所以通過上圖可以看出幾個信息:
1.短期貸款占比重較大,長期貸款占比也不低
2.Lending club平臺有較強的風控能力,部分借出方比較信任平臺(不怕平臺跑路),而借入方對自身的還款能力有一定的信心。
接下來我們再試著對貸款人進行分析,形成一下用戶畫像吧。
從圖中可以看出,貸款人中有37%的比例的人工齡為10年以上。那么,我們可以考慮一下,為什么工齡超過10年的人有貸款需求呢?且占比這么高?
那么可以猜測一下(個人意見),首先可能是工齡越長,貸款通過率越高(篩選后占比較高),其次可能有部分是工作超過10年但是被裁員的(經濟不好),有部分是還有工作但是需要還房貸的(不知道國外的形式),有部分是個人家庭有大筆支出的(個例,占比不大),當然不排除謊報工齡的可能。
至于猜測是否準確個人不能保證,還需要結合當年的經濟形勢,以及職業變動等情況進行綜合判斷,在此不再深究。
#貸款人收入水平
sns.factorplot(x="grade", y="annual_inc", hue="verification_status", data=lendData,order=list('ABCDEFG'),size=15,palette="Paired")
再來看看收入水平的情況。貸款人的收入水平信息分為三種情況:已經過LC驗證,收入來源已驗證,未驗證。這三種情況目前從圖中看不出有什么不同。總之,貸款等級與收入水平在整體上呈正相關的趨勢。
analysis_data.home_ownership.value_counts().plot.pie(autopct='%.2f',figsize=(10, 10),colors= ['red','yellowgreen','lightskyblue']) #借款人住房狀況分布
大多數人的房屋狀態是抵押貸款(大部分人是房奴),只有少部分人有完全的產權。
#貸款等級與住房情況
analysis_data_home = lendData.groupby(['grade','home_ownership'])[['issue_d']].count().apply(lambda x : x/x.sum(level=0)).unstack(level=1)\
.reset_index().set_index('grade')\
.stack(level=0).reset_index(level=1, drop=True)
analysis_data_home.plot.barh(stacked=True,figsize=(15,8)).legend(loc='center left', bbox_to_anchor=(1, 0.5))
意外的發現,貸款等級越高的人群,他們的住房情況是抵押貸款的幾率越高,而租房的幾率越低。而擁有完全產權的人群在各個貸款等級的人群中占比差不多。
再來看看他們貸款都干什么了。
sns.countplot(y=analysis_data.purpose) #貸款用途分布
sns.despine(top=True)
可以很明顯的看出debt_consolidation(可以理解為債務整合,借新還舊)占比最高,占比第二高的credit_card也歸屬為同一類。
綜合收入水平與貸款用途得到上圖,我們可以發現在第一季度中,人均收入水平較高的人群貸款用于小生意,家庭生活改善,房子等。而貸款為了債務整合(占比最高)的人群的人均收入水平在整體的中下。
對貸款人群了解的也差不多了,接下來我們看一下資產質量。
如何定義資產質量呢?在這里可以狹義地理解為在一定時期、利率、期限結構下資產所能來帶的收益高低或損失可能,對于貸款來說,借款人償還本息的及時和足額程度、借款人的信用等級、貸款的利率和期限等等都影響到資產的質量。
不過要注意,通常我們認為借款人的還款觀察期最好是在6個月到12個月,因為在這個期限內,借款人還款的表現情況才逐漸趨于穩定。而計算第一季度的delinquent rate(拖欠率)是不具備代表性的,所以在這里就不對第一季度的整體Bad Rate(壞賬率)做進一步的分析了,而是著重觀察不同信用等級下的資產質量。
說實話,關于資產質量的這部分并沒有分析經驗,也是參考了一下大牛的文章引用過來的。文末會給出鏈接,對金融、p2p感興趣的可以自行學習。
回歸正題,既然資產質量與償還利息是否及時、借款人信用等級等等相關,那么就把這些信息整合起來,查看一下不同貸款等級的貸款質量。
在眾多特征中,有個特征變量loan_status(貸款狀態)來描述當前貸款處于什么狀態,其中包括Current、Fully Paid、Charged Off(注銷)、Default、In Grace Period(在寬限期)、Late (16-30 days)(延期16-30天) 、Late (31-120 days)(延期31-120天)這幾種狀態。
#將貸款狀態分為好與壞,好的貸款狀態就是current(在還款期),fully paid(全部償還),剩下的認為是壞的狀態
past_due = ['In Grace Period','Late (16-30 days)', 'Late (31-120 days)', 'Default','Charged Off']
delinquent = ['Late (16-30 days)', 'Late (31-120 days)', 'Default']
lost = ['Default']
charged_off = ['Charged Off']
analysis_data_1 = analysis_data.copy()
analysis_data_1['loan_status'] = analysis_data_1['loan_status'].map(lambda x :'Past Due' if x in past_due else x)
groupd_grade = analysis_data_1.groupby(['grade','loan_status'])
pay_data_2 = groupd_grade.agg({'loan_amnt':'sum','out_prncp':'sum','total_rec_prncp':'sum','total_rec_int':'sum'}) \
.assign(loan_amnt_pct=lambda x : x['loan_amnt']/x.groupby(level=0)['loan_amnt'].sum(),
out_prncp_pct=lambda x : x['out_prncp']/x.groupby(level=0)['out_prncp'].sum())
pay_data_2
接下來分別解釋一下特征的含義。total_rec_prncp(迄今收到的本金),
total_rec_int (迄今收到的利息),out_prncp (總資金中剩余的未償還本金),后兩列原數據集中沒有,分別代表當前貸款金額占該等級所有貸款金額的比例, 未償還本金金額占該等級所有未償還本金金額的比例。
我們可以看到,貸款狀態分成了三類,Past Due中包括的都是不好的貸款狀態,用來衡量貸款質量。
之后我們將Past Due(壞的狀態)單獨提取出來
f, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
x = past_due_data.index
y1 = past_due_data['loan_amnt_pct']
sns.barplot(x, y1, ax=ax1)
y2 = past_due_data['out_prncp_pct']
ax1.set_xlabel("")
ax1.set_ylabel("loan_amnt_pct") #壞的狀態的貸款所占比例
sns.barplot(x, y2,ax=ax2)
ax2.set_ylabel("past_due_rate") #未償還本金的貸款所占比例
sns.despine(bottom=True)
從圖中我們看出,貸款等級越高,貸款質量越高。A等級最好,G等級最差,也從側面看出Lending club的風控水平。
六、結論
通過數據可視化我們對2016年第一季度的數據已經有了一個整體的認識。那么我們最終要研究的問題是否已經找到答案了呢?回答是肯定的。在調查Lending club背景時,我們得到了模糊的線索。在進行數據預處理過程中,我們通過相關系數得到與貸款等級關系密切的特征,后續又通過數據可視化直觀的看到與貸款等級相關的因素。下面就做一下總結。
影響貸款等級的相關因素
1.首先通過背景了解到FICO分數,分數越高,貸款通過的可能性與等級也越高。
2.征信記錄。包括征信查詢、貸款人的不良信用記錄等。征信記錄很重要,并且占據較大的權重。因為過去的信用記錄反映的是這個人潛在的壞賬率,本來嘛LC必須要保障借出人與自身的利益。
3.資產實力。包括收入水平、住房情況、dti等。住房情況在重要性篩選過程中出現,收入水平在數據可視化過程中觀察到明顯的相關性。然而這些特征并不是主要的影響因素,權重較低。
通過上述的總結歸納,我們得知Lending club平臺已經有了一個完整的篩選、評級體系,且有足夠的風控水平,通過對信息來源進行核實,以及控制低等級貸款的數量來維持整體貸款的水平,降低壞賬率。雖然現在Lending club的形勢不太樂觀,但在丑聞事件的打擊中它還是挺過來了。不論之后該公司如何發展,至少它成型的風控水平值得國內絕大多數p2p平臺學習。
參考
本文為 泰閣志-解密大數據 學習筆記,了解更多請關注微信“泰閣志”