4. 缺失率计算与统计:单特征缺失率、整体缺失率、滑动窗口缺失率计算方法

缺失率是衡量特征数据完整性的核心指标。在特征巡检与PSI监控体系中,缺失率不仅反映数据采集质量,更是触发数据漂移预警的前置信号。本节系统讲解三种缺失率指标的定义、计算公式与工程实现方法。

4.1 单特征缺失率

单特征缺失率衡量某个特定特征在样本集合中的缺失比例,是最基础的缺失度量单元。

指标 定义 计算公式
单特征缺失率 特征 f 在数据集 D 中缺失值的占比 missing_rate(f) = count(null(f)) / count(total(f)) × 100%

计算要点:

  • 缺失定义:包括 NULL、NaN、空字符串 ""、占位符 -999 等业务约定的缺失标记。
  • 分母选择:通常使用当前批次总样本数,若存在过滤逻辑(如只统计活跃用户),需在文档中明确分母范围。
  • 阈值预警:单特征缺失率超过 5% 应触发黄色预警,超过 20% 触发红色预警。
工程示例: 使用 Python 计算单特征缺失率
import pandas as pd

def single_feature_missing_rate(df, feature):
    total = len(df)
    missing = df[feature].isna().sum()
    rate = round(missing / total * 100, 4)
    return rate

# 示例:计算 'age' 特征的缺失率
rate = single_feature_missing_rate(data, 'age')
print(f"age 缺失率: {rate}%")

4.2 整体缺失率

整体缺失率从全局视角评估数据集的完整程度,用于判断当前批次数据是否可接受进入模型推理流程。

指标 定义 计算公式
整体缺失率 数据集中所有特征缺失值占总数据单元的比例 overall_missing_rate = sum(missing_cells) / (rows × cols) × 100%

计算步骤:

  1. 统计每个特征的缺失数量,求和得到 total_missing。
  2. 计算数据单元总数:total_cells = 样本数 × 特征数。
  3. 计算比率:overall_missing_rate = total_missing / total_cells。
注意: 整体缺失率对高缺失率特征不敏感。例如,一个特征缺失 90% 而其他特征完整,整体缺失率可能仅为 5%,容易掩盖局部严重缺失。建议同时监控单特征缺失率的最大值。
def overall_missing_rate(df):
    total_cells = df.shape[0] * df.shape[1]
    total_missing = df.isna().sum().sum()
    rate = round(total_missing / total_cells * 100, 4)
    return rate

print(f"整体缺失率: {overall_missing_rate(data)}%")

4.3 滑动窗口缺失率

滑动窗口缺失率用于监控缺失率在时间序列上的变化趋势,能够及时发现数据采集系统的间歇性故障或上游数据源的退化。

核心参数:

参数 说明 推荐值
窗口大小 W 每次计算包含的连续批次数量 7 天 / 30 批次
滑动步长 S 每次窗口移动的批次间隔 1 批次 / 1 天
统计粒度 单特征或整体缺失率 两者均需监控

计算流程:

  1. 按时间顺序排列各批次数据。
  2. 从第 1 个批次开始,取连续 W 个批次组成窗口。
  3. 计算窗口内的单特征缺失率或整体缺失率。
  4. 窗口向后滑动 S 个批次,重复步骤 2-3,直至覆盖所有批次。
监控策略: 滑动窗口缺失率连续 3 个窗口上升,或单窗口缺失率超过历史均值 + 3σ,应立即触发告警并检查上游数据管道。
def sliding_window_missing_rate(df_list, window_size=7, step=1):
    """
    df_list: 按时间排序的 DataFrame 列表
    window_size: 窗口大小(批次数量)
    step: 滑动步长
    """
    rates = []
    for i in range(0, len(df_list) - window_size + 1, step):
        window_df = pd.concat(df_list[i:i+window_size], ignore_index=True)
        rate = overall_missing_rate(window_df)
        rates.append({
            'window_start': i,
            'window_end': i + window_size - 1,
            'missing_rate': rate
        })
    return rates

4.4 三种缺失率对比与适用场景

指标 监控粒度 时间维度 主要用途 告警灵敏度
单特征缺失率 单个特征 单批次 定位具体特征的采集异常 高
整体缺失率 全数据集 单批次 判断批次数据整体可用性 中
滑动窗口缺失率 单特征或整体 连续多批次 发现趋势性退化与间歇性故障 高(趋势敏感)

4.5 缺失率计算流程架构

下图展示了从原始数据输入到缺失率指标输出的完整计算链路,包含单特征、整体与滑动窗口三种路径。

缺失率计算流程架构图 原始数据批次 数据预处理(清洗/对齐) 单特征缺失率计算 逐特征统计缺失数 整体缺失率计算 汇总缺失单元总数 滑动窗口缺失率计算 窗口内聚合统计 缺失率指标输出

4.6 缺失率监控最佳实践

  • 分层监控:同时部署单特征缺失率(定位问题特征)与整体缺失率(评估批次质量),避免单一指标盲区。
  • 滑动窗口基线:以过去 30 天滑动窗口缺失率的均值 ± 2 倍标准差作为动态阈值,适应业务周期性波动。
  • 缺失模式分析:当缺失率上升时,进一步分析缺失是否集中在特定时间段、特定数据源或特定取值区间,辅助根因定位。
  • 缺失与PSI联动:缺失率突变常伴随特征分布偏移,建议在缺失率告警后自动触发对应特征的 PSI 计算,形成巡检闭环。
巡检清单: 每日巡检应包含以下缺失率指标:
1. 所有特征的 单特征缺失率 列表(按缺失率降序排列)
2. 当前批次的 整体缺失率 与过去 7 天均值对比
3. 缺失率排名前 5 特征的 滑动窗口趋势图(窗口大小=7)