4. 缺失值探索

在金融数据处理中,发现缺失值只是第一步。真正决定后续清洗策略的,是缺失值的分布结构:缺失是随机散落的,还是集中在某些字段、某些时间段、某些机构或产品上?不同字段的缺失是否同时发生?只有把缺失模式看清楚,才能判断应该删除、填充、插值,还是回退到业务侧补数。本节围绕缺失模式可视化、缺失比例统计、缺失相关性分析与缺失热图四个动作展开。

一、核心原理:缺失不是噪声,而是结构信号

金融数据中的缺失通常带有业务含义。例如,某只债券的久期字段缺失,可能因为该券尚未评级;某客户的收入字段缺失,可能因为其未授权数据采集;某交易日的成交量缺失,可能因为当日休市或数据源延迟。因此,缺失值探索的目标不是“把缺失找出来”,而是回答三个问题:缺失比例有多高、缺失在哪些维度聚集、缺失之间是否相关。

从统计视角看,缺失机制可分为完全随机缺失(MCAR)、随机缺失(MAR)和非随机缺失(MNAR)。在探索阶段,我们无法严格证明机制,但可以通过缺失热图和相关性矩阵观察缺失的聚集性。如果缺失呈现明显的行或列聚集,往往提示非随机缺失,此时简单均值填充会引入偏差。

关键判断:缺失比例决定“能不能用”,缺失模式决定“怎么补”。比例低且随机,可考虑删除或简单填充;比例高且聚集,应优先回退业务补数或建立缺失指示变量。

二、方法流程:从比例统计到热图定位

建议按以下顺序推进,避免一上来就画图而忽略量化基线。

  1. 缺失比例统计:按字段计算缺失率,并按缺失率降序排列,快速识别高缺失字段。
  2. 缺失模式可视化:用矩阵图或条形图展示每行每列的缺失位置,观察是否成块出现。
  3. 缺失相关性分析:将每个字段是否缺失编码为0/1,计算字段间缺失的相关系数。
  4. 缺失热图:把缺失矩阵或缺失相关系数矩阵渲染为热图,定位聚集区域。

下面是一段可直接运行的Python示例,使用pandas与seaborn完成上述动作。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 读取金融数据
df = pd.read_csv("financial_data.csv")

# 1. 缺失比例统计
missing_ratio = df.isnull().mean().sort_values(ascending=False)
print(missing_ratio)

# 2. 缺失矩阵可视化
plt.figure(figsize=(12, 6))
sns.heatmap(df.isnull(), cbar=False, cmap="viridis")
plt.title("Missing Value Matrix")
plt.show()

# 3. 缺失相关性分析
missing_corr = df.isnull().corr()
plt.figure(figsize=(10, 8))
sns.heatmap(missing_corr, annot=True, cmap="coolwarm", center=0)
plt.title("Missing Correlation Heatmap")
plt.show()

执行后应重点关注两类结果:一是缺失比例表中是否存在超过60%的字段;二是缺失热图中是否出现连续行或连续列的深色带。若某字段缺失率极高且与其他字段缺失高度相关,通常说明该字段依赖上游某个未采集的数据源。

三、案例场景:债券持仓数据缺失探索

假设我们有一份债券持仓表,包含债券代码、持仓日期、久期、评级、成交收益率、托管机构等字段。运行缺失比例统计后得到如下清单:

字段缺失率缺失特征建议动作
久期38%集中在未评级债券按评级分组填充或标记缺失
评级22%与久期缺失高度相关回退评级源补数
成交收益率9%随机散落插值或删除少量记录
托管机构3%集中在少数日期按日期回补
债券代码0%无缺失保留为主键

进一步绘制缺失热图后,可以看到“久期”与“评级”两列的缺失位置几乎重合,说明这两类缺失来自同一业务环节。此时若只对久期做均值填充,会掩盖评级缺失带来的风险。更合理的做法是新增一个“评级缺失”指示变量,并在模型中保留该信号。

实战提示:缺失热图的行数很多时,可先按缺失数量对行排序,再截取缺失最多的前200行绘制,避免图像过密无法辨认。

四、误区与复盘:不要只看比例,不看结构

常见误区有三个。第一,只统计整体缺失率,忽略分时间段、分机构的缺失差异。金融数据常有季度披露、月末结算等周期性缺失,必须分组观察。第二,把缺失相关性当成因果关系。两个字段同时缺失,只说明它们共享上游依赖,不能直接推断业务因果。第三,热图配色过深或过浅导致误读,建议使用二值色或固定色阶,并标注缺失比例。

复盘要点:缺失探索的产出应是一份“缺失画像”,至少包含字段缺失率、缺失聚集维度、缺失相关字段对、以及初步处理建议。没有这份画像,后续填充策略很容易拍脑袋。

最后,把缺失探索结果固化为可复用的检查函数,每次新数据入库时自动输出缺失比例表与热图,能显著降低数据质量问题的排查成本。

金融数据缺失模式探索:比例—结构—相关性 缺失比例统计 久期 38% 评级 22% 成交收益率 9% 托管机构 3% 债券代码 0% 比例决定“能不能用” 高缺失字段优先回退补数 缺失热图(行×列) 久期 评级 收益 托管 代码 深色=缺失,浅色=存在 久期与评级缺失位置重合 提示共享上游依赖 缺失相关性分析 久期 评级 0.86 收益 托管 0.12 相关系数高→缺失同源 相关系数低→缺失独立 据此选择填充或标记策略