大家好,欢迎来到IT知识分享网。
老饼讲解-机器学习https://www.bbbdata.com/text/125
目录
本文以kaggle上的借贷数据:https://www.kaggle.com/c/GiveMeSomeCredit/data 为例,讲解《建立评分卡模型的全过程》。
本文只讲解流程,完整代码见《评分卡实例:完整建模代码》
本文的流程是完整的,详细的,具体的,可以一步步跟着执行。由于文字上比较浓缩, 需要花些耐心。
特别告知:《评分卡系列》文章在本人网站作了更完善更全面的更新,由于改动过大,本文不再更新。一切以老饼的知识网站为主。
(前一) 数据说明
数据共包含10个变量与客户好坏标签:
变量名 | 变量描述 | 数据类型 |
---|---|---|
SeriousDlqin2yrs | 是否有超过90天或更长时间逾期未还的不良行为 | 二分类(0为好,1为坏) |
RevolvingUtilizationOfUnsecuredLines | 信用卡和个人信用额度的总余额(除房地产以及分期付款债务(如汽车贷款))除以总信贷限额。 | 定量 |
age | 借贷者的年龄 | 定量 |
NumberOfTime30-59DaysPastDueNotWorse | 借款者逾期30至59天的次数(过去两年中没有恶化) | 定量 |
DebtRatio | 月债务支出、赡养费、生活费除以总收入(负债比率) | 定量 |
MonthlyIncome | 月收入 | 定量 |
NumberOfOpenCreditLinesAndLoans | 公开贷款(如汽车和抵押的分期)和信用上线(比如信用卡)数量 | 定量 |
NumberOfTimes90DaysLate | 90天逾期次数:借款者有90天或更高逾期的次数 | 定量 |
NumberRealEstateLoansOrLines | 抵押和房地产数量(包括房屋净值信用额度) | 定量 |
NumberOfTime60-89DaysPastDueNotWorse | 借款者逾期30至59天的次数(过去两年中没有恶化) | 定量 |
NumberOfDependents | 家庭受抚养人数(不含自己) | 定量 |
数据共15万条,如下
(前言二) 评分卡建模步骤概述
评分卡的目标模型是,依据客户数据(10个变量),预测客户是否坏客户(数据中的SeriousDlqin2yrs变量).
整个建模过程共5步:
1.变量分析与分箱:筛选与标签SeriousDlqin2yrs有相关性的变量,并把变量进行分箱,作为建模的输入特征。
2.建模
(1)数据预处理:转woe,归一化
(2)用逐步回归选出尽量少的特征(同时保持建模效果)
(3)训练逻辑回归模型
3.模型评估:检验AUC是否达标,并检查系数是否都为正。
4.将逻辑回归模型预测结果转为评分
5.确定生产上的判定为坏客户的分数阈值
一.变量分析、选择与分箱处理
(一) 使用badRate法(或iv法)分析变量
本阶段分析和挑选变量,一般使用badRate法(或iv法)分析哪些变量与客户的质量相关,作为入模变量。
完整分析流程与变量初探结果见:
《评分卡实例:变量分析-整体流程》
《评分卡实例:变量分析-初探结果》
这里挑选部分讲解如下:
1.badRate法分析过程简介
2.例子
(1) 先粗略分箱,试探变量的badRate,如RevolvingUtilizationOfUnsecuredLines变量
(2)如果变量的badRate有一定的趋势,就进一步对变量仔细分箱
在本例中,所有变量与badRate都有明显的关系。因此以上10个变量都被选择用于建模。
(二) 原始数据转为分箱数据
最后,将原始数据转为分箱数据,如下:
由于原变量名过长,换成新的变量名:
完整结果见:《评分卡实例:变量分析-变量分箱》
二.模型数据预处理
预处理时,将原数据映射成组号,如果直接把组号作为特征变量值,不够理想,组号是等距的,而badrate是不等距的。一般需先将组号转为WOE
WOE的意义与推导可见:《评分卡-WOE的意义与推导》
(一) 转WOE
(1) 计算每个特征每个分组的WOE(特征WOE映射表):
即将变量X第i组的输入转为
(2) 将分组转换为WOE
(3) 举例说明
特征 rev_grp 计算得到的每组对应的WOE:
将rev_grp的分组数据转换成分组对应的woe数据:
备注:有些人在分箱时,只作分箱,而不按badRate大小重新调整分组,即badRate不随序号增加而增加,这时,作 WOE转换可解决此问题。
(二) 归一化
(1) 归一化公式
归一化直接使用如下公式对数据缩放到[0,1]即可:
(2) 举例说明
特征rev_grp 归一化前的最大值为:2.793,最小值为:-1.574,则对rev_grp统一作归一化如下:
(三) 总结
总的来说,由分组数据–>woe数据–>归一化数据,如下:
三.模型变量筛选与建立逻辑回归模型
(一)逐步回归选择尽量少的变量建模
则选出的变量,就是变量池中,最具代表的变量。这样既保障了模型的效果,又尽量减少变量的个数。
代码结果:
===========逐回步归过程=============== 本轮最佳AUC: 0.30279 ,本轮最佳变量: rev_grp 本轮最佳AUC: 0.6963 ,本轮最佳变量: due3059_grp 本轮最佳AUC: 0.24723 ,本轮最佳变量: due90_grp 本轮最佳AUC: 0.25118 ,本轮最佳变量: due6089_grp 本轮最佳AUC: 0.57751 ,本轮最佳变量: debratio_grp ,效果不明显,不再添加变量 最终选用变量 4 个: Index(['rev_grp', 'due3059_grp', 'due90_grp', 'due6089_grp'], dtype='object')
可以看到,在加入第5个变量,deratio_grp时,AUC增长并不明显,则可以停止添加变量。只使用前4轮挑出的变量:rev_grp,due3059_grp,due90_grp,due6089_grp
(二)用选出的变量建立逻辑回归
备注:训练时, sklearn默认加入L2正则项,训练时可先将penalty选项设为’none'(即不加入正则项),如果最后训练系数不满意,再改回’l2’训练。
训练完成,即可得到各个特征的权重w和阈值b:
=========模型参数========== 模型系数(对应原始数据): [0. 0. 0. 0. ] 模型阈值(对应原始数据): -2.22016
四.模型评估
(一) 用AUC评估
模型的效果评估一般是使用AUC。
PASS:为什么使用AUC,而不是准确率?因为模型预测的是概率,判断最终是好坏,还需要引入阈值(大于阈值,判为坏,小于阈值,判断为好),阈值不同,准确率也不同。而AUC则是所有阈值的准确率的综合评估。
计算模型的AUC,AUC值的意义如下:
(二) 检验系数是否为正数
五.模型输出(转评分)
(一) 模型输出与应用(概率预测)
共由三部分组成:
如下:
(1) 模型变量(model_feture):rev_grp,due3059_grp,due90_grp,due6089_grp
(2) WOE对应表:
(3)模型系数:
2.模型应用
(二) 模型输出与应用(转为客户评分)
整理后可得:
备注:评分卡不使用概率转换分数,而是用线性部分转换成分数,这样做的好处是,每一个特征x的分数和就是总分,而如果用概率转分,则单个特征增加s分,总分并不增加s分。
1.将概率模型转换为评分模型
(1) 设置 init_socre,init_odds,delta_score,delta_rate
(2) 计算模型的基础分和每个特征每个分组的评分。
先用公式计算offset和factor。
计算基础分与特征得分:
公式的推导可阅读:《评分卡-分数转换与推导》
2.最终评分模型输出
如下:
(1) 模型变量(model_feture):rev_grp,due3059_grp,due90_grp,due6089_grp
(2) 基础分(BaseScore):692.45
(3) 特征评分表:
3.模型应用
模型应用时,即对客户评分,如下使用:
六、模型阈值表与投产阈值
模型投产时,需要确定一个评分阈值,将低于评分阈值的客户拒绝。
(一) 模型阈值效果表
为了结合业务,确定阈值,一般统计阈值效果表。阈值表展示用不同评分阈值,模型在业务带来的效果。
阈值效果表的统计字段如下:
(二) 通过阈值表确定阈值
(2) 再看《损失的客户%》确定阈值。
如阈值取<670,则损失 10.55%客户(15818个),如果损失客户过多,业务上不能接受,则阈值取更小。
(3) 最后评估综合信息.
(三) 分数分布图
特别告知:《评分卡系列》文章在本人网站作了更完善更全面的更新,由于改动过大,本文不再更新。一切以老饼的知识网站为主。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129545.html