共计 3132 个字符,预计需要花费 8 分钟才能阅读完成。
作者:余子娟,CDA L3 数据科学家学员 & CDA L2 持证人,专注于金额科技领域,为银行赋能,助力银行信用卡中心全生命周期经营问题。
身处互联网金融时代,信用无处不在。为对客户进行一个优质与否的评判,使用信用评分,对客户实行打分制成为当前风控领域的难点。而基于机器学习的信用评分卡则是其中关键的环节。
信用评分卡分为 A 卡(Application scorecard)、B 卡 (Behavior scorecard) 和 C 卡(Collection scorecard)。A 卡是申请评分卡,用于贷前审批阶段对借款申请人的量化评估;B 卡为行为评分卡,用于贷后管理,通过借款人的还款及交易行为,结合其他维度的数据预测用户是否会逾期;C 卡即催收评分卡,用于催收管理,在借款人当前还款状态为逾期的情况下,预测未来该笔贷款变为坏账的概率。
本文就带大家揭秘信用卡风控评分体系之行为评分卡是如何建立的?
客户信息涉及很多因素,因此敏感信息已在之前脱敏。
目标
通过某银行客户的个人基本资料、过去的信用数据及交易资料,依循评分卡建模的步骤,分析归纳出好客户和坏客户的特征,并建立一个客户是否会持续逾期的评分卡预测模型。
步骤
- 对客户交易数据结合还款情况进行数据处理;
- 使用机器学习构建 B 类评分卡,并对模型进行评价;
- 再由新样本集对评分卡进行测试,并输出验证结果。
数据
我使用了 Kaggle 的多个数据集,Kaggle 数据集链接:
https://www.kaggle.com/yuzijuan/behavior-scorecard
其中 m0_200411.txt 为训练集,m0_200412.txt 为测试集,TXN_DATA.TXT 为交易数据集,MccCode.csv 为交易码。
代码
我将本文涉及到的代码全部放在 github 项目集中。
https://github.com/ICBC-123/scorecard
环境和工具:
Jupyter notebook、Pandas、Numpy、woebin、var_filter、perf、scorecard、splitdf(后 5 个为自有评分卡程序)
数据处理
1. 训练集处理
首先对数据集中不同类别变量进行数据探索,查看了数据的分布情况。
训练集中 PAY_COND(缴费状态码)是可加工的变量,从 24 位缴费状态中可以获得:
- 每三个月的逾期次数,形成一个 6 位数的变量,例如 012121;
- 获取最大逾期月份,最小为 0,最大为 9;
- 获得客户的使用月份数和实动月份数
代码实现如下:
账单金额、缴费金额及归属额度是可加工的变量:
- 近 6 个月各月的额度使用率
- 近 6 个月各月的还贷比,由于还贷比分布不均,将头尾取 [-2,2] 作为截断。
2. 交易数据集处理
交易数据集共计 1886.8 万笔,有 8 个交易属性,可加工较多变量:
- 月均消费次数
- 月均消费金额
- 月均入账次数
- 月均入账金额
- 笔均消费金额
- 交易月份数
……
交易数据集中有 MccCode,可以和客户目标属性结合,得到客户高中低风险交易占比。
- 高风险交易占比
- 中风险交易占比
- 低风险交易占比
风险程度来源:先将训练集与交易数据按照 ID 匹配,求每个客户不同交易类别的交易数量和交易占比;再求得坏客户的交易数占总交易的占比为风险切分点,高于该占比 15% 的交易类别为高风险类别,低于该占比 15% 的为低风险类别;最后将各个风险类别对应的风险程度代入交易数据,求得每个客户高中低风险交易占比。
最终形成了基本特征、交易特征、信用卡特征及其衍生变量共计 53 个指标。
建立评分卡
依据根据 CRISM-DM 数据挖掘理论,设计模型建立步骤,通过数据检验、数据初筛、分箱及计算 WOE、IV 筛选,最终建模及评分卡。
数据检验
对已处理好的数据集进行数据检验,包括缺失程度、单变量检验、超多分类检验、异常值、空值填充及正负样本平衡检验。本案例中正负样本比为 1:3,由于是金融领域逾期类问题,现实中并不认为这个比例属于不平衡样本,一般样本比例小于 1:5,需要进行不平衡类问题处理。常用欠采样、过采样或混合采样来填充样本浓度,预测结果不可直接应用,排序之后可用顺序结果应用于实际。
分箱及计算 WOE
分箱其实是当前信用卡风险领域较为困难的操作,如何合理分箱是数据处理之外较难的话题。本案例的分类变量是按照将多个类别合并为一类分箱再计算 WOE 的,连续数据是有监督分箱,按照 CART 分类树最优分箱计算各变量的 WOE。随机选取 WOE 值查看如下:
可以看到逾期最大月份的 IV 值较高,坏样本在不同分类上的区隔较大;归属额度的 WOE 呈现明显的单调,表明这个变量对结果的贡献较大,变量越重要。
而从这四个变量可知,坏样本在不同分类上的区隔不大,WOE 值在水平线左右小幅度浮动,表明这个变量对结果的贡献不大,变量不算重要。
分箱代码如下:
建立评分卡
计算出 IV 值后,由于该模型变量较多,可以选择筛选掉 IV 小于 0.02 的变量,剩余 37 个变量输入模型。并将数据字典保存成文件,用于后续预测调用使用。
按照 7:3 生成训练集和测试集,计算出各个变量的 WOE 后用 WOE 值替换原始数据,并计算各个变量之间的相关性。
此处分别建立了逻辑回归、决策树、梯度提升树来评判模型效果。
可以看出三种模型效果均较好,就测试集的 KS 值而言,逻辑回归和梯度提升树较好,由于奥卡姆剃刀原理,当模型效果差别不大时,我们有理由选择复杂度较低,业务可解释性更强的模型即逻辑回归作为最终的输出模型,后续我们也会用验证集进行验证。将得到的模型保存,用于后续模型调用。
建立逻辑回归模型后,对模型稳定性进行了测试,得到 PSI 远小于 0.1,模型稳定性很好。
最终生成的评分卡部分截图如下:
效果评估及预测
然后将原测试集(m0_200412.txt)作为验证集,进行预测的流程图如下:
其中数据加工和数据验证与之前流程一致,重复操作即可。操作好后加载模型和验证集,调用已保存好的数据字典文件,将原数据转化为 WOE 值,若变量出现新值,用 0 替换原数据。
我此处仍然通过逻辑回归、决策树和梯度提升树三种模型来验证数据,效果如下图:
可以看到决策树的效果已经坍塌,而梯度提升树的效果不如逻辑回归。需要说明的是,根据业务逻辑,我们更关注的是真正逾期的客户有多少被我们预测出来了即召回率(Recall),本案例中召回率最高的仍是逻辑回归,因此得到:逻辑回归从业务理解难度、稳定性、训练集、测试集、验证集等多方面表现较优,最终选择逻辑回归为最终预测模型。
最终我们得到逻辑回归预测下的各个 ID 的预测结果。
结语
在金融领域,其实机器学习发展速度不快,当外界已经开始用高阶模型时,我们却还苦苦地应用逻辑回归来解决问题,有时候会担心自己所学是不是已经跟不上时代了。其实无需担忧,金融科技领域,机器学习的发展之路还较远,路漫漫其修远兮,吾将上下而求索。
如果大家有疑问,可以自己下载代码和数据集自行尝试。本身的分享不仅仅是为了分享,也是自我提升的方式之一,如有问题,还请包涵。
相关拓展:
CDA LEVEL 3 数据科学家精英培训是符合「CDA 数据分析师人才行业标准」最高等级准则的一套能够 将数据分析师(Data Analyst)培养为数据科学家(Data Scientist),具备专业性、科学性、高端 性、先进性的领袖级人才培养方案。该课程主要面向从业多年的、有技术基础的大数据及数据分析专 业人士、数据工程师等,为他们提供一个成为数据领袖的跳板。课程内容是在 CDA LEVEL 1 和 LEVEL 2 大纲的基础之上,进一步涉及更先进的技术、更系统的架构、更高效的管理,包含计算机科学技术(高性能),大数据架构设计,机器学习,深度学习,数据治理,项目管理等内容,让数据科学是技术的同时,也能成为艺术。
更多专业内容可移步:https://www.cda.cn/?seo-segme…