Lending Club 实战--利用Python创建申请评分卡
作者:zhaikun 风控建模屌丝一枚,现居于北京
个人微信公众号:Python数据分析与评分卡建模
联系方式:664086823@qq.com
Lending Club,P2P平台,公司位于美国旧金山。2014年12月12日开始在纽交所挂牌交易,代码LC。目前总市值54亿美元。
所用数据是 LoanStats_2016Q4.csv 和LoanStats_2017Q1.csv ,在 LoanStats_2016Q4.csv 上训练模型和验证模型,在LoanStats_2017Q1.csv上加载模型用来测试模型表现。
所用模型是LogisticRegression 和 XGBClassifier,默认参数未调参
数据来源:https://www.lendingclub.com/info/download-data.action
特征变量解释:http://www.docin.com/p-635342290.html
目标变量解释:http://www.doc88.com/p-5089631302589.html
# Step 1: 数据加载
import pandas as pd
import numpy as np
import os
os.chdir('d:/work/LendingClub')
data=pd.read_csv('LoanStats_2016Q4.csv',skiprows=1)
data.head()
我们发现共103548个样本,145个特征。
缺失值可视化发现,很多特征含有缺失值。
# Step 2: 数据预处理与特征过滤
预处理:删除缺失比例0.5以上的变量、常数变量、检查有没有重复变量
再继续看看下数据集形状,发现特征从145变成了102
data.shape
(103548, 102)数据集中很多特征是关于投资人的数据,与建模无关,所以我需要过滤变量;同时为了便于大家理解,我把特征重命名为中文。
再次预览数据,此时剩余26个特征
# Step 3: 特征抽象与可视化
我先把变量分为连续变量与分类变量,发现有11个连续变量,15个分类变量
接下来可视化作图
发现目标变量有点乱,没关系。
特征抽象:把目标变量各水平转为我们所需要的0、1形式。
处理后发现正常客户17731,违约客户6816
特征中有时间变量:信用报告最早日期、放款日期。
我们知道美国的征信数据是比较完善的,那我想知道会不会开启“信用报告天赋”越早,表现越好呢?
这里稍微做了个特征衍生,创建了新变量days,含义是放款时,客户拥有信用报告的天数
在做过分类变量水平合并和删除严重不平衡的分类变量后,接下来就是可视化了:让我们看一下各变量的分布以及与目标变量的关系吧
有一句话叫:老板看不懂代码,但能看得懂图。get可视化技能很重要哦!
对于以上图片相信大家都能看懂,我就不赘述了,接下来再次预览数据,还剩下22个特征
# Step 4: 数据补缺
我们先看一下处理后的数据缺失情况吧
在这里,我把连续变量用随机抽样补缺,分类变量用众数补缺,同时统一字符变量为大写
# Step 5: 卡方分箱,计算WOE和IV值
为了创建申请评分卡,我们不用One-hot、不用归一化,而是选择卡方分箱和WOE编码。
这里先解释下卡方分箱、WOE和IV的概念:
卡方分箱和WOE计算过程较为繁琐,这里不再赘述。最终保存如下数据:
虽然分箱前只有22个特征,但还是要筛选变量的,经过IV筛选和相关系数筛选后,剩余9个变量
2016Q4数据中,逾期坏样本比例28%,我们可以不用"过抽样"。本着探讨的精神, 我会用逻辑回归,XGBOOST 这2个模型,未SMOT抽样,SMOTE抽样这2种情况,共训练4个模型;
之后这4个模型会在在2017Q1数据中分别加载,看看效果。
先看smote抽样方法:
逻辑回归有个显著性检验,这一步也可以筛选变量:
这几个变量都是显著的,下面建模
第一个模型是经过smote抽样后的逻辑回归模型:
我们发现统计指标不是很好,别灰心,惊喜在下面!
再看看经过smote抽样的xgboost模型:
是不是很激动,统计指标辣么高!
再看更鸡冻的:红线代表逾期客户的分数分布,蓝线代表正常客户的分数分布。
我们发现:哇塞,低分与高分分的好开,直接拒绝低分的,放过高分的,人工审核中间分的,太棒了!
但是,它过拟合了
我们再看看未经过smote抽样的数据,分别用逻辑回归和xgboost试试。
先看LR:
我们会发现,未经过smote抽样的逻辑回归准确率大幅提升,KS和AUC变化不明显。
再看XGBOOST:
统计指标大幅下降!
这4个模型训练好了,我们看下这4个模型在2017年第1季度数据上的表现
先加载未经过smote采样的逻辑回归模型
可见:虽然说是不同的数据,但逻辑回归表现的还是比较稳定的
再加载经过smote采样的逻辑回归模型
我们发现smote采样后的模型,测试准确率低了很多。
前辈经验是10%坏样本以上的数据尽量先不用smote采样哦
同样的方法加载XGBOOST模型,这里就不赘述了。
最后把汇总的统计指标发给大家,怎么分析,仁者见仁智者见智啦。
X轴:0表示未smote抽样,load表示加载模型
Y轴:统计指标实际值
本文数据获取:下图扫码关注Python爱好者社区后回复 LC
Python爱好者社区历史文章列表(每周append更新一次)
关注后在公众号内回复“课程”即可获取:
0.小编的Python入门视频课程!!!
1.崔老师爬虫实战案例免费学习视频。
2.丘老师数据科学入门指导免费学习视频。
3.陈老师数据分析报告制作免费学习视频。
4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。
5.丘老师Python网络爬虫实战免费学习视频。