网贷平台Prosper贷款数据分析(上)

发布时间:2020-11-25 发表于话题:要求低的借贷平台 点击: 当前位置:龙发金融 > 科技 > 大数据 > 网贷平台Prosper贷款数据分析(上) 手机阅读

前言:

感谢 YoLean,https://www./p/6eb58b0be7c8,本文主要参考其思路。项目练习过程中,部分小问题的代码进行了重新修改添加了更多的注释及我的思考,方便读者理解练手的数据集若无法下载,知乎私信我获取本文仅供入门玩家练手使用,高手勿喷

一、项目内容

Prosper LoanData是由Joshua Schnessl从Udacity Data Analyst Nanodegree上把数据放到kaggle的上供感兴趣的人分析的一个实例项目,本文运用描述性分析获取贷款状态与信用卡透支比、信用分、雇佣状态等指标的关系并通过Matplotlib包进行数据可视化呈现。

二、数据集来源

Your Home for Data Science

三、数据变量及思路、知识点

数据集包含81个变量,113,937条数据。以下仅解释重要变量,淡蓝色填充为本文探索性分析中使用到的变量。

重要变量:

新手玩家练习的时候不要怕代码比较多就头疼,逐步拆解下来就能掌握。

主要知识点及思路:

三、数据预处理

导入数据处理包

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsimport random#读取数据并查看loanData=pd.read_csv('prosperLoanData.csv')loanData.head()

3.1 LoanStatus(贷款状态) 数据变换

平台把借款状态分为12种:Cancelled(取消)、Chargedoff(冲销,投资人有损失)、Completed(正常完成,投资人无损失)、Current(贷款还款中)、Defaulted(坏账,投资人有损失)、FinalPaymentInProgress(最后还款中,投资人无损失)、Past Due(逾期还款,投资人无损失)

按投资人是否有损失,将Defaulted,Chargedoff这2组归1组并定义为Defaulted(下文统一称违约),将Completed,FinalPaymentInProgress,Past Due这几组归1组并定义为Completed(下文统一称正常完成)

def loan_status(s): if s=='Chargedoff': a='Defaulted' elif s=='Defaulted': a = 'Defaulted' elif s=='Cancelled': a='Cancelled' elif s == 'Current': a = 'Current' else: a='Completed' return a#LoanStatus数据转换loanData['Status']=loanData['LoanStatus'].apply(loan_status)

Cancelled状态只有5个,直接删除

loanData=loanData[loanData['Status']!='Cancelled']

3.2 LoanStatus(贷款状态) 数据变换

#计算上四分位及中位数oneFourth=loanData['BankcardUtilization'].(0.25)twoForth=loanData['BankcardUtilization'].(0.5)print('上四分位数',oneFourth,'中位数',twoForth)上四分位数 0.31 中位数 0.6#定义函数def bank_card_use(s,oneForth=0.31,twoForth=0.6): if (s>0 and soneForth and stwoForth and s1: b='Super Use' else: b='No Use' return b#BankcardUtilization的数据转换loanData['BankCardUse']=loanData['BankcardUtilization'].apply(bank_card_use)loanData.head()

3.3 LoanOriginationDate(借款起始日期) 数据变换

#将时间分段def date_phase(s): if s>='2009-07-01': c='After Jul.2009' else: c='Before Jul.2009' return c#LoanOriginationDate的数据转换loanData['DatePhase']=loanData['LoanOriginationDate'].apply(date_phase)

3.4 根据最高/低信用分,取平均值

#对客户的消费信用分数,数据中有高低范围,将这两个数值取平均值做计算loanData['CreditScore']=((loanData.CreditScoreRangeUpper+loanData.CreditScoreRangeLower)/2).round(0)loanData.head()

3.5 根据TotalProsperLoans(历史贷款次数)区分老用户/新用户

def customer_clarify(s): if s>0: d='Previous Borrower' else: d='New Borrower' return d#TotalProsperLoans的数据转换loanData['CustomerClarify']=loanData['TotalProsperLoans'].apply(customer_clarify)

四、探索性分析

这里我们只分析Status(贷款状态)中的Completed(正常完成)和Defaulted(违约),Current 暂时删除

loanData = loanData[loanData['Status']!='Current']

4.1 年收入越高,违约率越低

# 每个年收入段贷款如期还款笔数和违约笔数incomeRage = loanData.groupby(['Status', 'IncomeRange'])['Status'].count().unstack(0)index = ['Not displayed', 'Not employed', '$0 ', '$1-24,999', '$25,000-49,999', '$50,000-74,999', '$75,000-99,999', '$100,000+']incomeRage = incomeRage.reindex(index)incomeRage

如图可见,随着年收入的增加,违约率逐步下降。同时也能看出借款人的年收入主要在25000-49999美元之间。

