2. 特征缺失基础概念:缺失值的定义、类型及其对风控模型的影响
在风控数据监控中,特征缺失是最常见的数据质量问题之一。缺失值不仅会降低样本的有效性,更会引入系统性偏差,导致模型评分失真、决策阈值偏移。理解缺失值的定义、分类机制及其对模型的影响,是构建稳健缺失巡检体系的前提。
2.1 缺失值的定义与表现形式
缺失值(Missing Value)指在数据采集、传输或存储过程中,某个特征字段未能记录有效观测值。在风控场景中,缺失值通常表现为以下几种形式:
| 表现形式 | 典型示例 | 风控场景常见原因 |
|---|---|---|
| 空值(NULL/NaN) | 用户收入字段为 NULL | 用户未填写、接口未返回 |
| 占位符 | 年龄字段为 -1 或 9999 | 系统默认填充、异常值标记 |
| 空字符串 | 职业字段为 "" | 前端表单未校验、ETL 截断 |
| 隐式缺失 | 某月无交易记录 | 用户未发生行为、数据未生成 |
巡检要点: 风控流水线中,占位符(如 -1、9999)常被误认为有效值。缺失巡检的第一步是建立“缺失值字典”,将业务约定的占位符统一映射为缺失标记。
2.2 缺失机制的三重分类:MCAR、MAR、MNAR
缺失机制决定了缺失值是否可以被忽略,以及如何处理才能最小化偏差。统计学家 Rubin(1976)将缺失机制分为三类,这是所有缺失值处理策略的理论基石。
核心概念: 缺失机制描述的是“缺失状态”与“观测数据”及“未观测数据”之间的依赖关系,而非缺失值本身的大小。
2.2.1 MCAR(完全随机缺失)
缺失完全独立于所有变量(包括观测值和缺失值本身)。缺失与否就像抛硬币,与数据内容无关。
- 示例: 风控系统因网络抖动随机丢失了 2% 的征信查询记录。
- 风控影响: 仅损失样本量,不引入偏差。可直接删除缺失样本或使用均值填充。
- 判断难度: 极低。通常可通过分组均值检验(Little's MCAR test)辅助验证。
2.2.2 MAR(随机缺失)
缺失依赖于其他已观测到的变量,但与缺失变量本身的值无关。这是风控场景中最常见的缺失类型。
- 示例: 高收入用户(已观测)更倾向于不填写“其他负债”字段(缺失),但该字段的缺失与否与“其他负债”的真实值无关。
- 风控影响: 若忽略缺失机制,直接删除样本会导致选择偏差。需使用基于观测变量的插补方法(如回归插补、MICE)。
- 判断难度: 中等。可通过逻辑回归检验缺失指示变量与其他观测变量的相关性。
2.2.3 MNAR(非随机缺失)
缺失依赖于缺失变量本身的值。即使观测到所有其他变量,也无法完全解释缺失原因。这是最棘手、最难处理的缺失类型。
- 示例: 逾期金额越高的用户,越可能故意不提供“当前逾期金额”字段(缺失)。缺失本身就是一个强风险信号。
- 风控影响: 直接删除或简单插补都会严重扭曲模型。通常需要引入外部信息或构建“缺失指示变量”作为新特征。
- 判断难度: 极高。无法从数据内部严格证明,需依赖业务逻辑和敏感性分析。
2.3 缺失值对风控模型的具体影响
缺失值对风控模型的影响是多维度的,从数据质量到模型输出,层层传导。下表总结了不同缺失机制下模型可能遭受的损害:
| 影响维度 | MCAR 场景 | MAR 场景 | MNAR 场景 |
|---|---|---|---|
| 样本代表性 | 无偏,仅样本量减少 | 产生选择偏差,子群体代表性下降 | 严重偏差,缺失群体与完整群体本质不同 |
| 模型参数估计 | 无偏,但方差增大 | 有偏估计,系数不稳定 | 严重有偏,模型失效 |
| 特征重要性 | 基本不变 | 缺失相关特征重要性被低估 | 缺失特征重要性被高估或低估 |
| 模型泛化能力 | 轻微下降 | 在缺失模式不同的新样本上表现差 | 几乎无法泛化到真实分布 |
| 评分分布漂移 | 无系统性漂移 | 评分分布随缺失率变化而偏移 | 评分分布严重扭曲,阈值失效 |
风控实战警示: 在贷前审批模型中,MNAR 类型的缺失(如用户故意隐藏负债信息)往往是最强的风险信号之一。简单填充会抹杀这一信号,导致模型对高风险用户“失明”。建议对 MNAR 特征单独构建“缺失指示变量”,并保留缺失状态作为独立分支。
2.4 缺失模式的可视化与巡检切入点
在实际巡检中,我们通常通过缺失模式矩阵(Missing Pattern Matrix)来快速识别缺失机制。以下是一个简化的缺失模式示例:
2.5 缺失巡检的核心指标
在风控特征缺失巡检中,以下三个指标是每日监控的必选项:
- 缺失率(Missing Rate): 单个特征缺失样本数 / 总样本数。阈值通常设为 5% ~ 20%,超过需告警。
- 缺失模式占比: 特定缺失组合(如“收入+负债”同时缺失)的样本占比。用于发现系统性缺失。
- 缺失与目标变量关联度: 计算缺失组与完整组之间的坏账率差异。若差异显著(如缺失组坏账率高出 3%),则提示 MNAR 可能。
实战代码片段: 使用 Python 快速计算缺失率与坏账率差异
import pandas as pd
# 假设 df 包含特征 'income' 和目标 'is_bad'
df['income_missing'] = df['income'].isna().astype(int)
missing_rate = df['income_missing'].mean()
bad_rate_missing = df[df['income_missing']==1]['is_bad'].mean()
bad_rate_observed = df[df['income_missing']==0]['is_bad'].mean()
print(f"缺失率: {missing_rate:.2%}")
print(f"缺失组坏账率: {bad_rate_missing:.2%}")
print(f"完整组坏账率: {bad_rate_observed:.2%}")
print(f"差异: {(bad_rate_missing - bad_rate_observed):.2%}")
2.6 本章小结
缺失值不是简单的“数据空白”,而是携带业务含义的信息载体。MCAR、MAR、MNAR 三种机制决定了缺失值对模型的影响程度和处理方式。在风控场景中,MNAR 类型的缺失往往是最需要警惕的——它本身就是风险信号。建立缺失巡检体系的第一步,就是让监控系统能够自动识别缺失模式、计算缺失率与目标变量的关联度,并触发相应的告警与处理策略。