4. 数据准备与预处理:历史监控数据的收集、清洗、缺失值处理、异常值检测与平滑方法

告警阈值调优的成败,高度依赖输入数据的质量。原始监控数据通常包含噪声、缺失值、异常跳变以及时间戳错位等问题。本章将系统讲解从数据收集到可分析数据集的完整预处理流水线,确保后续统计建模与阈值计算建立在可靠的数据基础之上。

核心原则:预处理的目标不是“美化数据”,而是保留真实业务波动的同时,剔除由系统故障、采集错误或一次性事件引入的干扰信号。过度平滑会掩盖风险,不足则导致阈值频繁误报。

4.1 历史监控数据的收集范围与规范

数据收集阶段需要明确三个维度:指标维度、时间维度和元数据维度。下表列出典型模型风险监控指标及其收集规范:

指标类别 具体指标 采集频率 保留周期 典型数据源
模型性能 PSI、KS、AUC、准确率 日/周 ≥12个月 模型监控平台
数据质量 缺失率、异常值率、分布偏移 日 ≥6个月 数据质量看板
系统稳定性 响应时间、吞吐量、错误率 分钟/小时 ≥3个月 APM / 日志系统
业务结果 坏账率、通过率、逾期率 月 ≥24个月 数据仓库
收集避坑:务必记录每个时间戳对应的模型版本号、数据批次ID、上游系统状态。这些元数据在后续排查阈值异常时至关重要,缺失元数据的时间段应标记为“低置信度区间”。

4.2 数据清洗:格式统一与去重

原始数据常见的脏数据问题包括:时间戳格式不一致、重复记录、负值或超出物理范围的数值、以及字符串型数值混入。清洗步骤按优先级排列如下:

  1. 时间戳标准化:统一转换为 UTC 时间戳或指定时区的 datetime 格式,拒绝非标准字符串。
  2. 去重:按 (指标名, 时间戳) 组合键去重,保留最新一条记录;若存在完全重复行则直接删除。
  3. 范围校验:对每个指标设定业务合理上下界(如 PSI 应在 [0, 1] 区间),超出范围的值标记为异常候选。
  4. 类型转换:确保数值列存储为 float/int,分类列存储为 string/category。
# 清洗示例(Python 伪代码)
import pandas as pd

df['timestamp'] = pd.to_datetime(df['timestamp'], utc=True)
df = df.drop_duplicates(subset=['metric_name', 'timestamp'], keep='last')
df = df[(df['value'] >= lower_bound) & (df['value'] <= upper_bound)]
df['value'] = pd.to_numeric(df['value'], errors='coerce')

4.3 缺失值处理策略

监控数据中的缺失值通常由采集链路中断、上游表延迟或模型下线引起。不同缺失模式需要不同处理策略:

缺失模式 定义 推荐处理方法 适用场景
随机缺失 (MCAR) 缺失与观测值无关 线性插值 / 前向填充 短时间采集抖动
非随机缺失 (MNAR) 缺失与未观测值相关 标记为特殊状态 + 模型回退 模型下线、数据源崩溃
连续缺失块 连续 N 个时间点缺失 若 N > 阈值(如 5),整段标记不可用 系统停机、版本回滚
重要:切勿对连续缺失块使用简单插值,这会人为制造“伪平稳”区间,导致阈值被低估。建议对连续缺失超过 3 个时间点的区间,在后续统计中赋予零权重或单独标记。

4.4 异常值检测方法

异常值检测的目标是区分“业务真实波动”与“采集/系统异常”。以下为三种常用方法及其适用性对比:

方法 原理 优点 缺点 适用指标
IQR 规则 Q1 - 1.5×IQR ~ Q3 + 1.5×IQR 计算简单、无需分布假设 对长尾分布不敏感 PSI、缺失率
Z-Score 法 |z| > 3 视为异常 标准化后易比较 受极端值影响大 响应时间、吞吐量
移动平均偏差 当前值偏离滚动均值 > k×滚动标准差 适应局部趋势 需调参 k 和窗口大小 KS、AUC 时序

以下 SVG 展示了异常值检测的典型流程与三种方法的决策边界:

异常值检测流程与常用方法 原始监控时序 分布特征判断 IQR 规则 Q1-1.5IQR ~ Q3+1.5IQR Z-Score 法 |z| > 3 视为异常 移动平均偏差 滚动均值 ± k×滚动标准差 异常标记与分类 提示:实际应用中建议组合使用两种方法,取交集降低误报率

4.5 数据平滑方法

平滑处理旨在去除高频噪声,保留中长期趋势,为阈值计算提供稳定的基线。以下为三种常用平滑方法及其参数建议:

方法 公式/原理 窗口/参数 延迟 适用场景
简单移动平均 (SMA) MAt = (xt-n+1 + ... + xt) / n n = 7(日指标) 高 (n/2) 平稳指标
指数加权移动平均 (EWMA) EWMAt = α·xt + (1-α)·EWMAt-1 α = 0.1 ~ 0.3 中 趋势明显指标
中值滤波 取窗口内中位数 窗口 = 5 ~ 9 中 含脉冲噪声指标
平滑参数调优建议:使用滚动回测方法,选择使“平滑后序列与原始序列的 RMSE 最小”且“保留 90% 以上原始波动幅度”的参数组合。避免过度平滑导致阈值无法捕捉真实风险变化。

以下 SVG 展示了平滑处理前后的对比效果,以及三种平滑方法的响应特性:

数据平滑方法对比(模拟时序) 原始数据 SMA (n=7) EWMA (α=0.2) 中值滤波 (w=5) 指标值 时间 平滑方法选择指南 EWMA 适合趋势跟踪场景;中值滤波对脉冲噪声鲁棒性最强;SMA 计算简单但延迟较高 原始 SMA EWMA 中值滤波

4.6 预处理流水线总结

将上述步骤整合为可复用的预处理流水线,建议按以下顺序执行:

  1. 收集与校验:拉取原始监控数据,校验时间戳完整性与指标覆盖率。
  2. 清洗与去重:格式统一、去重、范围校验、类型转换。
  3. 缺失值处理:根据缺失模式选择插值或标记,连续缺失块单独处理。
  4. 异常值检测:至少使用两种方法交叉验证,异常点标记但不直接删除。
  5. 数据平滑:根据指标特性选择平滑方法,保留趋势的同时抑制噪声。
  6. 质量评估:输出预处理报告,包含缺失率、异常率、平滑前后统计量对比。
交付物要求:预处理后的数据集应附带完整的 数据质量报告,至少包含:各指标缺失率、异常值占比、平滑参数、以及被标记为“低置信度”的时间段列表。这份报告是阈值调优评审时的必要附件。