數據分析工具之Python大法(三)
任何一個分析的前提是設定分析的目的,而大部分時候這些目的出自於具體業務的需求。因為是首次接觸Lending Club的數據,所以先花了兩篇的篇幅去一窺這些公開數據的概貌。現在所以回到分析的出發點,通過本文我們來了解一下Lending Club 2016年第一季度的業務發展、產品類型、用戶畫像、資產質量及風險的定價等。為了讓分析報告更為直觀友好,我將盡量使用matplotlib和seaborn進行可視化分析。
傳送門:數據分析工具之Python大法(一), 數據分析工具之Python大法(二)
第四部,基於業務層面的分析
4.1 選擇用於分析的變數 經過前面兩篇文章的分析,我對數據中的一些信息進行了介紹,原始數據有115個變數,從分析目的出發,我將從原始數據中挑選出個變數進行分析,.loc()是pandas重要的切片方法,逗號前面是對行進行切片,我這裡把issue_d這個變數為空的去掉(只分析放了款的);逗號後的為列切片,也就是挑選要分析的變數。因為LC的原始數據較為規整,所以在切片的同時做了一部分數據預處理, 比如把字元串的借款月份解析成date,把包含百分號的字元串利率轉換成整型等。
analysis_columns=[issue_d,term,int_rate,grade,home_ownership,verification_status,purpose,loan_amnt,total_pymnt,out_prncp,n total_rec_int,total_rec_prncp,installment,annual_inc,dti,fico_range_low,fico_range_high,last_fico_range_low,n last_fico_range_high, open_acc,loan_status,delinq_amnt,acc_now_delinq,tot_coll_amt]nanalysis_data = (data.loc[data.issue_d.notnull(),analysis_columns])n .assign(month=lambda x: pd.to_datetime(x[issue_d]).dt.month,n interest_rate = lambda x:x[int_rate].str.strip(%),n fico_change = lambda x : (x[last_fico_range_high]-x[fico_range_high]))nanalysis_data.head()n
perform_data = analysis_data.groupby(month)[loan_amnt].agg([count,sum])nf, (ax1, ax2) = plt.subplots(2, 1, sharex=True)nx = perform_data.indexny1 = perform_data[count]nsns.barplot(x, y1, ax=ax1)ny2 = perform_data[sum]nax1.set_xlabel("")nax1.set_ylabel("loan_count")nsns.barplot(x, y2,ax=ax2)nax2.set_ylabel("loan_amount")nsns.despine(bottom=True)n
沒有特別啥可以分析的,很明顯LC1到3月的業務,不管是貸款筆數還是放貸金額是在加速增長的過程
4.3 對於任何一個金融產品,金額、期限和利率都是必須了解的屬性,就像去專賣店買衣服關心衣服的款式和價格
from scipy.stats import normnsns.distplot(analysis_data.loan_amnt,fit=norm,kde=False)nsns.despine(top=True)n
analysis_data.term.value_counts().plot.pie(autopct=%.2f,figsize=(10, 10))n
上圖是借款期限分布,主要以36期為主,不過我感嘆的是60期的比重這麼高。在信貸領域,借款期限是一個很好玩的東西,期限長的好處是:利率高,收益高,借款人每期還款壓力要小,壞處也很明顯啊:收益高的前提是借款人按期履約,不過夜長夢多,隨著時間變長,尤其是當借款期限跨一個經濟周期,很多人還款能力都隨著經濟周期在變動,經濟一下行,有可能收益沒實現,違約率蹭蹭往上漲。所以我在知乎風控群經常說,我們是靠天吃飯的人。
sns.distplot(analysis_data.interest_rate.astype(float),fit=norm,kde=False)nsns.despine(top=True)n
analysis_data.home_ownership.value_counts().plot.pie(autopct=%.2f,figsize=(10, 10))n
sns.countplot(y=analysis_data.purpose)nsns.despine(top=True)n
4.5 資產質量,在這裡我狹義地理解為在一定時期、利率、期限結構下資產所能來帶的收益高低或損失可能,對於貸款來說,借款人償還本息的及時和足額程度、借款人的信用等級、貸款的利率和期限等等都影響到資產的質量。不過要注意,由於借款時間是2016年1季度,而從LC的數據上看,觀測點應該是6月初,也就是最短的觀測期才2個月,通常我們認為借款人的還款觀察期最好是在6月到12個月,因為在這個期限內,借款人還款的表現情況才逐漸趨於穩定。
groupd_mth = analysis_data.groupby([month,loan_status])npay_data = groupd_mth.agg({loan_amnt:sum,out_prncp:sum,total_rec_prncp:sum,total_rec_int:sum}) n .assign(loan_amnt_pct=lambda x : x[loan_amnt]/x.groupby(level=0)[loan_amnt].sum(),n out_prncp_pct=lambda x : x[out_prncp]/x.groupby(level=0)[out_prncp].sum()) npay_datan
從月份上看1到3月的delinquent和past_due都是在下降的,但是這並不能作於結論,甚至說是錯的結論。原因開始說了,整體表現都還不充分,現在算出來的一季度delinquent rate是不具備代表性的,所以這也是統計陷阱之一。所以本文不對2016年一季度的整體Bad Rate做進一步的分析,而是著重觀察不同信用等級下的資產質量。
past_due = [In Grace Period,Late (16-30 days), Late (31-120 days), Default,Charged Off]ndelinquent = [Late (16-30 days), Late (31-120 days), Default] nlost = [Default]nchaeged_off = [Charged Off]nanalysis_data_1 = analysis_data.copy()nanalysis_data_1[loan_status] = analysis_data_1[loan_status].map(lambda x :Past Due if x in past_due else x)ngroupd_grade = analysis_data_1.groupby([grade,loan_status])npay_data_2 = groupd_grade.agg({loan_amnt:sum,out_prncp:sum,total_rec_prncp:sum,total_rec_int:sum}) n .assign(loan_amnt_pct=lambda x : x[loan_amnt]/x.groupby(level=0)[loan_amnt].sum(),n out_prncp_pct=lambda x : x[out_prncp]/x.groupby(level=0)[out_prncp].sum())npay_data_2n
past_due_data = pay_data_2.xs(Past Due, level=1)npast_due_datan
f, (ax1, ax2) = plt.subplots(2, 1, sharex=True)nx = past_due_data.indexny1 = past_due_data[loan_amnt_pct]nsns.barplot(x, y1, ax=ax1)ny2 = past_due_data[out_prncp_pct]nax1.set_xlabel("")nax1.set_ylabel("loan_amnt_pct")nsns.barplot(x, y2,ax=ax2)nax2.set_ylabel("past_due_rate")nsns.despine(bottom=True)n
4.6 風險定價,看了上面關於不同信用等級的借款人的表現,我們至少會有兩個方面的思考:首先是LC如何給借款人評級的,其次LC對不同等級借款人的風控策略。到這裡基本上是直面風控的核心了,知乎上那麼多風控的文章,這麼多內行的外行的在討論這個話題,其實就是兩個問題嘛:如何識別和量化風險,如何最優化進行風險定價。
今天就寫到這裡吧,窗外陽光明媚,是該出去走走了,給路上的妹紙打Grade比寫代碼舒服
今天的內容其實還是以描述性分析居多,下篇大結局啦,盡量寫之前多吃幾個烤腰子,給大家點乾貨,哪怕是一點點
推薦閱讀: