Python数据分析实践——LendingClub业务分析

一、背景介绍

Lending Club 创立于2006年,是全球最大的撮合借款人和投资人的线上金融平台,它利用互联网模式建立了一种比传统银行系统更有效率的、能够在借款人和投资人之间自由配置资本的机制。这种模式就是目前为人熟知的P2P。

P2P即基于互联网平台的网络借贷行为。P2P公司充当中介作用,沟通投资人(资金充裕方)和借款人(资金短缺方),提高资金融通的效率,减少信息不对称,降低了小额借贷的难度。这种模式带来便利的同时无形中亦增加了借款人拖欠借款或欠款不还的风险,因此合理地评估借款人信用等级并进行利率定价就显得尤为重要。本文基于python,尝试对Lending Club平台的业务特性及利率定价进行简单分析。

二、本文框架

本文数据来源:lending club官网,https://www.lendingclub.com/info/download-data.action,选取并下载2018年第三季度数据进行分析。

首先进行单维变量分析,考察2018年第三季度贷款状态分布、金额分布、期限分布、贷款用途分布、贷款人信用等级分布、贷款利率分布等。

其次尝试进行多维变量分析,主要研究利率定价问题

三、数据预处理

1、导入需要用到的包(本文主要用到Numpy、Pandas)

import numpy as np
import pandas as pd

2、导入数据,观察并理解数据

#使用read_csv方法将csv文件导入python中。注意导入之前要先转化为UTF-8格式,否则可能会报错。
df=pd.read_csv('LoanStats_2018Q3.csv')

#查看数据前五行
df.head()

#查看数据所包含行数及列数
df.shape     

#查看数据类型
df.dtypes

初步观察得出,这份数据一共128198行,145列。数值类型数据(float)共计110列,非数值类型数据(object)共计35列。由于数据所涉及列数太多,后文我们考虑根据分析需求选择子集进行分析。

3、数据清洗

按照选择子集、列名重命名、缺失数据处理、数据类型转换、数据排序、异常值处理的流程进行数据清洗工作。

1)选择子集

由于本数据集的列太多,我们初步聚焦几个重要的变量展开分析,特别是我们最为关注的贷款属性变量:金额、期限、利率、等级、贷款日期、所在州、贷款状态、目的、贷款人年收入、贷款人工作年限等。

#根据需求选择子集
used_col=['loan_amnt', 'term', 'int_rate', 'grade', 'issue_d', 'addr_state', 'loan_status','purpose', 'annual_inc', 'emp_length']
used_df=df[used_col]

#查看前五行数据
used_df.head()

#查看数据所包含行数及列数
used_df.shape     

由此我们得到一个128198行、10列的数据子集。

2)数据类型转换

#查看数据类型
used_df.dtypes

此时利率int_rate是object类型。为了方便后续分析,使用astype方法将利率int_rate转换为数值类型数据。

#先使用str.replace方法将字符串中的“ % ”去掉,再使用astype
used_df.int_rate=used_df.int_rate.str.replace('%',' ').astype('float')

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

3)缺失值处理

对于缺失值处理,《根据python进行数据分析》给出两种主要方法,具体选择哪种处理思路要根据数据意义及缺失比例灵活选择:

  • 滤除:drop方法
  • 填充:fillna方法(填充0、均值、中位数、众数、上下数据)

本文中,首先定义一个函数统计缺失值个数,然后进行处理。

#定义 函数,统计子集每列的缺失值数量
def notnull_count(column):
    column_null=pd.isnull(column)
    null=column[ column_null]
    return len(null)
print(used_df.apply(notnull_count))

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

由图中看出,工作年限emp_length缺失数据较多,但由于我们样本量比较大,缺失数据比例为8%左右。因此直接滤除缺失部分。

print('删除空值之前的数据行数:',used_df.shape[0])
used_df=used_df.dropna(axis=0,how='any')
print('删除空值之后的数据行数:',used_df.shape[0])

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

4)数据排序并对列名进行重命名

#根据信用等级从高到低进行排序
used_df=used_df.sort_values(by='grade',ascending=True)
#重命名列名
used_df=used_df.reset_index(drop=True)

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

5)数据清洗完成,使用describe方法概览数据

对DataFrame使用describe方法,数值类型的对象将返回一系列描述统计值,对于‘object’这种非数值类型对象pandas将可以 返回变量的‘非空值数量’、‘unique数量’、‘最大频数变量、‘最大频数’。

used_df.describe()

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

#添加列'缺失值百分比'以便观察缺失值比例
used_df.select_dtypes(include=['object']).describe().T\
.assign(missing_pct=used_df.apply(lambda x : (len(x)-x.count())/len(x)))

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

四、基于业务的数据分析

1、单维变量分析

贷款状态、贷款金额、贷款期限、借款用途、客户信用等级、贷款利率等单变量入手,研究Lending Club 平台贷款业务的特性如何。

1 )贷款状态分布

used_df.loan_status.value_counts()

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

贷款状态以current状态为准,即存续中正常还款,但还未到最后一个还款日。平台违约率相对较低。

2 )贷款金额分布

used_df.loan_amnt.describe()

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

贷款金额最小值为1000美元,最大值为40000美元,中位数为14500美元,平均数为16361美元,说明lending club平台贷款主要以小额为准。

3 )贷款期限分布

used_df.select_dtypes(include=['object']).describe().T

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

Lending Club 主要有两种贷款期限,36 months和60 months,其中以36 months期限的贷款为主。一般来说,期限越短,风险越低,期限越长,风险越高,由此看出lending club有意通过控制期限来控制风险。

4 )借款用途分布

由上图贷款目的purpose的最大频数统计可得,2018年第三季度平台大部分贷款目的均为债务重组,这导致债务风险较高,需要持续关注。

5 )客户信用等级分析

used_df.grade.value_counts()

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

Lending Club平台对客户的信用等级分7类,A~G,信用等级为A的客户信用评分最高,信用等级为G的客户最低,信用等级高的客户发生违约的可能性更低。

2018年第三季度A等级的客户最多。

6 )贷款利率分布

used_df.int_rate.describe()

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

利率最大为30.99%,最低为5.31%,平均为12.95%,说明P2P的利率还是高于银行利率的。

2、多维变量分析

信用评级及利率计算

借款人提交申请后,Lending Club 会根据WebBank 的贷款标准进行初步审查。当借款人通过了初始信用审查,Lending Club 的专有评分模型会对申请人进行评估,并决定同意或拒绝申请。初始评分模型提供给申请人一个分数,再连同申请人FICO的分数和其他信用属性一起输入Model Rank 中。Model Rank 根据内部开发的算法来分析借款人成员的表现,并考虑申请人的FICO 分数,信用属性和其他申请数据。Model Rank 介于1-25 之间并对应一个基础风险子级。Lending Club 再根据贷款金额和贷款期限调整基础风险子级得到最终子级。最终子级共分为35 个级别,归入A、B、C、D、E、F、G7 个等级,每个等级又包含了1、2、3、4、5 五个子级。

Lending Club 设定的利率考虑了信用风险和市场情况,每个等级最终的贷款利率由以下公式计算:贷款利率=基准利率+风险和波动率调整。风险和波动率调整涵盖了期望损失,并为从A1 到G5 各个等级的贷款提供递增的风险调整收益。贷款等级的确定不只考虑了借款人的信用分数,还包含了借款人信用报告和贷款申请中的信用风险指标。

阅读上述资料可得,Lending Club的风控核心在于:对借款人进行信用风险评级,并针对每种评级给出利率定价。

因此,多维变量分析部分 ,我尝试研究贷款人信用评级和与其贷款利率之间的关系(即各个信用等级客户的平均贷款利率是多少)。

#使用数据透视表
used_df.pivot_table(index='grade',columns='term',values='int_rate',aggfunc='mean')

《Python数据分析实践——LendingClub业务分析》
《Python数据分析实践——LendingClub业务分析》

对于36个月的贷款类型,信用等级为A的客户的平均贷款利率为7.20%,信用等级为G的客户的平均贷款利率为30.84%。说明资信情况越差,贷款利率越高,60个月的贷款分析同理。

五、结论汇总

1、Lending Club平台特点

Lending Club贷款以小额为准,单笔金额在15000美元左右;

平台主要有两种贷款类型,36月贷款及60月贷款;

平台2018年第三季度贷款利率平均为12.95%,说明P2P的利率还是高于银行利率的;

2018年第三季度平台大部分贷款目的均为债务重组,这意味着更高的风险;

2018年第三季度贷款客户主要为A级客户,大部分贷款都处于正常偿还阶段。

2、Lending Club风控核心

Lending Club的风控核心在于:对借款人进行信用风险评级,并针对每种评级给出利率定价。贷款人风险评级越差,贷款利率越高。

参考链接:

1、Lending Club商业模式简介 Lending Club的深度报告及其商业模式

2、知乎大神的分析 注册会计师带你探索风险分析(EDA)

    原文作者:小兜鱼
    原文地址: https://zhuanlan.zhihu.com/p/51000627
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