4. 巡检指标体系:缺失率、连续缺失天数、缺失模式熵、特征覆盖率

金融特征缺失巡检不能仅依赖单一指标。单一缺失率可能掩盖局部数据断崖、周期性缺失或特征大面积失效等深层问题。本章建立四维巡检指标体系,从规模、持续性、模式复杂度、覆盖广度四个角度对缺失问题进行量化评估。

核心原则:四维指标需联合使用。例如,缺失率低但连续缺失天数高,可能指向特定时间窗口的数据采集故障;缺失模式熵高则暗示数据源异构或逻辑分支异常。

4.1 缺失率(Missing Rate)

缺失率是最基础的巡检指标,定义为单位时间窗口内(通常为日、周或月)某特征缺失样本数占总样本数的比例。

维度 说明 阈值参考(金融场景)
全局缺失率 全量样本中该特征的缺失占比 > 5% 触发关注;> 20% 触发告警
分群缺失率 按客群、产品线、渠道等维度拆分的缺失率 分群间差异 > 3 倍时需排查数据链路
时序缺失率 每日/每小时的缺失率时间序列 单日突增 > 10% 需立即核查
-- 示例 SQL:计算每日缺失率
SELECT
    date_trunc('day', event_time) AS day,
    feature_name,
    COUNT(*) AS total_records,
    SUM(CASE WHEN feature_value IS NULL THEN 1 ELSE 0 END) AS missing_count,
    ROUND(
        SUM(CASE WHEN feature_value IS NULL THEN 1 ELSE 0 END)::NUMERIC / COUNT(*),
        4
    ) AS missing_rate
FROM feature_log
WHERE event_time >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY day, feature_name
ORDER BY day, missing_rate DESC;
巡检技巧:不要只看平均缺失率。金融数据常存在“周末效应”或“月末效应”,建议将缺失率与同期历史基线(如过去 4 周同一天均值)做对比,计算偏离度。

4.2 连续缺失天数(Consecutive Missing Days)

连续缺失天数衡量特征在时间轴上持续不可用的长度。该指标对识别数据采集中断、上游表延迟、接口故障等系统性原因至关重要。

  • 定义:特征在连续 N 个自然日(或业务日)内缺失率均超过阈值(如 80%),则计为一次连续缺失事件,N 即为连续缺失天数。
  • 严重等级:
    • 1-3 天:偶发波动,需确认是否由网络抖动或批量任务重跑导致。
    • 4-7 天:中度风险,可能涉及上游数据源变更或调度任务挂起。
    • > 7 天:严重事故,需立即启动数据链路应急恢复流程。
  • 计算逻辑:对每日缺失率进行二值化(0=正常,1=缺失超标),然后统计连续 1 序列的最大长度。
-- 示例 Python 逻辑(伪代码)
def max_consecutive_missing(daily_missing_rate_series, threshold=0.8):
    binary = (daily_missing_rate_series > threshold).astype(int)
    max_run = 0
    current_run = 0
    for val in binary:
        if val == 1:
            current_run += 1
            max_run = max(max_run, current_run)
        else:
            current_run = 0
    return max_run
注意:连续缺失天数应结合业务日历判断。例如,理财产品在非交易日自然缺失,不应计入连续缺失事件。建议使用“业务日”而非“自然日”进行计算。

4.3 缺失模式熵(Missing Pattern Entropy)

缺失模式熵用于量化缺失值在样本空间中的分布随机性。低熵意味着缺失集中在少数固定模式(如特定客群、特定时间段),高熵则意味着缺失近乎随机分布,可能指向更复杂的数据质量问题。

熵值范围 模式特征 可能原因
0 - 0.3 高度结构化缺失 特定业务规则导致(如学生客群无收入字段)
0.3 - 0.7 混合模式缺失 部分数据源不稳定,部分为业务豁免
0.7 - 1.0 接近随机缺失 数据采集系统存在间歇性故障或并发冲突

计算方法:将样本按关键维度(如客群、渠道、时段)分组,统计各组缺失率,归一化后计算信息熵。

