数据分析之信用风险评分卡建立

项目需求:现某金融公司想要通过建立信用风险评分卡对客户进行判断,是否发放贷款

项目描述:数据来源 kaggle 数据量 4 万条,原始字段数 33 个

项目目的: 使用机器学习构建信用卡评分模型,对新样本做出预测
环境和工具: Rstudio, prettyR, smbinning
流程:
1.数据探索:完全缺失字段,以及二分类变量正类缺失的字段进行删除,对异常值采取盖帽
法进行替换
2 对变量进行分箱操作。使用 smbinning 包中的函数,通过决策树进行最优分箱,得到每
个变量的分箱结果,以及对应的 IV 值和 WOE 值。
3 通过 IV 值大于 0.02 的部分,筛选变量(性别,年龄,婚姻,区编号,是否有家庭电话,
工作年限,收入共 7 个变量),并通过 smbinning.gen 和 smbinning.factor.gen 函数生成
新的变量并生成新的数据表。变量值为分箱后对应的 WOE 值,数据模型进行建模
4 采用 Logistic(逻辑回归)进行学习建模,对输出结果通过 smbinning.scaling 进行打分,
生成评分卡
5.通过评分卡对原数据客户进行打分, 基本判断,好坏客户的分数取值分布情况。其次通
过 smbinning.metrics()输出结果, 得到评分卡的分数最优阈值为 546, AUC 值为 0.66,
并不是很好,准确率(precision)达 87.6%
6 最后通过评分卡,使用 excel 表格,运用 vlookup 函数,对新的客户进行匹配打分
模型使用 Rstudiuo 进行搭建。使用包: base,subning,prettyR, 使用函数: glm subning
subning.factor subning.gen subning.factor.gen sunbning..plot
开始:

首先导入需要使用得包:


1 数据工程:
数据探索阶段 ,发现数据中有部门字段内容全部缺失,以及部分二分类变量只有 1 个有值,
故这两种情况无法参加建模,将其找出删除。 同时识别出哪些字段是因子型,哪些是数值型,

方便后面分箱使用不同得函数,其中数值型字段用:smbinning 因子型使用:smbinning.factor


异常值处理 : 通过箱线图判断是否存在异常值, 使用盖帽法,用 99 分位点值代替极大异常

值,有 1 分位点值代替极小异常值的方法


由于 smbining 函数中得打分是 1 是信用高得客户,故这里将目标变量得 0 和 1 值互换


变量分箱 :使用 smbinning 函数,运用回归决策树最优分箱,从而使得类之间的相异性尽
可能大(由于变量较多,这里不一一列举,拿两个字段举例),其中连续变量使用得函数为:
smbinning 因子变量: smbinning.factor
连续型变量 举例: 首先用箱图查看数据分布情况,若分布区别不明显,可以使用 T 检验(数

值变量对分类变量得影响),有显著性再进行分箱,否则无意义



年龄属性得分布情况如上图,通过 T 检验, P<0.05,表明原假设被拒绝,认为属性对目标变
量有显著影响,可以进行分箱
Smbnning 对年龄得分箱结果,是通过回归树进行最有分箱,由树图可知:划分点为: 19,

22, 32, 37, 46, 59 六个点,分为 7 个区间属性,同时获取响应区间 WOE 值以及总得 IV

值。


年龄得 IV 值为 0.2.WOE 分布如下图,可加分箱分布有明显趋势,说明分箱结果不错,可以

加入模型。


用年龄字段进行分箱得完整代码如下:


对其他得数值变量,通过同样得方式进行分箱操作,并获取 IV 值。
因子型变量分箱

分类型变量 以性别举例说明:通过前期数据探索,发现性别变量有部分值没有指明性别,这
里用众数填充, :
对于分类变量采用得是卡方检验,来检验分类是否对目标变量有显著性得影响,这里 P 值

很小,表明拒绝原假设,即性别对信用度有显著影响,可以进行分箱


分箱结果得分布如下:可以看出,女性相对于男性更容易违约


分类变量分箱也采用的是 smbinning 包,不过 smbinning 包中就是用原分类值进行属性
划分,未对划分属性处理,分类变量用的函数是 smbinning.factor(),最后得到 SEX 的 IV

值为 0.0274。具体执行代码如下:


再举一个电话区号得例子,可能很多人直接做数值型变量处理了。通过数据探索发现,大部
分得申请者都是来自于四个地方,其他得地方人很少很分散,这里有明显得地域偏向,所有
我将其处理为类别变量,除了 3 个申请人较多得地方分别为一类,其他得地区划分为一类,
共四类进行处理;

通过 WOE 分布还是比较好得分箱, IV 值 0.0389


具体代码如下:


接下来所有变量进行分箱之后,得到所有得 IV 值,一般认为 IV 大于 0.02,对构建评分卡
有一定得价值,所以这里以 0.02 为界限进行变量筛选。最终选择性别,年龄,婚姻,区编
号,是否有家庭电话,工作年限,收入共 7 个变量进行建模。

一下是 IV 值及分布情况:




对于分箱后的数据,使用 smbinning 得函数,生成分箱后的数据,生成新得数据集,通过

logistic (逻辑回归),建立评分卡模型。其中声中分箱结果数据使用得函数,数值型分箱
变量用函数 smbinning.gen(),因子型变量用函数 smbinning.factor.gen()。通过逻辑回归

结果可以看出,分箱后得变量都较为显著


有了模型给出得预测结果,就可以对其进行打分了。使用 smbinning.scaling 函数,通过调
节 pdo, score, odds 三个参数,是的评分卡得分值在合理得范围内。这里评分卡区间为

(345-798)。并将评分卡保存到文件。代码如下:


评分卡得最终结果展示如下:


评分卡建好,这里是使用 smbinning.scoring.gen 对原数据集数据进行一个打分。并查看
好坏客户的得分分布情况,
其次通过 smbining.metrics()函数,从输出报告可以看出,最优阈值为: 546, AUC 值为

0.66,并不是很好,准确率(precision)达 87.6%,结果及代码如下图



预测
针对新样本,我选择用 Excel 工具获得信用评分,使用 VLOOKUP 函数可以很方便地得到
想要的数据,评分展示如下,选择 cutoff 值为 546,这里认为(526,546)的客户为关注客
户,信用情况中等, 546 分以上的客户信用情况良好, 526 分以下的客户信用情况堪忧。 其

中符号: 表示信用良好, 表示信用中等, × 表示信用较差



附上数据源:kaggle:https://www.kaggle.com/yuzijuan/credit-card-scoring/data
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值