信用评分IV特征分层实战课 - 第4节

缺失值处理与异常值处理

做评分卡的人都知道一句话:垃圾进,垃圾出。数据里要是满是缺失和异常,后面算出来的 IV 再高也是骗人的。我刚开始做风控建模那会儿,接过一个信贷数据集,光缺失率就超过 40%,我当时天真地想「删掉不就完了」……结果样本量直接砍掉三分之一,模型压根儿不收敛。后来我学乖了——缺失值和异常值,不能无脑删,也不能不处理。

说白了,这一步是给特征做「体检」。你想想看,一个特征如果有一半的值都缺着,变量重要性再高也没用;一个特征如果尾巴上挂几个极端值,IV 可能被拉偏到离谱。所以这一章,咱们就聊聊怎么给这些「病人」对症下药。

缺失值与异常值处理决策流程 缺失值与异常值处理决策流程图 原始特征数据 是否存在缺失? 缺失处理:删除/填充/模型 无缺失,进入异常检测 是否存在异常值? 异常处理:截尾/分箱/单独类 无异常,保留原始值 输出清洗后特征 说明:缺失处理与异常处理应按顺序进行,先处理缺失再检测异常,避免因缺失值干扰异常判定。

一、缺失值处理

1.1 缺失类型:三种「病因」

处理之前,先要弄清楚数据为什么缺失。我一般把它分成三类:

类型含义例子处理策略
完全随机缺失缺失与任何变量无关录入时不小心漏填删除或简单填充
随机缺失缺失与其他观测变量有关高收入者更不愿透露收入模型填充或分组填充
非随机缺失缺失与缺失值本身有关坏客户故意不填联系人单独作为一类
一个小技巧: 在评分卡场景里,我习惯先看缺失率。如果某个特征的缺失率超过 70%,我会直接把它标记为「缺失指示变量」,然后剩下的值正常用。说白了,很多时候「是否缺失」本身就是一个强特征,尤其是在反欺诈场景中。

1.2 常见处理方法

我个人常用的方法有这几种,按优先级排:

  1. 直接删除 —— 缺失率很低(<5%)且样本量够大时,删掉无妨。但注意!测试集和验证集得跟着删,不能只在训练集删。
  2. 均值/中位数填充 —— 连续型变量用中位数更稳健,因为均值容易被异常值带偏。我在项目中试过,用中位数填充后的 IV 通常比用均值更稳定。
  3. 众数填充 —— 分类变量用众数。但要注意:如果众数占比太高,填充后可能让变量失去区分度,IV 会断崖式下跌。
  4. 模型预测填充 —— 用其他完整特征去预测缺失值。比如用随机森林或者 KNN。我建议只在缺失率 20%~50% 时用,否则容易过拟合。
  5. 单独作为一档 —— 这是评分卡最常用的方式。把缺失单独作为一个分箱,和其他值一起进入 WoE 编码。嗯,这里要注意:分箱后要保证缺失档有足够的样本,否则 WoE 会不稳定。
避坑指南: 我曾经在一个项目里用均值填充了「月收入」特征,结果 IV 从 0.35 掉到了 0.08。为什么?因为月收入分布严重右偏,均值被高收入客户拉高了,填充后低收入客户的值集体偏高,区分能力直接归零。从那以后,我对偏态变量一律用中位数。

1.3 缺失值对 IV 的影响

IV 计算需要每个分箱都有样本,如果一个特征缺失太多,分箱时会合并不足,导致 IV 方差极大。我一般建议:先填充缺失再分箱,还是先分箱再处理缺失?答案是「先分箱,再对缺失单独设一档」。因为分箱时缺失值不会干扰正常值的分箱边界,而且后续 WoE 编码可以保留「缺失」这个独特模式。

核心要点: 缺失值处理不是「一刀切」,要根据缺失类型、缺失率、变量业务含义来选方法。评分卡里最稳妥的做法是:先试试「缺失单独一档」,如果缺失档样本太少,再用中位数或模型填充。

二、异常值处理

2.1 什么叫「异常」?

异常值没有通用定义,得结合业务看。我记得有个信用卡交易数据集,单笔交易金额 100 万,对普通用户来说是异常,但对企业级客户可能就是正常。所以第一步是分客群。

常用的检测方法有:

  • IQR 法: 低于 Q1-1.5×IQR 或高于 Q3+1.5×IQR 的视为异常。简单粗暴,适合快速排查。
  • Z-score 法: 偏离均值 3 个标准差以上的视为异常。适合正态分布的数据。
  • 业务规则: 比如年龄超过 120 岁,或者收入为负数。这些业务上能直接定义的,优先用。
  • 模型法: 孤立森林、LOF 等。一般只对复杂场景才用。

2.2 处理方式:别让异常值「带偏」IV

异常值对 IV 的影响非常大——你想想看,如果某个分箱里混进去一两个极端值,WoE 可能直接从 0.5 跳到 2.0,IV 虚高。所以必须处理。我常用的手段:

方式适用场景操作注意
截尾(Winsorize)连续变量,异常值数量少将异常值替换为 99% 分位值或 1% 分位值不要截太狠,否则会丢失信息
分箱合并连续变量,异常值区域有业务含义把异常值单独设一个分箱,和正常值一起编码保证异常箱样本量 > 5% 总样本
单独类别分类变量,异常类别罕见聚合成「其他」类如果罕见类有强预测能力,慎合
不予处理异常值本身是模型重点(如欺诈)保留原值,靠模型自己去学IV 可能会被拉偏,需交叉验证

2.3 一个真实案例

我前年做某银行的分期贷款评分卡,「月还款额/月收入」这个比率(DTI)有个客户是 8.5,正常值都在 0~2 之间。如果不处理,这个特征 IV 算出来 0.45,看起来非常优秀。但我仔细一查,那 8.5 是因为收入字段填错了(漏了一个小数点)。后来我截尾到 99% 分位值 2.2,IV 回归到 0.12,反而更符合业务直觉。所以你看,异常值处理不能只看统计指标,一定要回去看原始数据。

个人习惯: 我每次做完异常值处理后,都会用箱线图扫一遍所有特征,确保没有「尾巴」上的极端点残留。处理完再算 IV,如果 IV 发生剧烈变化(比如从 0.3 跳到 0.01),那多半是处理方式有问题,得重新检查业务逻辑。

三、缺失与异常处理的「协同效应」

这两个步骤其实不是独立的。举个例子:你先用均值填充了缺失值,均值本身就被异常值影响,结果填充进来的值也是「带偏的」。所以我建议的顺序是:

  1. 先做异常值检测,但不要急着处理——只标记出来。
  2. 再处理缺失值(填充或单独分箱)。
  3. 最后根据标记截尾异常值。

这样做的好处是:缺失处理阶段不会引入异常污染,异常处理阶段也不会因为缺失值而误判。

注意: 如果在缺失处理阶段把异常值也「填充」了(比如用中位数填充,结果异常值被当成了缺失去补),那你连异常本身的信息都丢掉了。嗯,这个坑我踩过,现在每次都会先给缺失值和异常值分别打标记列。

好了,这一章的内容就到这里。我觉得处理缺失和异常,有点像做手术前的消毒步骤——看起来麻烦,但漏掉一步,整个模型都可能会感染。希望你能把这些方法记牢,在实际项目中用起来。