爱数课:idatacourse.cn
领域:金融
简介:本案例所选的数据集是来自LendingClub中统计的2018年第四季度的借贷数据,随机删除了约40%的贷款记录,并对其进行可视化分析。
数据:
./dataset/lendingclub.csv
1. 数据读取与预处理
本案例主要背景为贷款情况审查。银行可以通过个人贷款状况对个人信用进行分类,从而更好地避免金融诈骗的发生。本案例所选的数据集是来自LendingClub中统计的2018年第四季度的借贷数据,随机删除了约40%的贷款记录。
数据集共有70000行,128列。由于列过多,此处简单列举几个重要列的含义作为参考。
对应的所有特征的具体含义可以查看源数据网页中的DATA DICTIONARY。
列名 | 含义说明 |
loan_status | 贷款的当前状态 |
grade | 信用证指定贷款等级 |
emp_title | 借款人的职业 |
annual_inc | 借款人自行申报的年收入 |
addr_state | 借款人所处的国家或地区 |
int_rate | 贷款利率 |
installment | 如果贷款发放,借款人每月所需要还款的数额 |
sub_grade | 信用证指定贷款基础 |
emp_length | 就业年限(年)。可能的值介于0和10之间,其中0表示一年以下,10表示十年或十年以上 |
home_ownership | 借款人在登记期间提供的或从信贷报告中获得的房屋所有权状况。其值为:租金、自有、抵押、其他 |
hardship_payoff_balance_amount | 困难计划开始日期的收支差额 |
hardship_last_payment_amount | 截至困难计划开始日期的最后一笔付款金额 |
disbursement_method | 借款人获得贷款的方式。可能的值是:现金,直接支付 |
avg_cur_bal | 所有账户的当前平均余额 |
installment | 如果贷款发放,借款人所欠的每月付款 |
loan_amnt | 借款人申请贷款的金额 |
1.1 数据导入
使用Pandas中的read_csv()
函数可以读取csv文件,结果会保存为一个DataFrame或Series对象,调用使用DataFrame或Series对象的head()
方法查看可以查看前n行数据,默认为5。
从数据的前五行可以看出,共有128列数据,其中有很多数据列存在空值等情况,在对数据进行可视化分析之前,先对数据进行简单的清洗。
1.2 数据清洗
查看数据集中缺失值占所在列中的比例。由于数据集列数较多所以我们只显示缺失比例排名前10的列以及对应的比例。
可以看到,数据中很多列的缺失值比例为 100% ,因此删除掉缺失值比例大于 50% 的列。对剩下仍有缺失值的列进行后值向前填补。
0
填补完毕后查看是否存在缺失值,发现填补完的数据集没有缺失值。
2.数据可视化分析
我们将利用Python中的绘图库如Matplotlib,Seaborn等通过绘图的方式对数据进行可视化分析。
2.1 贷款状态柱状图
使用Seaborn库中countplot
函数绘制贷款状态loan_status
的柱状图。使用figure
函数设置图形大小,figsize
参数设置图形长宽大小,dpi
参数设置图形分辨率。
贷款状态柱状图,可以看出贷款状态为Current占绝大多数,其次是Fully Paid,说明绝大多数的用户的贷款状态为正常状态。
2.2 信用证贷款等级饼图
饼图可以直观的反映不同取值所占比例大小。例如信用证贷款等级grade
特征,可以通过pie
函数绘制不同信用证贷款等级grade
下的样本数量比例。explode
参数设置饼图中每一块离开中心的距离,labels
参数为(每一块)饼图外侧显示的说明文字,autopct
参数控制饼图内百分比数值格式的设置,例如%1.1f%%
表示仅显示小数点后一位,shadow
参数设置饼图是否存在阴影。
从信用证贷款等级饼状图可以看出,贷款等级共有七个,贷款等级A表示贷款等级高,G表示贷款等级低。大部分借款人的信用等级都比较高,处于A、B等级的借款人比例超过50%。只有极少数人的贷款等级为F和G。
2.3 不同贷款等级下的贷款异常率条形图
我们还可以更进一步的显示离散型特征在另外特征上的样本数量情况。例如绘制不同信用证贷款等级grade
下的贷款状态loan_status
异常率条形图。
针对loan_status
的6种取值,将Current
和Fully Paid
设置为正常贷款状态True,其余设置为非正常贷款状态False。绘制不同贷款等级下的贷款异常率条形图。利用Seaborn库的barplot
函数绘制,其中坐标轴X轴代表贷款异常率,Y轴代表贷款等级。
可以从上图中看出,贷款等级为A的贷款异常率最低,贷款等级为G的,贷款异常率最高。随着信用证贷款等级grade
的递减,贷款状态loan_status
的非正常状态所占比例逐渐增大,即允许发放贷款的比例越来越低。说明贷款等级与贷款状态相关,贷款等级越高,贷款异常率就越低,贷款等级越低,贷款异常率就越高。
2.4 平均收入随工作年限折线图
折线图可以很好的反映特征之间的变化趋势,例如不同就业年限emp_length
的借款人的平均年收入(annual_inc
)趋势。首先,由于emp_title
特征值大小写不分明,为了更加准确汇总emp_title
的种类,统一为小写字母。然后,获取不同就业年限对应的平均年收入。
绘制折线图。利用Seaborn库的lineplot
函数绘制平均收入随工作年限折线图,其中折线图X、Y轴分别表示emp_len_list
和avg_inc_list
。
从上图中,可以看出工作年限为一年的平均收入最低,平均年收入并不绝对随就业年限的增加而增加。但平均收入总体上随着工作年限的增加而成上升的趋势。
2.5 不同贷款状态下当前平均余额点图
点图代表散点图位置的数值变量的中心趋势估计,并使用误差线提供关于该估计的不确定性的一些指示。例如利用pointplot
函数可以绘制出不同贷款状态loan_status_1
的当前平均余额avg_cur_bal
的点图。
从上图中看出,处于正常贷款状态下的借款人的平均余额高于贷款异常状态下的平均余额,并且正常贷款状态下的借款人的余额分布更为集中平均。说明贷款状态也与用户当前平均余额有关系。
2.6 不同贷款等级、贷款状态下的平均余额小提琴图
小提琴图用于显示数据分布及其概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。例如使用violinplot()
函数绘制不同信用贷款等级grade
的人处在不同贷款状态loan_status_1
下的当前平均余额avg_cur_bal
的分布情况。
可以看到贷款等级为B的当前平均余额最高,贷款等级为G的当前平均余额最低。总体来说,贷款等级高的当前平均余额要高于贷款等级低的当前平均余额。并且贷款等级高的贷款状态要优于贷款等级低的贷款状态。
2.7 贷款用户每月所需付款直方图
直方图观察特征取值的分布情况。例如distplot
函数绘制贷款用户所需的每月付款installment
的直方图。
从上图可以看到贷款用户每月所需付款从0元到1750元,每月所需还款金额集中分布在0-750元之间,每月还款超过1000元的人所占的比例很少。
2.8 热力图
利用热力图可以看数据集里多个特征两两间的相似度。可以使用corr
函数获得数据的相关性矩阵,利用heatmap
函数绘制热力图。由于特征过多,故仅显示贷款金额loan_amnt
、每月所需付款金额installment
、当前平均余额avg_cur_bal
、平均收入annual_inc
特征的相关性热力图。为了更加直观的显示相关性的大小,可以设置annot
参数为True,直接在方格中显示两两特征的相关性大小,fmt
参数设置相关性数值的格式,如fmt='.2f'
表示仅显示小数点后两位。
从上图看出,借款人每月还款金额(installment
)与借款数目(loan_amnt
)成强正相关性,其余特征也都或多或少呈一定程度的正相关性。
爱数课(iDataCourse)是一个面向院校的大数据和人工智能课程和资源平台。平台提供权威的课程资源、数据资源、案例实验资源,助力院校大数据和人工智能专业建设,课程建设和师资能力建设。