来源:https://blog.csdn.net/baidu_39413110/article/details/125119385
风控建模十:传统建模方法存在的问题探讨及改进方法探索
一、传统建模方法可能存在的问题
1.1 传统评分卡体现的是相关而非因果
1.2 不同客群混杂建模,一个标准评判所有
1.3 简单二分类难以刻画不同的逾期原因
1.4 变量的使用仅仅是数字拟合,缺乏背景的考虑
1.5 没有充分考虑变量的历史变化
二、改进性建模方法探索
2.1 分箱组合赋予变量场景
2.2 变量切割寻找新的IV增益
2.3 计算客户与其所在群体的差异特征
2.4 变量交叉分箱训练逻辑回归
2.5 分客群建模
2.6 尾部强化,建立坏人模型
2.7 同类变量融合大变量建模
传统风控建模方法一般流程如下:选择一段时间内有用款表现的客群,根据固定窗口内是否曾有超过N天逾期来定义好坏客户,然后建立一个二分类模型(传统机构主流选择为逻辑回归评分卡模型),根据模型预测出的客户逾期的概率来对客群进行排序,并从业务收益平衡的角度出发,从排序中确定通过/决绝分割点,以此来进行决策。当然实际业务中还会涉及更多细节,也会根据业务场景的不同而形成流程的差异。但核心都是基于几个变量,使用机器学习的手段,对过去一段时间的样本进行数字拟合,找到区分好坏人的规律,并将这个规律用到未来决策中。这无疑是一种简单、高效的数字化风控手段,也许更是在当前的实际情况下,能够找到的最优解,但毫无疑问的是,这种建模方法并非完美的,我们习惯于应用这种简单高效的方式解决问题的同时,也应该不断思考这种方法有什么弊端,能否通过某种方式去改善它,并最终达到提高模型区分度的目的。
所以本篇主要和大家分享一下对当前建模方法可能存在问题的一些思考,这里很多观点也只是想法,没有严谨的理论论证,也不一定正确,最多是带给大家一些启发。方法探索方面也只是初级的尝试,没有显著效果,只能为大家提供前车之鉴,避免类似尝试的重蹈覆辙。
一、传统建模方法可能存在的问题
1.1 传统评分卡体现的是相关而非因果
传统评分卡,包括现在绝大部分的机器学习模型,反映的都是特征和目标之间的相关性关系,而非真正体现事物内在逻辑的因果关系。就像图中所举例,用树叶是否变绿来预测蚊子是否会变多,在特定环境下,是非常有效的。但基于常识我们就非常清楚,树叶是否变绿跟蚊子变多没有什么直接关系,两者其实是夏天到了,温度上升所导致的不同结果。我们现实业务中使用的模型中,大多都是用树叶变绿来预测蚊子变多这样的内在逻辑,当然不能说它错,因为这也是一种规律的发现总结,是可以很好地进行应用的。但问题就是一旦应用的环境变了,比如到了只有松树的地方,树叶一年四季都是绿的,这个预测就失效了。对于这个问题,在特定场景下,是有理论上的解决办法的,即因果正则化评分卡,可以一定程度上让评分卡模型体现出变量和目标之间的因果关系,具体内容可以参见博客:因果模型五:用因果的思想优化风控模型——因果正则化评分卡模型。
1.2 不同客群混杂建模,一个标准评判所有
建模要基于大数据,但数据越大,就越包罗万象,鱼龙混杂。适用于大部分群体的规则能否更好地适用于小部分个体呢?这也是建模中的一个问题。我们看图中所举的例字:一个简化版的评分卡模型,用学历和月工资来衡量客户的资质。学历、工资这样两个变量可以说在大部分信贷场景中都是非常优质的变量,学历越高、工资越高代表客户越优质也非常合理,但这都有应用前提,就是衡量的是普通上班族。假如遇到企业主,学历和工资就没那么重要了,就像谁也不会用学历、工资去评判老干妈一样,没上过小学、不领固定工资又怎样,在这个场景下,企业的盈利能力、发展前景更重要。这里所举例子有些极端,但能说明建模过程中普遍存在的问题:具备不同性质的客群,放在一起建模,用同一标准去评判,多多少少有失偏颇。
1.3 简单二分类难以刻画不同的逾期原因
建模时,目标变量的选定,往往是根据客户在固定窗口内的逾期表现,简单地二分类为好客户和坏客户。这种做法简单、高效,说起来也合理,虽然逾期原因各不相同,但我们建模的目的就是要把会产生逾期的人拦截下来,所以建模时,就铆定是否会逾期,就是结果导向下,最直接的问题解决方式。问题就出在,识别不同类型逾期客户的方式是不一样的,比如有的客户纯属骗贷,拿到钱就没想过要还;而有的客户还了几期,后面因为能力不足导致资金链断裂,确实还不上了,这两种逾期客户行为特征就完全不一样。前者更适合用一些欺诈标签去识别,而后者则需要重点考察收入稳定性。如果不做细分,全混在一起当做坏样本,可能就会导致欺诈标签和收入稳定性这两个变量都不能发挥出他们原本的区分力。
另一方面,有些客户逾期并非主观意愿导致,而是突发意外,比如突然重病、车祸、意外死亡、疫情等等原因,这些客户大概率在借款之前,都表现得与好客户无异。如果将这些客户当做坏客户,无疑于向样本中增加了噪音,一定程度上会影响模型效果。所以,精细化管理、运营客户就要基于对客户细致化的了解,对于贷后逾期原因的充分调研和分类,对反哺前期风控有很大帮助。
1.4 变量的使用仅仅是数字拟合,缺乏背景的考虑
逻辑回归评分卡的建模流程通常是这样的:先把每个变量做分箱并WOE转换,然后挑选区分度强的入模去拟合一个逻辑回归模型,其间还会通过去除变量相关性和共线性等步骤来使每个变量尽量独立不相干,以使得最终模型中的每个变量的系数都是正的。通过这样一个过程训练的评分卡,虽然会有非常好的可解释性,但却也遏制了变量间相互作用的贡献(虽然不可能完全消除)。这样做其实是强行让逻辑回归模型看起来像是一个多项评分相加的评分卡,实际却压抑了逻辑回归评分卡的区分力潜能。这样做应该也只是为了业务人员便于理解机器学习模型而做出的妥协。为什么这样说呢,这就涉及到一个基本问题,逻辑回归虽然是广义线性的回归模型,那它体现的就完全是每个单变量间的线性加和关系吗?当然不是。这么说有什么依据吗?依据有两点,一、通常来讲,单变量IV值的排序总是和入模变量的重要性排序有很大差异,有些单独来看区分力强的变量,在模型里面不一定最重要,而有些区分度不是特别强的变量反而在模型中起着至关重要的作用;二、如果我们不进行严格的相关性和共线性变量筛选,就经常会发现逻辑回归中变量的系数出现负值,按理说做过WOE的变量都是和y呈正相关关系,在单纯的线性关系中就不可能出现负系数。那出现了负系数就是共线性的原因,即变量间不是孤立变化的。其实这一点从逻辑回归的拟合方式上也能够看出来,它拟合的目标从来都是联合概率密度函数,即为了找到全部样本情况下的最优解,那不管变量间是孤立的还是相互作用的关系,我都要通过最后这几个系数和截距把它尽可能地表达出来。所以,逻辑回归并非就是一个单纯的评分相加规则,没有那么简单,只是为了解释性,而在应用上强行简化了它。
说回我们的主题,既然大家把逻辑回归当做一个简单的评分相加规则模型。那它的应用就是有问题的,它对变量的应用就不能够反映变量背后的场景,比如图中所举例子,单看工资这一项,两个客户分别是七千和一万五,显然一万五这个大概率是优质客户。但当我们把工资背后的场景结合起来看时,情况就不一样了:张某的这七千工资是在扬州做公务员挣的工资,而且张某年纪轻轻,行为良好;李某这一万五的工资确实在上海辛苦送外卖赚来的,一把年纪了还有一些不良的行为瑕疵。这样一看,工资背后的意义就显现了,常识也告诉我们张某才是优质客户,虽然他工资低。
1.5 没有充分考虑变量的历史变化
我们建模时所使用的变量大多反映的都是申请时刻的切片状态,基本不能够详细刻画变量的历史变化特征,这就比较容易导致对坏客户的漏判。就像犯罪嫌疑人不可能一直高调作案,大部分时间都是隐匿状态,而侦探应该做的就是追溯嫌疑人历史上的所有案情,用历史案情状况来判断凶手。同理,我们在训练模型鉴别好坏客户的时候,也应该充分考虑到变量的历史变化状态,尽可能地把客户的历史案底都翻出来。
另一方面,客户申请时刻的切片状态反映的信息往往是片面的,比如两个客户切片状态看是一样的,但背后的变化可能完全不同,一个可能是历史都在高位振荡,而突然在申请时刻下降至低位,而另一个客户可能是历史都在低位振荡,而申请时骤然增加,这就代表了两种截然不同的行为特征,不能一概而论,必须要用历史的眼光看问题。虽然我们训练模型使用的变量中会有一些诸如变化趋势、过去一年最大值、最近6个月均值等一定程度上反映历史变化的变量,但并不充分,历史变化所蕴含的信息仍然有待更深入地挖掘。有一个python自动化特征衍生工具Tsfresh可以帮助我们发掘更多变量的历史变化特征,关于tsfresh的介绍可以参看风控建模九:一些特征工程方法及自动化工具小结。
以上提到的这些问题,可能是导致模型效果不尽如人意,模型不能够持续稳定有效的部分原因。下面我们将针对以上问题,在一个真实业务样本上,进行一些改进方法实验。
二、改进性建模方法探索
2.1 分箱组合赋予变量场景
针对评分卡模型对变量的使用是孤立的数字拟合这个问题,我们提出一种想法,能不能通过变量之间的交叉组合来赋予变量场景呢。比如说,对于年龄和婚姻状态两个变量,大龄离异客群其实没有特别的异常,但对于年纪轻轻就离异的人,就显得非常不靠谱。基于这种考虑,我们尝试了每个变量之间分箱并交叉组合,并将覆盖一定客群数量,具有一定区分度的组合用独热编码的方式表示出来,测试这部分新衍生变量的效果,具体衍生过程如下图:
那效果如何呢?我们采用的测试方案为:将新衍生的这些变量单独拿出来训练一个子模型,然后把子模型打分当做一个变量融入主模型中,比较不加子模型分的主模型效果,和加入子模型分的主模型效果。之所以这样做是考虑到衍生变量大多覆盖度较低,用一个机器学习模型先融合成一个强变量,才能更大地发挥它的效力。这样的测试方案的效果如上图,我们分别尝试了逻辑回归和LGBM两种模型,可以看到,效果根本没有提升,甚至还有稍许下降。
2.2 变量切割寻找新的IV增益
这种思路是基于上图中年龄和住房状态交叉的启发,住房状态这个变量整体上没有什么区分度,但用年龄30岁一切割,发现30岁以下的客群在不同住房状态上就展现出了很强的区分力,基于此,我们的想法是遍历所有变量,分箱后进行切割,找出切割后IV值相对整体IV值有增益的切割方式,并把切割后的变量原始值存下来,其它地方填充为空,生成一个新变量(如图中性别和年龄的交叉所示)。
效果的测试方式同样如上个方案一样,先把衍生变量用模型融合成一个综合评分,再放到主模型中看效果增益。结果上来看,对于LGBM模型,效果没有任何提升,但对于逻辑回归模型,效果倒是有1-2个点的提升。但值得注意的是,这1-2个点的提升基本上不是来自于衍生变量带来的新的信息增益,更多的是因为融合了一个机器学习模型的评分,从而和单纯训练一个逻辑回归相比,代入了更多的变量和一些非线性关系,这才导致了效果的稍许增强。
2.3 计算客户与其所在群体的差异特征
就如我们在第一部分的案例四中提到的,仅仅孤立地看工资的高低不能说明什么问题。北京地区的5000块钱和四线城市的5000块钱代表截然不同的含义,工资只有放在同一背景下才具有比较意义,所以我们可以通过计算客户与其所在群体的差异特征,来达到把变量放诸相同背景下作比较的目的。就像下图所举的例子,我们可以先分别计算北京、镇江两个城市的收入均值,然后把相同城市的客户的收入减去该城市的收入均值,把这种各个城市的差值做为一个新的衍生变量。相同的道理,我们还可以计算与中位数、最大值、最小值的差异及差异比。同样可以将所有的数值型变量在其它变量所提供的各个场景下做这种衍生。
同样我们以所有衍生变量单独训练子模型(LGBM模型),并将子模型分融合进入主模型的方式来看整体的效果增益,这里只评测了逻辑回归做主模型的效果。可以看到,整体效果提升也只有1-3个点,没有明显的效果增益,而且这种效果增益也有很大部分来自融合了更多变量。
2.4 变量交叉分箱训练逻辑回归
这种尝试方案也是基于变量交叉赋予场景的考虑,并同时兼顾了将更多变量放入模型的考量。这种方案为先训练一个逻辑回归模型,把入模的每一个变量都拿出来,在未入模的变量中选择一个与其进行交叉,形成一个新的带场景的大变量,再用大变量建模,比如年龄入模了,我们可以把年龄拿出来,与未入模的职业进行交叉,之前年龄分6箱换算WOE,现在交叉后大变量分36箱做WOE转换,再所有这样的大变量重新拟合训练一个新的逻辑回归。
最终我们可以看到,这样做的效果不升反降。这样的结果也是可以解释的,在逻辑回归训练的时候,那些没有用的变量,即冗余的信息就已经被逻辑回归自动筛选掉了,当我们以某种方式,强行再把被筛选掉的冗余信息再拿回来,模型效果也难有提升,反而可能破坏了之前的全局最优结构。
2.5 分客群建模
不同客群具备不同的行为特征,模型应该以不同的标准来衡量不同的客群。道理是这样,但应该根据哪种属性区分客群是个不太容易解决的问题。我们这里尝试了三种分客群的方案:根据性别、学历、收入和学历的交叉组合进行客群区分,效果分别如下:
首先根据性别区分客群进行建模,之所以用性别区分,因为男女的行为偏好、思路想法、理性程度都有很大区别,而且绝大部分信贷场景中,男女客群的风险表现也很不一样,一般都是女性明显好于男性。在这个思路下,分别建立男性模型、女性模型(逻辑回归建模方法),然后分别和整体客群模型在男性、女性上的打分进行效果对比。区分度上来看可以说基本一样,并不会因为客群的精细划分而有明显的效果提升。
再来看用学历区分客群建模,这里按学历高低分了四个客群,和整体客群模型相比,效果非但没有提升,反而都有不同程度的下降,尤其是客群数量最少的硕士人群,模型过拟合明显,验证集效果相比整体有明显下降。
第三种方式,我们按照收入和学历的交叉矩阵来进行客群划分,根据整体坏账水平把整个客群分为了三组,从三组客群模型和整体模型的效果对比可以看到,分客群建模效果和整体模型差不多,客群三仍然因为样本较少的原因,出现了过拟合现象,导致验证集效果衰减明显。这明显暴露了分客群建模的一个弊端,就是会因为个别客群样本较少而导致模型不易拟合。从这三个建模方案来看,单纯以特征分客群建模并不能带来效果提升,反而将样本整合到一起,以更充足的样本去训练模型,效果更加稳定。
但这也不能完全否定分客群建模的方法,也要针对不同的业务场景做具体分析,比如以下这几种业务场景,分客群就比较有意义:一因为征信覆盖不同,导致变量分箱呈现出相反的趋势;二、企业主、上班族衡量维度大不相同;三、有房客群、无房客群抗风险能力不同导致风险变化不同。具体分析可以看这篇博客:https://zhuanlan.zhihu.com/p/484723358?utm_source=wechat_session&utm_medium=social&utm_oi=1059854473719164928&utm_content=group1_article&utm_campaign=shareopn
2.6 尾部强化,建立坏人模型
这种建模尝试的想法是针对尾部坏客户做进一步细化学习,增强模型对坏人的设别精准度。尝试方案为先建立一个主模型,将主模型打分排序的后五箱样本单独拿出来,建立一个进一步细化识别坏客户的模型,最后用主模型和坏客户模型的交叉矩阵做决策和效果评估。为了在统一标准下比较交叉矩阵效果和只用主模型单独决策的效果,我们将交叉矩阵方格从低到高排序,然后将主模型打分从低到高排序后,按与交叉矩阵格子相同的人数进行切割,对比结果如上图中右表格所示,交叉矩阵结果在尾部的识别能力只能说比单独用主模型稍微提高了一点,未见显著提升。
2.7 同类变量融合大变量建模
建模过程中,我们经常会需要处理大批量的相关性很高的同性质变量。通常的处理方式是在这批同质变量中选出一个最优变量,然后删除其它变量。问题是,即便这批变量相关性再高,也不会完全一样,也就是说,其它变量也是多多少少有不同的信息在里面的,那能不能通过某种方式,把这些信息都整合在一起放入模型呢?我们根据这种想法,尝试了一种融合大变量的方案。
具体来说就是首先根据变量相关性矩阵,确定哪些变量属于同性质变量群。整个变量池里可以分出多少同性质变量群。(实现方式可以参考博客风控建模六:变量相关性分析及筛选方法)。然后将同性质变量单独拿出来,训练一个该类变量的机器学习子模型,并把模型打分作为该类变量组合成的一个大变量。最后把各类大变量和剩余的变量放在一起,建立一个融合模型。效果如下图右边表格所示,这样做整体上效果有点提升,相比于直接建立一个模型KS提升了1-2个点。当然也不能排除是机器学习子模型融合了更多变量和非线性关系进来导致的。
以上是针对模型可能存在的问题,我们所做的一些简单尝试。结果基本全部都是阴性的。但相类似的思路在业界也普遍存在,也肯定针对不同的场景做了很多尝试。我们不能简单断定这样做完全没有意义,可能适配不同的场景,进行一些方法上的改进,也许能达到一定的效果提升。但是从建模方法上来讲,瓶颈还是存在的。本文供参考,或做前车之鉴,或作思路启发。只能继续不断探索。
————————————————
版权声明:本文为CSDN博主「白白的一团团」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_39413110/article/details/125119385