4.2 债务收入比越低,违约率越低

按照常识看,债务收入比低的人群,违约率要低于债务收入比高的人群。

#违约还款人债务收入比数据集DefaultedRatio=loanData[loanData['Status']=='Defaulted']['DebtToIncomeRatio']#正常还款人债务收入比数据集CompletedRatio=loanData[loanData['Status']=='Completed']['DebtToIncomeRatio']print(DefaultedRatio.shape)print(CompletedRatio.shape)(17010,)(40346,)#债务收入比直方图fig1 = plt.figure(1)fig1.set_size_inches(15.5, 7.5)ax = fig1.add_subplot(1, 1, 1)ax=CompletedRatio.hist(bins=1000,color='g',label='Compeleted')ax=DefaultedRatio.hist(bins=1000,color='b',label='Defaulted')ax.set_xlim([0,1])plt.xlabel('债务收入比',fontsize=14)plt.ylabel('数量',fontsize=14)plt.legend(loc='best')plt.show()

如图可见,债务收入比< 0.6的借款人中,违约笔数小于未违约的笔数;也可看出大部分借款人的债务收入比低于0.25,平台违约的整体风险可控

4.3 信用卡透支大的人群违约率高

#贷款状态与信用卡透支情况bankCardUse = loanData.groupby(['Status', 'BankCardUse'])['Status'].count().unstack(0)index=['Mild Use','Medium Use', 'Heavy Use', 'Super Use', 'No Use']bankCardUse=bankCardUse.reindex(index)print(bankCardUse)

如图可见,Super Use(透支额度百分比>1) 及No Use的违约率较大,平台应重点关注这2类人群的用卡情况。同时也能看到借款人主要群体分布在Heavy Use(0.6#违约率占比defaultRate = (Score['Defaulted'] / (Score['Defaulted'] + Score['Completed']))print(defaultRate)

如图可见,随着信用分的增大,违约率逐步降低;信用分>560分,正常完成人数开始大于违约人数。

借款人群大部分信用分处在650-750之间,这反映了信用分太低在平台难以借钱,也平台的风控较好。

4.5 信用评级(19年7月前)低的人群违约率高

#贷款状态与2009年7月1日前信用评级情况creditGrade = loanData.groupby(['Status', 'CreditGrade'])['Status'].count().unstack(0)index=[ 'NC','HR','E','D', 'C','B', 'A', 'AA']creditGrade = creditGrade.reindex(index)creditGrade

如图可见,随着信用评级越高,违约率越低,大部分人群的评级在D以上。

4.6 信用评级(19年7月后)低的人群违约率高

#贷款状态与2009年7月1日后信用评级情况prosperRating= loanData.groupby(['Status', 'ProsperRating (Alpha)'])['Status'].count().unstack(0)index=[ 'HR','E','D','C','B', 'A', 'AA']prosperRating=prosperRating.reindex(index)prosperRating

如图可见,19年7月后,平台取消了NC评级,整体违约率也较之前降低了很多,平台的风控模型有所调整。

4.7 历史7年违约次数多的人群违约率高

#贷款状态与历史七年的违约笔数情况(违约笔数最高的到了99,趋势基本一致,为了方便图形更清晰,只取0-26行值)Last7Years_yesno=loanData.groupby(['Status', 'Delin'])['Status'].count().unstack(0)yesno = Last7Years_yesno.loc[0:26]#贷款状态与历史七年的无违约笔数情况Last7Years_no = loanData.groupby(['Status', 'Delin'])['Status'].count().unstack(0)[:0]Last7Years_no

如图可见,借款人群7年内的违约笔数大部分在1次以下,无违约记录的人群超过了有违约的人群,平台整体风控较好。

4.8 受雇佣状态越短的人群,违约率越高

#贷款状态与受雇佣状态持续时间(时间最高的到了755,趋势基本一致,为了方便图形更清晰,只取0-150行值)employmentStatus = pd.DataFrame(loanData.groupby(['Status', 'EmploymentStatusDuration'])['Status'].count().unstack(0))employmentStatus = employmentStatus.loc[0:150]employmentStatus.head()#违约率占比defaultRate=employmentStatus['Defaulted'] / (employmentStatus['Defaulted'] + employmentStatus['Completed'])defaultRate.head()

如图可见,受雇佣状态持续时间越长,违约的人数越少。受雇佣时间小于6个月的人群违约率较高。

小结:

本文主要使用描述性分析,对缺失值未进行处理。待机器学习的知识更深入后,再建立模型,对处于借贷状态Current(处在还款中,尚未结束的还款结果进行预测。

全文完,你都看到了这,点个赞再走吧~

本文来源:https://www.longfajr.com/info/144279.html

标签组:[网贷平台

科技推荐文章