作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在工业界与学术界的应用。知乎专栏:R语言数据挖掘 邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
相关连接:
提要:
Hope现在作为金融风控分析师就职于A金融公司,之前的风控模型在1月份违约率为6.5%,2月份调整之后达到了4.7%,可喜可贺。但是公司领导Kate居安思危,认为目前市场的波动很大,用户的心理和行为的变化很敏感,因此要再次更新模型。Kate让Hope就1、2月份的所有数据(包括放款的数据和未放款的数据),对放款规则进行更新,来获得更加好的效果。就在2月末3月初,Hope开始做这个模型,尝试保持甚至提高3月份的业绩,并对4、5月份的决策做出指导。
目前进度:
对一月份的数据做了特征工程,并做了一个简单的逻辑回归模型。但是还没有进行验证。
让我们看看之前筛选好的特征:
下面,让我们用1月份的数据构建模型,并对2月份进行预测。
结果如下:
准确率95.06%,感觉还可以。“错杀”21个用户,但是同时也放了284个违约用户进来。
需要注意的是,我们看看Baseline是多少。
这是个什么意思?这就是如果我把所有人都判别为不会违约,就直接得到了95.3%的准确率!
不过仔细想想,我们用于验证的数据集,是已经经过规则筛选之后的用户,也就是公司决定给他们放贷的用户。玩了这么久我们还没有涉及拒绝推断,这些都是“接受推断”。至少我们可以看到,我们建立的模型对“接受”用户的判别能力已经与公司之前的模型没有太大差距(公司做这个模型的时候很可能就是按照这个思路来做的)。但是如果用这个模型来对所有的用户进行评价,究竟会有什么样的效果呢?这个就不得而知了。但是凭这些数据,说Hope的模型就比公司的差,是不可以的。也许Hope的模型在实际操作中会找到更多的合适的用户,从而带来丰厚的利润;不过也可以能接受了更多违约用户,带来损失。这取决于每个交易的盈亏期望。
我们这个模型跟公司的原模型有多大差距?我们来稍微试试看:
解释一下标签:是否违约(label,1是违约,0是没有违约,NA为缺失)、是否借款(tag,0是认为没有违约放款了,1是认为违约了没放款)。这样一来我们可以发现,我们的模型认为很多可以放款的客户,后都没有放款,这样的人数高达11914个。因为我们设置可以放款的阈值是0.5,其实这个阈值可以设得更加苛刻一些,从而通过“错杀”更多潜在用户来规避风险。
在实际应用中,不妨把相同分布的客户群体分为两份,进行一个AB测试。当然,这个测试是用真金白银在试,所以也不用五五分给两个模型来筛选用户。可以用稳健的模型来判断70~75%的用户(A模型),用稍微新的模型来测试25~30%的用户(B模型)。如果B模型效果比A要好很多,不妨增加B模型筛选用户的比例,甚至完全取代A模型。这里还有一个很有意思的问题,是“小出模样本”。也就是说,我们至少要用多少的样本量,才能够得到一个稳定有效的模型呢?如果能够求得这个样本量,我们就可以用低的成本来测试尽可能多的模型。这样,我们的模型组合就非常像一个投资组合,然后通过优化这个模型组合来实现利益大化。这个玩法我会放在后面再实现并测试。
今天就玩到这里,下一步的安排是:
验证交叉验证、bootstrap这些重采样方法究竟有没有用,有多大用处?对于类失衡问题,重采样方法能够起到什么效果?效果多大?