背景

目的

数据集获取

数据处理

一、背景

公司背景

Lending Club 创立于2006年,主营业务是为市场提供P2P贷款的平台中介服务,公司总部位于旧金山。

公司在运营初期仅提供个人贷款服务,至2012年平台贷款总额达10亿美元规模。

2014年12月,Lending Club在纽交所上市,成为当年最大的科技股IPO。

2014年后公司开始为小企业提供商业贷款服务。

2015年全年Lending Club平台新设贷款金额达到了83.6亿美元。

2016年上半年Lending club爆出违规放贷丑闻,创始人离职,股价持续下跌,全年亏损额达1.46亿美元。

作为P2P界的鼻祖,Lending club跌宕起伏的发展历史还是挺吸引人的。

此处再顺便介绍一下什么是P2P。概括起来可以这样理解,“所有不涉及传统银行做媒介的信贷行为都是P2P”。简单点来说,P2P公司不会出借自有资金,而是充当“中间人”的角色,让借款人与出借人相亲相爱。

借款人高兴的是拿到了贷款,而且过程快速便利,免遭传统银行手续众多的折磨;出借人高兴的是借出资金的投资回报远高于存款利率;那么中间人高兴的是用服务换到了流水(拿的便是事成之后的抽成) 最后实现三赢。

贷款标准

借款人提交申请后,Lending Club 会根据贷款标准进行初步审查。贷款人需要满足以下标准才能借款:

1.FICO 分数在660 分以上

FICO分数等级划分

2.债务收入比例低于40%

3.信用报告反应以下情况:至少有两个循环账户正在使用,最近6 个月不超过5 次被调查,至少36 个月的信用记录

贷款等级

贷款分为A、B、C、D、E、F、G 7 个等级,每个等级又包含了1、2、3、4、5 五个子级。

二、目的

研究影响贷款等级的相关因素,并探寻潜藏在数据背后的一些规律

三、数据集获取

选取2016年第一季度、第二季度的数据集以及特征变量的说明文档。

官网上下载数据集

已翻译的特征说明文档

说明:部分重要的特征变量似乎缺失,多次下载的数据集中缺少fico分数、fico_range_low、fico_range_high等与fico相关的特征,所以在形成结论进行总结的时候,这些特征的结论将从相关的报告中获取。

四、数据处理

在对数据进行处理前,我们需要对数据有一个整体的认识

lendData.info()

RangeIndex: 133891 entries, 0 to 133890

Columns: 110 entries, id to total_il_high_credit_limit

dtypes: float64(86), object(24)

memory usage: 100.1+ MB

从上述的信息中可以看出:

1.133891行数据,110个特征变量

2.110个特征变量中有86个是浮点数类型,24个是Object对象。

获取到的信息还是太少,接下来可以通过下面的方法,得到数值型数据和Object基类的数据分布。

lendData.select_dtypes(include=['O']).describe().T\

.assign(missing_pct=lendData.apply(lambda x : (len(x)-x.count())/len(x)))

筛选出object对象的对应信息,可分别得到非空值数量、unique数量,最大频数变量,最大频数,以及新添加一列特征变量missing_pct,表示值缺失的比重。

Object基类对象的数据分布情况

从图表中可以得到部分信息:

1.贷款共7个等级,占比最多的是B级

2.还款的形式有两种,占比最多的是36个月

3.贷款人中大多数人工龄10+年

4.贷款人的房屋状况大多是抵押贷款

5.大多数人贷款的目的是债务整合

6.id与desc特征的数据缺失率高达0.99,间接表明这两个特征可以删除掉。

同样可以按照这种方式对浮点型的数据进行数据预览,得到均值、标准差、四分位数以及数据的缺失比重等信息。

空值、异常值处理

得到上述的信息后,我们可以根据缺失比重进行数据的清洗。在这里按照60%的阈值删除数据。最后得到100个特征变量。

原始数据集存在异常值情况,如特征变量emp_length(工龄)数据中包含‘n/a’的数据,产生原因为公式应用的错误无法找到原值,而且占比较小,清除后剩余124947行数据。

除去异常值,还包括对空值的处理,对于较为重要的特征来说,如果缺失值占比较小,可以通过填补均值进行处理。

application_joint['il_util'] = application_joint['il_util'].replace('NaN',application_joint['il_util'].mean())

特征筛选

特征筛选在数据预处理中是很关键的一步,这一步对后序的分析、挖掘有很大的影响。

