关于风控业务中特征缺失值的思考
Posted 卖山楂啦prss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于风控业务中特征缺失值的思考相关的知识,希望对你有一定的参考价值。
原文作者:过一点画一条直线(知乎ID)
知乎专栏:数据化风控
原文链接:https://zhuanlan.zhihu.com/p/149718442
业务背景
在搭建风控模型之前,我们都会进行数据挖掘,找到对业务更有价值的特征。在特征构建的过程中,即会生成正常的连续或离散值,也会生成0值、NULL值等。有些同学在对NULL值的处理过程中就会直接填充成0或者其他值(-999,999等之类的),但是在风控业务中,NULL值其实也是有业务含义的,有时候当特征值为NULL和为0时,它们所代表的含义是不同的。另外,在部署线上模型的时候,我们会调用各种接口(内部或者外部三方的数据接口),接口调用失败是较少出现的情况,但是当接口调用失败时,我们又是否做好了相应的填充或者处理逻辑,从而方便我们后续排查问题和回溯。
本文从业务含义和接口调用的角度的介绍一些关于特征缺失值处理的思考。
目录
Part 1. SQL中的COUNT和SUM
Part 2. 缺失值的业务含义
Part 3. 接口调用处理
Part 4. 总结
版权声明
参考资料
Part 1. SQL中的COUNT和SUM
相信SQL里面的COUNT和SUM函数大家都用过,特别是在构建简单的统计类特征时。下面 举几个SQL语句的例子。
1. SUM函数
SQL 1:
select sum(case when 条件1 then 1 end) as 变量1
from table
SQL 2:
select sum(case when 条件1 then 1 else 0 end) as 变量1
from table
很多人可能会认为 SQL 1 和 SQL 2 没有什么区别。确实,在大多数情况下这两个语句计算得到的变量1的值确实没有差异,但是在一些特殊情况下,他们计算得到的值还是会有差异的。
现在假设 table 中有10行数据,假设满足条件1的行数为5行,那么对于 SQL 1 和 SQL 2计算得到的值是为5。但是假设满足条件1的行数为0行,那么SQL 1 计算得到的值为 NULL , SQL 2 计算得到的值为0。
我们再把上面的SQL语句变化一下,把条件1放到WHERE语句里,如下 SQL 3,它计算得到的结果和 SQL 1是一样的。
SQL 3:
select sum(列1) as 变量1
from table
where 条件1
2. COUNT函数
还是上面的列子,我们来聊聊COUNT函数,如下:
SQL 4:
select count(case when 条件1 then 1 end) as 变量1
from table
SQL 5:
select count(1) as 变量1
from table
where 条件1
这两种 SQL 方法计算得到的值是相同的,当不存在满足条件1的行时,则计算值为0。
在计算变量的过程中习惯于用 SQL 1和 SQL 3语句的,那么变量就会存在缺失值(NULL),至于这种缺失是否合理,下面 进行说明。
假设我们现在要统计用户近6个月的网购消费金额和消费次数,现在用户A在近6个月内都没有进行过网购消费,但是在近1年内有过网购消费记录,那么我们希望得到的近6个月网购消费金额为0,近6个月网购消费次数为0。如果我们使用 SQL 1的形式,那么得到的值都是 NULL,如果我们使用 SQL 3的形式,把近6个月的限定条件放到 WHERE语句里,计算得到的值也都为 NULL。
因此在使用 SQL 语句的过程中,如果要计数的话更推荐使用 COUNT 函数,另外在进行 SUM 处理的情况下,尽量把限定条件放在 CASE WHEN 里,避免生成不必要的 NULL 值。
Part 2. 缺失值的业务含义
相信大家都使用过某盾的数据,我在这里问个问题,如果某个进件用户的近1个月多平台审贷次数为NULL,那么意味着什么 ?最容易想到的答案是:
- 该用户近1个月没有进行审贷
- 该用户是某盾白户
那还有没有其它可能呢 ?
其实,还有一种可能就是,该用户是一个多头借贷的老赖,已经被各平台拉黑(黑名单规则在准入前,避免三方数据调用浪费),从而多平台借贷次数为NULL。如何来判断是否为这种情况呢?我们可以结合该用户的历史总借贷平台数进行交叉分析,对于历史总借贷平台数高,近1个月借贷次数为NULL的用户,就有很大的可能是被各平台拉黑的高风险用户(貌似有点偏题了)。
如果该用户历史有过借贷,但是近1个月借贷次数为NULL,那么我们可以把它填充为0。如果该用户是个某盾白户,即某盾所有指标都为NULL,那么我们需要保留NULL,从而和0值区分开(目前某盾白户的客群质量也不好)。
通过上面 的分析,结合近1个月多平台审贷次数和历史总借贷平台数,我们可以把近1个月多平台审贷次数为NULL的人群分成:正常借贷需求用户、白户、被拉黑的高风险用户,在计算它们各自的好坏比时,应该会存在明显的差异。因此,NULL在不同的场景下具有不同的业务含义,某些情况下可以填充为0,某些情况下则表示的是某一类人群。
同理,当我们统计老客近N个月被拨打催收电话次数的时候,NULL和0所代表的业务含义也是不同的。
Part 3. 接口调用处理
我们在上线模型的时候基本很少会去考虑使用的三方数据接口调用失败的情况(实际过程中也确实不太会发生),那么发生这种情况会有什么危害呢 ?
还是上面 某盾调用的例子,假设某盾调用失败,那么返回值全为NULL,当这些变量传入模型时,则会认为该用户是个白户,进而给出授信和定价,这样可能就会出现误判,带来资损。
为了降低风险和流程的严谨性,我们还是应该针对接口可能存在的调用失败情况和开发同学进行约定返回相应的接口调用状态标签,或者对返回值进行填充(例如全部填充为-999999),那么我们可以在模型部署的过程中进行相应的配置,当发生这种情况时,挂起或者走降级方案,这样也有利于我们在后续分析的过程中对数据有更好的了解。
Part 4. 总结
在风控业务中,无论是数据挖掘过程,还是特征处理环节,对于特征值的填充一定要给与重视,特征的缺失值在某些场景下是有特定业务含义的,思考清楚这些变量的含义可能会给模型效果带来巨大的提升。
比较有用的评论
以上是关于关于风控业务中特征缺失值的思考的主要内容,如果未能解决你的问题,请参考以下文章