4. 数据准备与预处理:历史监控数据的收集、清洗、缺失值处理、异常值检测与平滑方法
告警阈值调优的成败,高度依赖输入数据的质量。原始监控数据通常包含噪声、缺失值、异常跳变以及时间戳错位等问题。本章将系统讲解从数据收集到可分析数据集的完整预处理流水线,确保后续统计建模与阈值计算建立在可靠的数据基础之上。
核心原则:预处理的目标不是“美化数据”,而是保留真实业务波动的同时,剔除由系统故障、采集错误或一次性事件引入的干扰信号。过度平滑会掩盖风险,不足则导致阈值频繁误报。
4.1 历史监控数据的收集范围与规范
数据收集阶段需要明确三个维度:指标维度、时间维度和元数据维度。下表列出典型模型风险监控指标及其收集规范:
| 指标类别 | 具体指标 | 采集频率 | 保留周期 | 典型数据源 |
|---|---|---|---|---|
| 模型性能 | PSI、KS、AUC、准确率 | 日/周 | ≥12个月 | 模型监控平台 |
| 数据质量 | 缺失率、异常值率、分布偏移 | 日 | ≥6个月 | 数据质量看板 |
| 系统稳定性 | 响应时间、吞吐量、错误率 | 分钟/小时 | ≥3个月 | APM / 日志系统 |
| 业务结果 | 坏账率、通过率、逾期率 | 月 | ≥24个月 | 数据仓库 |
收集避坑:务必记录每个时间戳对应的模型版本号、数据批次ID、上游系统状态。这些元数据在后续排查阈值异常时至关重要,缺失元数据的时间段应标记为“低置信度区间”。
4.2 数据清洗:格式统一与去重
原始数据常见的脏数据问题包括:时间戳格式不一致、重复记录、负值或超出物理范围的数值、以及字符串型数值混入。清洗步骤按优先级排列如下:
- 时间戳标准化:统一转换为 UTC 时间戳或指定时区的 datetime 格式,拒绝非标准字符串。
- 去重:按 (指标名, 时间戳) 组合键去重,保留最新一条记录;若存在完全重复行则直接删除。
- 范围校验:对每个指标设定业务合理上下界(如 PSI 应在 [0, 1] 区间),超出范围的值标记为异常候选。
- 类型转换:确保数值列存储为 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 展示了异常值检测的典型流程与三种方法的决策边界:
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 展示了平滑处理前后的对比效果,以及三种平滑方法的响应特性:
4.6 预处理流水线总结
将上述步骤整合为可复用的预处理流水线,建议按以下顺序执行:
- 收集与校验:拉取原始监控数据,校验时间戳完整性与指标覆盖率。
- 清洗与去重:格式统一、去重、范围校验、类型转换。
- 缺失值处理:根据缺失模式选择插值或标记,连续缺失块单独处理。
- 异常值检测:至少使用两种方法交叉验证,异常点标记但不直接删除。
- 数据平滑:根据指标特性选择平滑方法,保留趋势的同时抑制噪声。
- 质量评估:输出预处理报告,包含缺失率、异常率、平滑前后统计量对比。
交付物要求:预处理后的数据集应附带完整的 数据质量报告,至少包含:各指标缺失率、异常值占比、平滑参数、以及被标记为“低置信度”的时间段列表。这份报告是阈值调优评审时的必要附件。