经过初步的数据清洗后,我们得到了100个特征变量,这其中包括一些与最终研究目的完全无关的变量,一部分方差值很小、无法得到更多信息的变量。虽然100个特征变量不算多,但如果去掉一些无用的特征减少数据维度,且有一定的降噪效果,那么这一步是必须要做的。

这里的筛选标准如下:

1.与最终研究目的无关的特征

2.方差值太小,无法获取有用信息的特征

3.不可解释的特征

我们的研究目的是探讨影响贷款等级的众多因素,关键特征grade代表的就是不同的贷款等级,如果想剔除与grade无关的特征,那么可以用相关系数来处理。

相关系数:研究变量之间线性相关程度的量

具体要如何处理呢?特征grade中包含A、B、C、D等七个贷款等级,做数值计算之前,需要将Object类型转换为数值类型。

#贷款等级Object类型转为数值类型

grade = lendData['grade'].replace('A',1)

grade = grade.replace('B',2)

grade = grade.replace('C',3)

grade = grade.replace('D',4)

grade = grade.replace('E',5)

grade = grade.replace('F',6)

grade = grade.replace('G',7)

转换过后,我们可以将特征中所有的数值类型的数据与贷款等级进行相关系数计算。

dicti = {} #计算两组数的相关系数

for i in range(0,len(lendData.select_dtypes(include=['float64']).columns)):

try:

dicti[lendData.columns[i]] = np.corrcoef(lendData[lendData.columns[i]].dropna(),grade)[0,1]

print(lendData.columns[i],np.corrcoef(lendData[lendData.columns[i]].dropna(),grade)[0,1])

except Exception as e:

continue

经过数据可视化得到下面的相关系数分布图。

数值型特征与贷款等级的相关系数分布

经过筛选后,得到54个特征(不包括未转换数据类型的其他Object类型特征),其中total_rec_int(目前为止收到的利息)、bc_util(银行卡流动余额与信贷限额比率)、acc_open_past_24mths(过去24个月内的交易量)、open_il_12m(过去12个月内开设的分期付款帐户数)等特征与贷款等级呈正相关关系。total_rev_hi_lim(总的周转信用额度)、total_rec_prncp(迄今收到的本金)、mths_since_recent_bc(自最近银行卡帐户开立以来的几个月)等特征与贷款等级呈明显的负相关关系。

同时,我们注意到这样的一个问题,在相关系数的分布中,有一部分相关系数较高的特征是由贷款等级来确定的(比如说贷款总金额、未偿还的本金、迄今收到的本金、利息等等,都是确定贷款等级之后才有的信息),而不是决定贷款等级的因素,因果关系不成立。这样的特征即使于贷款等级相关性高,也与最终的目的无关。

相关系数只是筛选的一种标准,具体的特征留存还需要根据对贷款业务的理解,有所保留的删减特征。

之后我们对上述的54个特征进行方差筛选,对于方差值较小、变化幅度较小的特征进行剔除,当然要综合考虑。

from sklearn.feature_selection import VarianceThreshold

#方差选择法,返回值为特征选择后的数据 #参数threshold为方差的阈值

lend = VarianceThreshold(threshold=2).fit_transform(lendData.select_dtypes(include=['float64']))

特征、相关系数、方差信息一览图

针对上述的特征进行进一步的方差筛选。其中特征collections_12_mths_ex_med无法解释/与研究目标无关,delinq_2yrs、acc_now_delinq很重要,其余特征无法判断,先保留看看。

特征重要性

经过初步特征筛选后,我们发现相关系数因素有些单一,并不能确定哪个特征更为重要,更需要进行深度探索。经过搜索得知GBDT算法可以算出变量的重要性。因为lending club贷款数据中并不包含“分类”变量target,所以GBDT通用的特征选择方法无法使用。

经过搜索找到了造好的轮子(取个巧),直接得到了算法计算后的结果,如下图所示。

引自文章https://zhuanlan.zhihu.com/p/21550547

其中dti(借款人每月已还债务总额占总债务计算的比率)、bc_util(所有银行卡账户的总流动余额与信贷限额/信用额度的比率)、mo_sin_old_rec_ti_op(自最早的周转帐户开立以来的月份)等特征较为重要。

Tip: 综上结合相关系数与特征重要性,去掉无因果关系的、重要性较低的特征,我们得到如下的筛选后的特征。

最终特征筛选结果(按特征重要性排序)

可能大家会注意到在筛选特征的过程中只针对数值型特征进行筛选,那么Object类型的特征呢?

根据前面得到的信息,共有24个Object类型的特征,其中有大部分特征是贷款后的才有的信息,并不能决定贷款等级。而且,在查看特征重要性中已包括Object类型的特征,如home_ownership(房屋所有权状态,包括租赁、拥有、贷款抵押三种类型的值),其余特征并不在考虑范围内。

