风控建模中的样本偏差与拒绝推断
风控业务背景
幸存者偏差(Survivorship Bias)是一个广泛存在的逻辑谬误。我们在进行统计的时候,可能会忽略样本的随机性和全面性,用局部样本代替了总体样本,对总体的描述出现偏差,从而得出错误的结论。
在风控建模中,样本偏差(Sample Bias)问题同样存在,这会导致模型参数估计不准确,从而影响对真实风险的判断。为了解决这一问题,拒绝推断(Reject Inference)应运而生。
本文尝试从样本偏差原因分析、拒绝推断概念、经典方法实施步骤、数学原理等维度系统论述。
目录
Part 1. 风控建模中的样本偏差
Part 2. 是否需要做拒绝推断?
Part 3. 拒绝推断的分类体系
Part 4. 拒绝推断经典方法:数据
Part 5. 拒绝推断经典方法:推断
Part 6. 如何验证拒绝推断的效果?
Part 7. 总结
致谢
版权声明
参考资料
Part 1. 风控建模中的样本偏差
在整个信贷全链路中,风控系统犹如一把筛子逐层过滤得到相对优质客户,最终决定是否放贷,如图1所示。其中,信贷审批过程一般包括反欺诈策略、政策性规则、信用审批策略、人工信用审核等环节。对于100%的全量申请订单,实际放贷订单可能只占10%,甚至更低,实际取决于各家放贷机构的风控策略。
图 1 - 信贷风控系统全链路
如图1所示,风控模型可能是基于只占全量申请用户的10%的放贷样本建立的。更严谨而言,只是放贷样本中的好坏样本(Known Good / Bad),需剔除不定(Indeterminate)和排斥样本(Exclusion)。
然而,模型最终上线可能会应用到不同环节,如额度层、定价层、支用层。不同环节的风控模型的定位一般都是违约概率(Probability of Default,PD)预测模型。那么差异是什么?由于不同阶段可用数据源、计算实时性要求、目标变量等因素的不同,导致模型设计上不尽相同。同时,额度阶段是在用户维度预测,而定价和申请阶段是在订单维度预测。
如果我们只用放贷样本建模,就会让模型出现估计偏差(bias)。例如,我们通常会拒绝多头借贷严重的客户,这就导致放贷样本中大多是多头借贷较少的客户。此时,我们利用放贷样本构建的模型在应用到全量申请样本上时,会导致什么后果呢?
由于存在“部分样本估计总体”的问题,对全量申请用户的风险估计就会不准确,通常会偏于乐观(风险概率预测偏低)。随着时间推移,训练的模型将越来越偏离实际情况,甚至通过了大量应该被拒绝的坏用户,致使出现大量坏账。为了降低坏账率,风控策略将进一步收紧,这又会导致放贷率难以提升。于是,风控系统就陷入了恶性循环♻️。
图 2 - 模型偏差导致的恶性循环
此时我们该采取什么办法来解决这一问题?这就引出了拒绝推断(Reject Inference)的范畴,其面向解决的问题是:
假设拒绝订单被放贷,那么这笔订单的贷后表现是good,还是bad?
我们进而将拒绝推断的好坏样本(Inferred Good / Bad)加入至建模样本中,用以丰富建模样本的多样性,从而缩小训练样本与总体之间的差异,如图3所示。
图 3 - 加入拒绝推断的评分卡开发流程
Part 2. 是否需要做拒绝推断
拒绝推断只是一个锦上添花的工作,由于只是推断(infer)并非真实(real),对模型带来的影响并不一定是正向的。因此,建议优先保证基于放贷样本构建的模型具有良好的排序性,再考虑拒绝推断进行优化。
在某些情况下,可能也并不需要开展拒绝推断。我们可以结合放贷率来进行定性分析,一般适用于放贷率适中的场景里。
- 如果放贷率很高(如90%+),这时就没必要做拒绝推断,样本偏差问题已经不明显。
- 如果放贷率很低(如5%左右),那么由于拒绝推断与真实贷后表现之间存在较大的差异,可能导致模型性能反而下降。
注意,这里的放贷率阈值仅供参考,实践中将根据业务实际情况而定。
在《利用Swap Set分析风控模型更替的影响》一文中,我们也曾提到过拒绝推断的场景:对于旧模型拒绝的客户,我们需要推断其好坏(贷后逾期表现)。
Part 3. 拒绝推断方法的分类体系
经典的拒绝推断方法从广义上可分为两大类:数据法(Data methods)和推断法(Inference methods)。
⭐️数据法:获取拒绝样本的其他表现数据。
方法一:接受本该拒绝(Reject Acceptance)
方法二:同生表现(Cohort Performance),又称为重新分类法(Reclassification)
方法三:拒绝原因(Reject Reason)
⭐️推断法:推断拒绝和放贷样本之间的差异,进而调整建模样本组成来构建模型。
方法一:展开法(Augmentation),又称为重新加权法(Reweighting)
方法二:重新加权法(Reweighting)
方法三:打包法(Parcelling),又称为外推法(Extrapolation)
方法四:迭代再分类法(Iterative Reclassification)
方法五:两阶段法(Two-stage),又称为双变量推断(Bivariate Inference)
Part 4. 拒绝推断经典方法:Data methods
方法一:接受本该拒绝(Reject Acceptance)
其思想是将部分本该被信用策略拒绝的订单,人工否决予以通过(可参考《信贷风控审批中的决策否决管理》)。当然,这批订单将会被打上标记,作为实验对象,保持观察贷后还款表现。这就相当于在正常放贷订单中安插入我们的间谍(spy) 。
考虑到坏账损失,我们一般也会事先上线一个用来兜底的风控模型,对拒绝订单进行预筛选,并不是随机通过。
该方法的优点在于拒绝订单与正常放贷订单的好坏定义将保持一致。但缺点也显而易见:
第一点,需承担坏账损失
如果信用评分模型对某笔订单给出了拒绝的建议,意味着这笔订单大概率会坏账。因此,否决信用评分模型决策,接受本该拒绝的订单,这会引入坏账损失。
假设接受2000笔本该拒绝的订单,其中1500笔实际贷后表现为good,500笔为bad。一笔good的订单可能带来收益是200元,而一笔bad的订单带来的损失是2000元。那么带来的期望损失将会是: 元。
但是,长远来看这是能提升模型并带来经济收益。因此,短期坏账损失与长期风控优化之间需要做权衡。
第二点,需提前规划调整⏰
如果是开发中长期PD模型,例如将bad定义为S6D30(前六期任意一期发生至少30天逾期),那么风控策略至少得提前7个月进行调整,才能让这批样本彻底进入表现期。
但现实中可能没有这种预见性。因此,当出现这种情况:只提前4个月才开始调整,目前还没有进入S6D30的表现期,那该怎么办?
一种解决方案是:可利用历史滚动率,预估从S3D30(前三期任意一期发生至少30天逾期)到S6D30的转化。
方法二:同生表现(Cohort Performance),又称为重新分类法(Reclassification)
该方法的思想是利用其他产品或贷款机构的表现数据来标注。操作步骤如下:
- step 1. 获取内外部数据:如果内部存在多个产品线,可以考虑其他产品上的贷后表现数据来代替;也可以利用外部征信数据,包括央行征信报告、芝麻分、第三方多头借贷数据、其他贷款机构贷后表现等。
- step 2. 数据清洗规整:数据质量检查、口径逻辑确认等。
- step 3. 拒绝用户标注:限定用户在本平台申请前后一段时间内(时效性),综合其他平台上用户信用记录,对用户进行好坏标注。
虽然感觉步骤描述非常简单,但在实践中,你就会发现存在几个棘手的问题 :
Q1. 外部数据的获取和成本问题 。
- 央行征信报告一般不对网贷平台开放调用,只能在银行体系使用;
- 芝麻分已经中止与部分网贷平台合作,只能在阿里内部使用(摘自《支付宝公告:芝麻信用分停止授权24家网贷平台》);
- 其他网贷平台逾期记录数据可能不愿意同步给第三方,原因有三:一是合规性要求;二是这样相当于提供来黑名单,可直接用来风控;三是该数据可能涉及公司内部信息。
Q2. 多源数据格式不统一问题。
- 不同数据源的口径逻辑、格式不一致,需要确认和清洗后方可使用。
Q3. bad标注相对容易,good定义不明确。
- 只要至少有N笔逾期记录,我们就可以将用户定义为bad。如何确定阈值N? 需要与放贷样本中的bad来佐证分析,以保证内外部bad定义尽可能一致。例如,取1k条放贷样本的bad,统计外部数据中对这批用户的逾期记录数分布,从而确定阈值N。
- 另一方面,哪怕几家外部征信数据都显示用户无逾期记录,我们也没有足够的信心将其标记为good。这可能只是数据获取不全而已,或者是白户。
Q4. 不同平台数据对bad的定义之间存在差异。
- 央行征信报告数据:征信花/黑是相对严重的bad定义,同时存在大量白户。
- 其他网贷平台逾期数据:由于不同网贷平台的产品利率、期限、催收力度等存在差异,造成逾期原因可能相差甚远。
- 外部数据的bad定义很难与内部的建模目标(如是否发生M3逾期)一致,这时可能引入噪声(也就是多种定义的Y)。
- 那么我们该怎么做? 一种解决方案:基于内外部数据在不同好坏定义下对同一批放贷样本交叉对比分析一致性。若一致性足够高(比如95%以上),那么就表明该外部数据可用。
图 4 - 内外部数据拒绝标注一致性分析矩阵
Q5. 建模样本是订单维度,外部拒绝标注是用户维度。
- 一个用户可能关联多笔订单,但不同订单的贷后表现存在差异。因此,风控建模一般将样本定义在订单维度,而非用户维度。
- 对于不同利率、期限、催收力度的多个产品的借款订单,借款人所表现出来的还款意愿存在差异。用户维度的bad,不代表在某个产品上的某笔订单的bad。
方法三:拒绝原因(Reject Reason)
在图1所示的信贷审批链路中,我们会记录每个环节的拒绝原因,尤其是人工信审部分。因此,我们可利用这些数据进行bad样本标注。
Part 5. 拒绝推断经典方法:Inference methods
为便于介绍Inference methods部分,统一约定以下符号:
变量部分:
- = 目标变量, = 特征向量
- :违约概率分数,简写为
- :正常概率分数,简写为
- :放贷概率分数,简写为
- :拒绝概率分数,简写为 模型。
图 5 - 硬截断法(Hard Cutoff)
模糊展开法的操作步骤为:
- step 1 模型。
图 6 - 模糊展开法(Fuzzy Augmentation)
方法二:重新加权法(Reweighting)
重新加权法并没有把拒绝样本加入建模,只是调整了放贷好坏样本的权重。操作步骤为:
图 7 - 重新加权法(Reweighting)
如图7所示,假设第5个分数段中有10个好样本和6个坏样本,那么每个好坏样本都被赋予230/16=14.4的权重,以此模拟出这个分数段有144个好人和86个坏人。
显然,该方法的假设是:在同一个分数段里,拒绝和放贷样本的好坏表现是相近的。
方法三:打包法(Parcelling),又称为外推法(Extrapolation)。
该方法的操作步骤如下:
- step 1. 构建
图 8 - 打包法(Parceling)
如图8所示,在第一个分箱中,放贷样本的
图 9 - 迭代再分类法 (Iterative Reclassification)
方法五:两阶段法(Two-stage),又称为双变量推断(Bivariate Inference)
实际信贷业务逻辑是:先有放款决策,才有好坏表现。因此,建模过程也考虑分为放款预测(AR模型)和好坏预测(KGB模型)两个阶段。用数学描述:
图 10 - 两阶段法(Two-stage)
我们先观察图10中的曲线变化趋势,再分析原因:
当 Part 6. 如何验证拒绝推断的效果?
在掌握了上述拒绝推断操作方法后,我们可能还是最关心:如何验证效果?
1. 坏账率比较(Bad Rate)
根据业务经验初步判断合理性,拒绝推断坏好比与放贷已知坏好比的倍数,通常在2到4之间。
2. 单变量分析(Univariate Analysis)
对入模变量分析WOE分箱的变化,主要检验逻辑的合理性。同时一般拒绝推断后IV将提升。
图 11 - 拒绝推断前后单变量IV的变化
3. 模型上线观察(AB Test)
所有的推断终归不是真实,实际上线测试才是检验效果的最可靠方法。我们可以设置以下AB测试:
- 部分尾号使⽤ 模型,部分尾号使⽤ 模型
- 将 设置在相同坏账率下
线上运行几个⽉后进⾏评估。之前经验表明,拒绝推断后可显著提升放贷率,降低坏账率。
Part 7. 总结
只根据放贷样本构建的风控模型往往偏于乐观,会将风险估计偏低,从而影响额度策略、风险定价、信贷审批等各个环节。针对拒绝推断这一命题,本文吸取了前人的优秀成果,主要创新点在于:
- 给出了系统完整的信贷风控链路,从样本拒绝分布上分析风控建模中出现样本偏差的原因。
- 介绍了一些经典的拒绝推断方法,并分析背后的数学原理,以及实践中可能存在的问题。
拒绝推断的主要意义在于希望修正建模样本和实际全量样本之间的差异,本质上是为了降低模型参数估计的偏差。
致谢
感谢参考资料的各位作者带给我的启发。本文尚有理解不当之处,欢迎指正。
风控建模中的样本偏差与拒绝推断相关推荐
- 风控建模中的IV和WOE
在风控建模中IV(信息价值)和WOE(证据权重)分别是变量筛选和变量转换中不可缺少的部分. 很多文章已经讨论过这两个变量,本文在吸收前人优秀成果的基础上,希望用通俗易懂的语言让大家快速理解这两 ...
- 特征编码在风控建模中的应用(上篇)—WOE是否可以提升集成算法效果?
序言: 在风控模型开流程中,使用的场景分别有A卡.B卡.C卡等模型,常规使用最多的就是逻辑回归算法.使用逻辑回归算法80%会使用的编码方式就是WOE编码,相信做模型的同学对这种编码方式非常熟悉. 做W ...
- 风控ML[16] | 风控建模中怎么做拒绝推断
00 Index 01 什么是拒绝推断? 02 为什么要做拒绝推断? 03 什么时候做拒绝推断? 04 做拒绝推断都有哪些方法? 05 验证拒绝推断效果的方式 06 总结一下
- 机器学习在信贷风控建模中的优势和挑战
今天,你AI了没? 关注:决策智能与机器学习,学点AI干货 在国内国外金融风控领域大致分为两个流派,其中一派为具有统计学背景的人,分布在银行.金融消费公司等传统的金融领域,偏好评分卡进行建模.另外一派 ...
- 如何浅显得理解风控模型中的特征筛选|附实操细节(全)
今天我们综合了星球同学的一些需求,给大家梳理了这样一篇风控建模中特征筛选,希望对所有的风控人员在模型开发上都有所启发. 本文,我们会跟大家介绍特征选择的内容,包括其中的重点问题跟注意的细节. 因为完整 ...
- 手把手系列|风控建模中共线性的影响和处理(上)
序言: 所谓的多重共线性是指一些自变量之间存在较强的线性关系.这种情况在实际应用中非常普遍,如研究高血压与年龄.吸烟年限.饮白酒年限等因素的关系,这些自变量通常是相关的. 如果当我们发现有多个变量存在 ...
- 迁移率 计算方法及用途 风控建模系列 02
迁移率 计算方法及用途 风控建模系列 02 在上一篇博客中,我们讲解了vintage分析的原理及方法(https://blog.csdn.net/weixin_44239904/article/det ...
- 风控建模一:好坏标签定义
风控建模一:好坏标签定义 引言 一.界定天数--收回率曲线 二.界定期数--vintage曲线 三.好坏定义的验证--滚动率分析 四.实际情况 引言 风控模型能够准确判别好坏的基本前提是我们精准定义了 ...
- vintage分析 风控建模系列 01
vintage分析 风控建模系列 01 在工作中发现,目前没有一个很好的系列帖子对风控建模中的各项细节做讲解,本人为一个金融科技公司的风控算法建模师,希望在此将风控建模的知识成体系.有深度.易吸收地分 ...
最新文章
- 9.2 图像类型(灰度图像、彩色图像、二值图像以及图像间的转换)
- Win平台使用cmake工具生成sln工程示例
- java单元测试总结
- 同步轨道进入过程_工业轨道运输车_液压升降型轨道平车的应用
- lua调用.so测试
- Boost::context模块callcc的jump_void测试程序
- 新手学习Java必需要知道的这些基本概念!
- Android权限不够问题
- STL容器-queue队列
- UNIX系统命令大全
- Microsoft Remote Desktop 10 - 微软官方免费远程桌面控制 Windows 的软件 APP
- shopnc linux im安装教程,shopnc编译安装IM服务器node.js
- 云澈找到了鸿蒙生死印了吗,逆天邪神:云澈攻打南神域的契机有了,不会太久,一个条件决定...
- 知识点滴- BC和BCE的区别
- 【Kafka笔记】5.Kafka 多线程消费消息
- 函数周期表丨值丨数学函数系列
- Vue-引入querystring模块获取url参数
- iPhone锁屏字体
- netbox与ewebeditor兼容问题
- App推广方式:怎样有效找渠道、引流
热门文章
- java 泛型集合 json_将泛型集合转换成分页json数据
- sketchup转stl_如何将.obj或.stl文件导入SketchUp的简便方法 - SketchUp自学
- 网课助手浏览器版怎么更新_MIUI版本更新动态:跨屏协作来袭(第57期)
- cakephp视图用php文件,CakePHP - 扩展视图( Extending Views)
- Java:Java和c的区别
- java中treemap释放_81.Java集合之TreeMap
- pic单片机内部时钟校准c语言,实例讲解PIC单片机的时钟设置
- 点云格式解读 PCD
- 整数转罗马数字 python
- Leetcode 45. 跳跃游戏 II (每日一题 20210922)