import numpy as np

def missing_pattern_entropy(group_missing_rates):
    # group_missing_rates: 各分组的缺失率列表
    total = sum(group_missing_rates)
    if total == 0:
        return 0.0
    probs = [r / total for r in group_missing_rates if r > 0]
    entropy = -sum(p * np.log2(p) for p in probs)
    # 归一化到 [0, 1]
    max_entropy = np.log2(len(group_missing_rates))
    return entropy / max_entropy if max_entropy > 0 else 0.0
应用场景:当缺失率正常但缺失模式熵突然升高时,往往意味着数据采集逻辑发生了未预期的变化,即使缺失总量未超标,也应纳入排查范围。

4.4 特征覆盖率(Feature Coverage Rate)

特征覆盖率从特征维度衡量数据资产的可用性。不同于缺失率(关注单个特征内的缺失比例),覆盖率关注的是在全体特征集合中,有多少特征在当前时间窗口内是可用的。

  • 定义:覆盖率 = (当前窗口内有效特征数 / 特征总表数)× 100%
  • 有效特征判定:特征缺失率低于预设阈值(如 10%),且连续缺失天数不超过容忍上限(如 3 天)。
  • 分级监控:
    • 核心特征覆盖率:仅监控风控模型必选特征(通常 30-50 个)。
    • 全量特征覆盖率:监控特征仓库中所有已注册特征(可能数百个)。
覆盖率等级 核心特征覆盖率 全量特征覆盖率 响应动作
健康 ≥ 98% ≥ 95% 常规巡检
关注 95% - 98% 90% - 95% 排查低覆盖特征原因
告警 < 95% < 90% 立即启动特征链路应急
关键提醒:特征覆盖率下降 1% 可能对应 5-10 个特征失效。在金融风控场景中,模型依赖的特征突然大面积不可用,将直接导致评分卡失效或决策引擎降级。建议将覆盖率指标接入实时监控大屏。
四维巡检指标体系架构 缺失巡检指标体系 缺失率 规模维度 连续缺失天数 持续性维度 缺失模式熵 模式复杂度 特征覆盖率 覆盖广度 四维联合分析,避免单一指标误判

4.5 四维指标联合决策矩阵

单一指标无法完整描述缺失问题的全貌。下表展示了四维指标组合与典型问题类型的对应关系,帮助巡检人员快速定位根因。

缺失率 连续缺失天数 缺失模式熵 特征覆盖率 典型问题类型
高 高 低 低 上游数据源整体中断(如接口下线)
高 低 高 中 数据采集并发冲突或采样逻辑异常
中 中 低 高 特定客群或产品的业务规则豁免
低 低 高 高 偶发网络抖动或单条记录解析失败
低 高 低 中 定时批量任务挂起(如每日凌晨 ETL 失败)
实践警告:不要孤立设置指标阈值。例如,在月初批量跑批期间,缺失率和连续缺失天数可能短暂升高,但缺失模式熵和覆盖率正常,此时应视为“预期波动”而非“故障”。建议引入业务日历和事件标签,对巡检窗口进行动态分段。
四维指标联合决策流程 四维指标输入 缺失率是否超标? 检查连续缺失天数 检查缺失模式熵 定位数据源中断 评估模式随机性 联合覆盖率做最终影响面评估

4.6 巡检指标落地建议

  1. 分层监控:核心特征(模型入模特征)使用更严格的阈值,辅助特征可适当放宽。
  2. 基线对比:所有指标均需与历史同期基线对比,消除周期性波动干扰。
  3. 告警收敛:连续缺失天数和缺失模式熵可作为告警收敛因子——当缺失率超标但熵值极低时,可能是已知业务规则,无需重复告警。
  4. 可视化看板:建议将四维指标以雷达图或热力图形式展示,便于快速识别异常象限。
推荐工具:可使用 Apache Griffin 或自研巡检框架,将四维指标定义为数据质量 SLA,每日自动生成巡检报告并推送至飞书/钉钉/邮件。