作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在工业界与学术界的应用。知乎专栏:R语言数据挖掘 邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
近受到:
吊车尾:第三届融360天机-智能金融算法挑战赛多场景金融赛题--方案吊车尾:第三届融360天机-智能金融算法挑战赛拒绝推断赛题--TOP2方案的启发,准备探索拒绝推断的问题。这个比赛当初我关注过,感觉挺有意思的,但是当时没有时间和精力去求索。随着近日对评分卡更加深入的了解,这些问题也显得越来越值得挖掘。尽管依旧不是很有时间,但是如果一天抽一点时间来求索,后应该还是有不错的收获。
首先我们来定义信用评分卡的拒绝推断问题,为了节省时间,我们直接援引原始赛题(第三届融360天机智能金融算法挑战赛):
############赛题背景描述##开始
2016年1月,机构A通过自建风控模型开始放贷,初期获得了良好的收益。随着时间的推移,机构A发现在样本通过率5%不变的前提下,机构逾期率由2016年1月的5%逐步升至2017年7月的15%,大量坏账导致机构A由盈利陷入亏损境地。公司模型人员仔细检查模型,发现其在训练集和测试集上都表现很好,并没有任何异常,百思不得其解。
在金融信贷场景中,放款机构会通过模型评分筛选用户,评分较好的用户可以获得放款,评分较差的用户直接被拒绝,机构只能获得放款用户样本的好坏标签,对于大量拒绝用户的还款情况无法获得。随着时间的推移,机构手中的训练样本都是“评分较好”的通过用户,而没有“评分较差”的拒绝用户,由此训练的模型在“评分较好”用户中表现越来越好,在“评分较差”用户中却无法得到任何验证。
但是,金融风控模型真实面对的客群却包括了“评分较差”的用户,模型在“评分较差”用户中无法得到验证,导致训练的模型越来越偏离实际情况,甚至通过了大量应该被拒绝的坏用户,致使大量坏账出现,直接带来巨大经济损失。
############赛题背景描述##结束
问题的实质:金融风控利用模型来筛选“良好”的用户,然后放款给他们,达到利益大化。但是随着时间的推移,模型越来越不好用,导致企业盈利能力下降。建模要有自变量和因变量,但是被决绝的用户,我们只有自变量,没有因变量(我们对这些用户是否违约,是不知道的,因为我们压根没有借款给他们)。这样一来,我们的用户的“多样性”就受到影响,也就是我们对用户的认识是有偏的,我们认为的用户就是我们初试模型认为值得放款的用户。随着时间的变化,用户的特点在变,不同的事件发生了,有的特征以前很重要,但是现在已经不那么重要了。有的特征以前不重要,但是突然非常显著地反映用户是否会违约的概率。而且新的规则层出不穷,想要一劳永逸一个模型吃很久,是不切实际的。因此我们要对模型进行修正,不仅仅是用放款用户的数据,还希望能够利用没有放款的真实的“用户”。我们看看是否能够通过修正模型,维持更高的预测效果。
这里先对数据进行一个基本描述:从2018.1.1到2018.5.1放款用户样本,信用评分top30%的样本给出每个样本是否逾期,后70%样本只有3000个给是否逾期。(约10万样本) 【见原始赛题第三届融360天机智能金融算法挑战赛】
10万行数据,具有这些记录的时间(loan_dt)、是否违约(label,1是违约,0是没有违约,NA为缺失)、是否借款(tag,0是认为没有违约放款了,1是认为违约了没放款)。f1,...,fn均为特征。
下面看看每个月的违约率:
开始3个月还能够维持在6.5%以下的违约率,到了4、5月份直接飙升到7.5%以上。
现在我们模拟一个实际的业务场景,并尝试去解决它:
Hope现在作为金融风控分析师就职于A金融公司,之前的风控模型在1月份违约率为6.5%,2月份调整之后达到了4.7%,可喜可贺。但是公司领导Kate居安思危,认为目前市场的波动很大,用户的心理和行为的变化很敏感,因此要再次更新模型。Kate让Hope就1、2月份的所有数据(包括放款的数据和未放款的数据),对放款规则进行更新,来获得更加好的效果。就在2月末3月初,Hope开始做这个模型,尝试保持甚至提高3月份的业绩,并对4、5月份的决策做出指导。
系列说明:工具主要是R语言,会用到scorecard/tidyverse/data.table等包。不过工具不重要,思路更加重要,欢迎在探索的过程中与各位大佬一起探索更好的思路。系列会慢慢持续连载,希望能够对金融业风控数据科学提供有价值的启示。