4. 缺失率统计:全局缺失率、字段缺失率、样本缺失率的计算与阈值设定
在金融风控场景中,特征缺失并非均匀分布。一个字段可能在整体上缺失率很低,但在某些高风险样本子集中却完全为空;反之,某个样本可能仅缺失少量字段,但恰好缺失了模型最关键的入模变量。因此,仅靠单一的“全局缺失率”无法定位问题。本章建立三级缺失率指标体系,并给出金融场景下的推荐阈值。
4.1 三级缺失率定义与计算公式
| 指标名称 | 计算口径 | 公式 | 适用场景 |
|---|---|---|---|
| 全局缺失率 | 整个数据集中所有单元格的缺失比例 | 缺失单元格总数 / (行数 × 列数) |
数据质量大盘监控,快速判断批次数据是否可用 |
| 字段缺失率 | 单个特征列中空值占比 | 该列空值数 / 总样本数 |
特征筛选、入模变量评估、数据源稳定性监控 |
| 样本缺失率 | 单个样本(客户/交易)中空值占比 | 该样本空值字段数 / 总字段数 |
样本质量评分、异常样本识别、拒绝推断预处理 |
金融场景关键认知: 全局缺失率低于 5% 不代表字段级安全。例如,授信额度字段缺失 2% 但恰好集中在欺诈样本中,就会严重破坏模型区分度。必须三级联动分析。
4.2 阈值设定原则与推荐值
阈值设定需结合业务容忍度、模型鲁棒性和数据成本。以下为风控建模常用基线:
- 字段缺失率阈值:
- 严格(建模用): < 5% —— 可直接填充或删除;5%–20% —— 需分析缺失机制(MCAR/MAR/MNAR);> 20% —— 建议剔除或构造缺失指示变量。
- 宽松(报表/监控用): < 30% 可保留,但必须做缺失值标记。
- 样本缺失率阈值:
- 正常样本: < 10% —— 常规填充即可。
- 预警样本: 10%–40% —— 需人工复核或降权。
- 高风险样本: > 40% —— 建议标记为“信息不足”并进入人工调查流程。
- 全局缺失率阈值:
- 日/周批次监控: < 3% 为正常;3%–8% 触发告警;> 8% 阻断自动建模流程。
实践建议: 在风控流水线中,将字段缺失率 > 20% 的特征自动移入“待观察区”,不参与主模型训练,但保留在宽表中用于回溯分析。
4.3 三级缺失率联动分析框架
下图展示了从全局到字段再到样本的逐层下钻路径,以及各层对应的处置动作:
4.4 快速计算实现(Python 参考代码)
以下代码片段可直接嵌入风控数据巡检脚本,输出三级缺失率并自动判定阈值等级:
import pandas as pd
import numpy as np
def missing_rate_audit(df: pd.DataFrame,
field_threshold_high=0.20,
sample_threshold_high=0.40):
"""
三级缺失率快速巡检
返回:全局缺失率、字段缺失率Series、样本缺失率Series、告警列表
"""
total_cells = df.shape[0] * df.shape[1]
missing_cells = df.isnull().sum().sum()
global_rate = missing_cells / total_cells
# 字段缺失率
field_missing = df.isnull().mean()
# 样本缺失率
sample_missing = df.isnull().mean(axis=1)
alerts = []
if global_rate > 0.03:
alerts.append(f"[告警] 全局缺失率 {global_rate:.2%} > 3%")
high_missing_fields = field_missing[field_missing > field_threshold_high].index.tolist()
if high_missing_fields:
alerts.append(f"[剔除建议] 字段缺失率 > {field_threshold_high:.0%} 的字段: {high_missing_fields}")
high_missing_samples = sample_missing[sample_missing > sample_threshold_high].index.tolist()
if high_missing_samples:
alerts.append(f"[高风险样本] 样本缺失率 > {sample_threshold_high:.0%} 的样本数: {len(high_missing_samples)}")
return {
'global_rate': global_rate,
'field_missing': field_missing,
'sample_missing': sample_missing,
'alerts': alerts,
'high_missing_fields': high_missing_fields,
'high_missing_samples': high_missing_samples
}
# 使用示例
# result = missing_rate_audit(loan_data)
# print(result['alerts'])
4.5 金融场景特殊注意事项
避坑指南:
- 零值 ≠ 缺失: 在收入、额度等字段中,0 可能是真实值(如无授信),不能直接视为缺失。
- 缺失率与时间窗口相关: 月初数据源延迟可能导致字段缺失率飙升,需与数据源SLA联动判断。
- 样本缺失率与拒绝推断: 被拒绝客户的样本缺失率通常偏高,直接删除会导致样本选择偏差,建议使用缺失指示变量。
- 阈值动态调整: 在模型监控期,若某字段缺失率从 2% 突增至 15%,即使未超过 20% 阈值也应触发告警。
4.6 缺失率报告模板(字段级)
下表为字段缺失率巡检的标准输出格式,可直接用于风控日报:
| 字段名称 | 缺失率 | 阈值判定 | 建议动作 |
|---|---|---|---|
| 授信额度 | 1.2% | ✅ 正常 | 均值填充 |
| 收入证明 | 18.5% | ⚠️ 预警 | 分析缺失机制,考虑增加第三方数据源 |
| 征信查询次数 | 35.0% | 🚫 高风险 | 剔除或构造缺失指示变量 |
| 抵押物估值 | 62.3% | 🚫 高风险 | 建议剔除,仅保留在宽表中 |
通过三级缺失率体系,风控团队可以在 5 分钟内完成一次全量特征的缺失健康度扫描,并直接输出可执行的字段处置清单与样本风险名单,为后续特征工程和模型训练提供干净的数据基础。