4、缺失率统计方法:单变量缺失率计算、多变量联合缺失率、缺失热力图与缺失矩阵的可视化技术
在金融风控场景中,特征缺失并非随机事件,往往与用户资质、业务渠道或系统采集逻辑相关。缺失率统计是数据质量治理的第一步,其核心目标包括:量化单字段缺失程度、识别多字段间的缺失关联、通过可视化快速定位缺失模式。本节将系统讲解从基础计算到高级可视化的完整方法链。
4.1 单变量缺失率计算
单变量缺失率是最基础的统计指标,用于衡量每个特征中缺失值占总样本的比例。计算公式为:
缺失率 = (缺失样本数 / 总样本数) × 100%
在金融数据集中,不同特征的缺失率阈值通常对应不同的治理策略:
| 缺失率范围 | 严重等级 | 典型处理策略 |
|---|---|---|
| < 5% | 低 | 均值/中位数填充,或直接删除缺失样本 |
| 5% – 20% | 中 | 模型预测填充、分箱填充或业务规则补录 |
| 20% – 50% | 高 | 需评估特征重要性,考虑构造缺失指示变量 |
| > 50% | 极高 | 优先排查采集逻辑,通常建议剔除该特征 |
金融风控提示: 在信贷评分卡中,若“收入验证”字段缺失率超过30%,往往意味着该渠道的客户资质下沉或系统对接异常,此时不应简单填充,而应联合业务部门排查数据源。
单变量缺失率计算的 Python 实现示例:
import pandas as pd
def calc_missing_rate(df):
missing = df.isnull().sum()
total = len(df)
missing_rate = (missing / total).round(4) * 100
result = pd.DataFrame({
'特征名': missing.index,
'缺失数': missing.values,
'缺失率(%)': missing_rate.values
}).sort_values('缺失率(%)', ascending=False)
return result
# 示例调用
# missing_df = calc_missing_rate(loan_data)
# print(missing_df.head(10))
4.2 多变量联合缺失率
单变量缺失率无法揭示字段之间的缺失关联。多变量联合缺失率统计的是多个特征同时缺失的样本占比,用于发现系统性缺失模式。常见的联合缺失场景包括:
- 同源缺失: 来自同一数据源(如同一第三方征信接口)的多个字段同时缺失,通常指向接口调用失败。
- 业务逻辑缺失: 如“房产估值”与“房贷余额”同时缺失,可能因用户无房产导致。
- 级联缺失: 父字段缺失导致子字段无法采集,如“单位名称”缺失导致“单位电话”必然缺失。
联合缺失率的计算通常采用缺失模式矩阵(Missing Pattern Matrix),将每个样本的缺失情况编码为二进制向量:
import pandas as pd
import numpy as np
def joint_missing_pattern(df, top_k=10):
# 将缺失值转为1,非缺失转为0
missing_binary = df.isnull().astype(int)
# 按缺失模式分组统计
pattern_counts = missing_binary.groupby(list(missing_binary.columns)).size().reset_index(name='样本数')
pattern_counts['占比(%)'] = (pattern_counts['样本数'] / len(df) * 100).round(2)
return pattern_counts.sort_values('样本数', ascending=False).head(top_k)
# 示例:查看前5种最常见的联合缺失模式
# patterns = joint_missing_pattern(loan_data, top_k=5)
# print(patterns)
关键指标: 联合缺失率分析中,应重点关注“占比超过1%且涉及3个以上特征”的缺失模式,这类模式通常指向数据采集链路的系统性故障。
4.3 缺失热力图与缺失矩阵的可视化技术
可视化是快速定位缺失模式的最直观手段。在金融数据治理中,最常用的两种可视化技术是缺失热力图和缺失矩阵图。
4.3.1 缺失热力图(Missing Heatmap)
缺失热力图以特征为行、样本为列(或反之),用颜色深浅表示缺失状态。其核心价值在于:
- 全局概览: 一眼识别哪些特征缺失严重(深色条带)。
- 模式发现: 观察缺失是否集中在特定样本区间(如时间窗口、渠道ID排序后)。
- 聚类分析: 对特征和样本进行聚类后,可发现缺失模式的群组结构。
下图展示了缺失热力图的典型结构,其中深色区域代表缺失值集中出现的特征与样本区间:
4.3.2 缺失矩阵图(Missing Matrix Plot)
缺失矩阵图以样本索引为横轴、特征为纵轴,用黑白或彩色方块标记缺失状态。与热力图相比,缺失矩阵图更侧重于展示缺失模式的分布密度和聚类结构。其典型应用包括:
- 缺失模式聚类: 对样本的缺失向量进行聚类,将具有相同缺失模式的样本归为一组。
- 时间序列缺失检测: 按时间顺序排列样本,观察缺失是否集中在特定时间段。
- 渠道对比分析: 按业务渠道分组绘制缺失矩阵,对比不同渠道的数据采集质量。
下图展示了缺失矩阵图的核心结构,其中左侧的树状图表示特征聚类,顶部的树状图表示样本聚类:
4.4 可视化工具与代码实现
在 Python 生态中,推荐使用以下库快速生成缺失率可视化图表:
| 可视化类型 | 推荐库 | 核心函数 | 适用场景 |
|---|---|---|---|
| 缺失热力图 | seaborn + missingno | msno.heatmap() | 特征间缺失相关性分析 |
| 缺失矩阵图 | missingno | msno.matrix() | 缺失模式聚类与样本分布 |
| 缺失条形图 | matplotlib + missingno | msno.bar() | 单变量缺失率排序展示 |
| 缺失树状图 | scipy.cluster + seaborn | clustermap() | 层次聚类下的缺失模式发现 |
以下是一个完整的缺失率统计与可视化代码示例:
import pandas as pd
import numpy as np
import missingno as msno
import matplotlib.pyplot as plt
# 模拟金融数据集
np.random.seed(42)
n_samples = 1000
n_features = 10
data = np.random.randn(n_samples, n_features)
df = pd.DataFrame(data, columns=[f'feat_{i}' for i in range(n_features)])
# 人为引入缺失模式
# 模式1:特征0-2在样本0-200中同时缺失(同源缺失)
df.iloc[0:200, 0:3] = np.nan
# 模式2:特征5-7在样本500-700中同时缺失(接口缺失)
df.iloc[500:700, 5:8] = np.nan
# 模式3:随机缺失
random_mask = np.random.random((n_samples, n_features)) < 0.02
df[random_mask] = np.nan
# 1. 单变量缺失率统计
missing_rate = df.isnull().sum() / len(df) * 100
print("单变量缺失率:")
print(missing_rate.sort_values(ascending=False))
# 2. 缺失热力图
plt.figure(figsize=(10, 6))
msno.heatmap(df, figsize=(10, 6), fontsize=12)
plt.title('特征缺失相关性热力图', fontsize=14)
plt.tight_layout()
plt.show()
# 3. 缺失矩阵图(含聚类)
plt.figure(figsize=(12, 8))
msno.matrix(df, figsize=(12, 8), fontsize=12, sparkline=False)
plt.title('缺失矩阵图(按样本排序)', fontsize=14)
plt.tight_layout()
plt.show()
# 4. 缺失条形图
plt.figure(figsize=(10, 5))
msno.bar(df, figsize=(10, 5), fontsize=12, color='#3498db')
plt.title('特征缺失数量条形图', fontsize=14)
plt.tight_layout()
plt.show()
常见陷阱: 缺失热力图的相关性计算基于缺失指示变量的皮尔逊相关系数,当缺失率极低(<1%)时,相关性估计不稳定,容易产生虚假关联。建议在缺失率 > 5% 的特征子集上计算热力图。
4.5 金融场景中的缺失模式诊断清单
在实际金融风控项目中,通过上述统计与可视化方法,可以快速定位以下典型缺失问题:
- 系统性缺失: 热力图中出现整行或整列深色,指向某个数据源或某个特征采集失败。
- 周期性缺失: 缺失矩阵中缺失块按时间周期重复出现,指向定时任务或接口限流问题。
- 渠道相关缺失: 按渠道分组后缺失模式差异显著,指向特定渠道的数据采集逻辑缺陷。
- 级联缺失链: 缺失矩阵中多个特征呈阶梯状缺失,指向父子字段的依赖关系断裂。
- 随机散落缺失: 缺失点均匀分布且无聚类特征,通常指向用户主动跳过或前端校验遗漏。
最佳实践: 建议在数据治理流程中建立“缺失率监控看板”,每日自动生成缺失热力图和联合缺失模式报表,当单变量缺失率环比上升超过5%或出现新的联合缺失模式时,自动触发告警通知数据治理团队。