数据的前期处理部分就到这里了,下一篇文章将主要对数据进行可视化分析、结论总结等。其实大部分的工作都在数据处理部分,可视化占较少的一部分时间。处理好了数据对后续的工作有很大的影响。

附上在数据分析的过程中遇到的很好的参考资料,包括特征工程(包括对特征的处理、筛选等)、已有的成型的数据分析文章等。

python银行信贷风险分析_Lending Club贷款数据分析(python代码)相关推荐

  1. Lending Club贷款数据分析

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  2. 随机森林案例分析:德国银行信贷风险分析

    2019独角兽企业重金招聘Python工程师标准>>> 原文:Predicting Loan Credit Risk using Apache Spark Machine Learn ...

  3. python贷款_利用python分析Lending Club贷款数据

    一.目录 文章分为以下几个内容项目介绍 数据准备 数据处理 构建模型 总结 二.项目介绍 本项目分析P2P平台Lending Club的贷款数据,Lending Club的背景可参照以下链接:娜姐的学 ...

  4. [转载] 大数据分析Python For循环教程

    参考链接: Python中的迭代器函数1 大数据分析Python除了循环遍历列表之外,for循环还有很多其他功能,在现实世界的数据科学工作中,您可能需要将numpy数组和pandas DataFram ...

  5. python编程大数据分析_大数据分析Python学习技巧

    大数据分析Python是任何开发人员都应该知道的重要编程语言.许多程序员使用这种语言来构建网站,创建学习算法以及执行其他重要任务.但是尝试学习大数据分析Python可能会令人感到恐惧,沮丧和困难,尤其 ...

  6. 银行营销数据分析---Python(numpy、pandas、matplotlib)

    数据分析[Python] 项目介绍 我的理解 了解数据 源数据解析 源数据概况 数据处理 数据分析 数据展示分析 影响因素分析 分析总结 项目介绍 数据来源:kaggle银行营销数据 工具:Pytho ...

  7. 探索性数据分析:银行信贷数据集

    作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:huang.tian-yuan@qq.com 前言 本文为 ...

  8. python 银行数据_Python银行数据分析之--民生银行数据转换

    Python银行数据分析之--民生银行数据转换 # 民生银行数据转换 def cmbcBankProcessDo(t, companyName, accountingTitle, begin): t ...

  9. python金融风控评分卡模型和数据分析

    python金融风控评分卡模型和数据分析微专业课(博主录制):http://dwz.date/b9vv 作者Toby:持牌照消费金融模型专家,和中科院,中科大教授保持长期项目合作:和同盾,聚信立等外部 ...

最新文章

  1. iOS 状态栏的图标
  2. Sass mixin与extends、%placeholder、function
  3. 操作系统——进程的状态及转换
  4. window.location.href如何多次请求_何为幂等?如何设计?
  5. 你都有哪些丢人的经历?
  6. python中json怎么转换成字典
  7. 最棒的 JavaScript 学习指南(2018版)
  8. WIN7安装MTK驱动(系统找不到指定文件!解决方案)
  9. 一文读懂什么是硬件开发、智能硬件、硬件系统?
  10. MES系统在注塑行业中的应用
  11. 双模控制器很耗电_电动车双模控制器什么意思
  12. 大天使之剑武器都在哪掉落?
  13. 60行C代码的shell领略Unix哲学之美
  14. data单复数一样吗_data的复数形式是datas还是data?rt
  15. Kubernetes一致性认证
  16. 【Mysql系列】游标/光标简介
  17. 【CV】ViT:用于大规模图像识别的 Transformer
  18. 关于1byte 1KB 1MB 1GB求其所能表示的地址范围
  19. 【C++学习笔记】C++文件操作
  20. 笔记 | Java 虚拟机

热门文章

  1. 黑马程序员-三层架构介绍
  2. 项目经理是否需要考取PMP证书?
  3. 麻省理工学院(MIT)研究生学习指导: 怎样做研究生
  4. 雅思作文未来计算机的应用,雅思大作文范文解析:孩子是否应该每天使用电脑...
  5. java枚举类型定义_java中的枚举类型怎么定义?
  6. 斐波那契回调线怎么画_斐波那契回调线的标准画法(建议收藏)
  7. ipadpro画流程图_要玩转iPad Pro?不如先下载这些APP
  8. java第八天/10.21
  9. Presto on Apache Kafka 在 Uber 的大规模应用
  10. OA办公移动化,趋势依然看涨