作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在工业界与学术界的应用。知乎专栏:R语言数据挖掘 邮箱:[email protected].欢迎合作交流。

相关连接:

HopeR:R语言信用评分卡:拒绝推断(1) 问题定义

HopeR:R语言信用评分卡:拒绝推断(2) 特征筛选A

HopeR:R语言信用评分卡:拒绝推断(3) 特征筛选B

前文提要:

Hope现在作为金融风控分析师就职于A金融公司,之前的风控模型在1月份违约率为6.5%,2月份调整之后达到了4.7%,可喜可贺。但是公司领导Kate居安思危,认为目前市场的波动很大,用户的心理和行为的变化很敏感,因此要再次更新模型。Kate让Hope就1、2月份的所有数据(包括放款的数据和未放款的数据),对放款规则进行更新,来获得更加好的效果。就在2月末3月初,Hope开始做这个模型,尝试保持甚至提高3月份的业绩,并对4、5月份的决策做出指导。

目前进度:

已经进行了基本的数据清理,并对变数进行筛选,构建最简单的LR模型。

尽管之前对缺失值进行了处理,主要就是整列删除。但是这个方法多有不妥,为什么?因为缺失值本身就包含著信息!在实际业务中,如果用问卷采集的数据,用户不愿意回答,其实也代表他对某一些信息存在著顾忌,这种能够直接反映用户心理的信息势必能够影响其违约的概率。同时,如果是主动去调查采集的一些信息,如果总是缺失,有可能是用户刻意隐藏的结果,这也能够表征其客观的财产状况和心理。因此,缺失即信息,直接剔除的非常可惜的,应该把缺失的情况考虑进来建模。与此同时,我们也考虑了更多的变数。

要对缺失值进行表征,需要进行特征工程。目前WOE编码手段给这个过程提供了巨大的便利(随手转一贴blog.csdn.net/u01342162),这个方法能够针对特征对因变数的影响方向和大小,进行再编码。这里要引入的一个特征工程技术是:分箱。我在HopeR:R语言信用评分卡:数据分箱(binning)曾经对此进行过讨论。因为我们要先做LR模型,因此对数据进行分箱是很有必要的。这里涉及的是一个我认为合理的前提假设:不同特征在不同的数值范围内对违约概率的影响是不同的。超过一定年龄之后,年龄的变化对违约率的影响就会减少。因此,利用分箱来做特征工程,就很有一点做「样条」(splines)的意思,或者称之为分段线性回归。

那么我们要与之前走不同的套路,这里还是用R语言的scorecard包。首先进行基本的变数筛选:

利用`var_filter`进行初筛之后,我们要进行WOE分箱,scorecard的woebin函数非常给力。

现在,我们再对这样的数值做共线性的变数筛选(具体演算法见HopeR:R语言信用评分卡:拒绝推断(3) 特征筛选B)。不过在此之前,我们还是用`var_filter`在进行一次筛选。

看一下结果:

这个特征数量比我们在之前直接清楚缺失值的列要多很多!这说明了,缺失值里面大有价值可挖。我们基于这个结果,然后再建立传统的LR模型。然后我们继续使用逐步回归,不过这么多变数依旧是非常耗时,肯定还是要用bigstep包的函数,而且还需要一点trick才能够快速生成模型。具体大家还是参照bigstep包的帮助文档,这里给出解决方案:

最后筛选出来的变数包括:

现在我们筛选出16个变数。做到这一步,如果在实际中,可能不是埋头继续做,而是先看看这些是什么。因为赛题没有提供,我们也不知道,但是其实这些应该是最能够反映客户是否违约的特征,16个也不算特别多,我们已经可以开始结合业务背景知识开始分析并且得到一些有意思的结论了。我们要考虑是否能够:

1、根据这些特征的共性,总结出导致用户违约的原因。根据这些本质原因,我们是否可以设计采集更加能够反映用户还贷能力和守信程度的特征?

2、这些特征,能不能更好地得到?有没有办法提高这些特征的精确度?

3、这些特征,我们在分箱的时候是如何分的?通过分箱的截断点,是不是可以看出我们在寻找潜在客户的时候,应该重点关注哪些对象(哪些年龄段、哪些收入范围的等)?

今天累了,先玩到这里,保存一下,有空继续。

下次任务:筛选得到的这些特征,以及它们所构造的规则,如何用来对2月份的数据进行验证?类失衡问题是不是要解决一下?


推荐阅读:
相关文章