4. 异常检测问题定义与评价体系

在任务载荷数据处理中,“异常”并不是一个单一概念。同一段遥测曲线,在平稳巡航阶段偏离基线 3℃ 可能意味着载荷温控异常,而在机动过载阶段同样的 3℃ 波动却完全正常。因此,异常检测的第一步不是选算法,而是把问题定义清楚:我们要找的是哪一类异常,用什么指标衡量找得好不好。本节围绕点异常、上下文异常、集体异常三类问题,以及检测率、虚警率、漏警率、F1 分数与 ROC 曲线这套评价体系展开。

三类异常的定义与判别边界

点异常指单个样本在全局分布中显著偏离正常范围,与时间邻域无关。例如某载荷电压采样值突然跳到 28.6V,而正常工作区间为 24~26V,这一个点本身就是异常。点异常的判别通常基于全局统计量或密度:对特征 x,若 |x − μ| / σ 超过阈值(如 3σ),或落在孤立森林给出的低密度区域,即判为异常。它的关键特征是“单点可判”,不需要看前后文。

上下文异常指样本本身数值可能落在全局正常范围内,但在特定上下文(通常是时间邻域或工况条件)下不合理。例如载荷电流为 5A,全局看完全正常,但若前一秒还是 0.2A、后一秒又回到 0.2A,这个 5A 的尖峰就是上下文异常。判别时必须引入上下文特征,如滑动窗口均值、差分、周期相位或工况标签。工程上常用“残差”建模:用前一窗口预测当前值,若预测残差超过阈值则报警。

集体异常指单个点都正常,但一段连续子序列整体呈现异常模式。例如载荷温度在 10 分钟内缓慢爬升 8℃,每个采样点都在允许范围内,但这段持续爬升本身就是故障前兆。集体异常的检测对象是“子序列”而非“点”,常用滑动窗口提取统计特征(均值、方差、斜率),再对窗口序列做异常评分。

三者的关系可以用一句话概括:点异常看单点,上下文异常看单点与邻域的关系,集体异常看一段序列的整体形态。实际系统中,同一份数据往往需要同时部署三类检测器,再对结果做融合。

三类异常的判别视角对比 点异常 单点偏离全局分布 孤立高点 判别依据:全局统计量 / 密度 典型方法:3σ、孤立森林 示例:电压 28.6V(正常 24~26V) 上下文异常 数值正常但邻域不合理 尖峰 判别依据:邻域残差 / 工况条件 典型方法:滑动窗口预测残差 示例:电流 5A(前后均为 0.2A) 集体异常 子序列整体形态异常 持续爬升段 判别依据:窗口统计特征 / 斜率 典型方法:滑动窗口 + 序列模型 示例:10 分钟温升 8℃

混淆矩阵:评价体系的起点

定义清楚异常类型后,需要一个统一的评价框架。异常检测本质是二分类问题,但正负样本极不平衡——正常样本占绝大多数。所有指标都从混淆矩阵出发:

实际为异常实际为正常
判为异常TP(真正例)FP(假正例)
判为正常FN(假负例)TN(真负例)

基于这四个量,定义三个基础指标:

  • 检测率(召回率,Recall / TPR) = TP / (TP + FN),表示实际异常中被成功检出的比例。检测率越高,漏掉的异常越少。
  • 虚警率(假正率,FPR) = FP / (FP + TN),表示正常样本被误报为异常的比例。虚警率过高会导致运维人员对告警麻木。
  • 漏警率 = FN / (TP + FN) = 1 − 检测率,表示异常被漏掉的比例。

检测率与虚警率是一对矛盾体。把阈值调低,检测率上升,但虚警率也上升;阈值调高则相反。因此不能只看单一指标,需要综合指标和曲线工具。

F1 分数与 ROC 曲线

F1 分数是精确率(Precision = TP / (TP + FP))与检测率的调和平均:F1 = 2 × P × R / (P + R)。它同时惩罚漏报和误报,适合正负样本不平衡的场景。例如某次检测中 TP=45、FP=15、FN=5,则 Precision = 45/60 = 0.75,Recall = 45/50 = 0.90,F1 = 2×0.75×0.90/(0.75+0.90) ≈ 0.818。F1 越接近 1 越好,但要注意它依赖阈值选择。

ROC 曲线则摆脱了单一阈值的限制。它以 FPR 为横轴、TPR 为纵轴,将阈值从高到低滑动,每个阈值对应一个 (FPR, TPR) 点,连成曲线。曲线越靠近左上角,分类器整体性能越好。曲线下方的面积即 AUC,取值 0.5(随机猜测)到 1.0(完美分类)。AUC 的优点是阈值无关,适合比较不同检测器的排序能力;缺点是在极端不平衡数据下可能过于乐观,此时可辅以 PR 曲线(Precision-Recall 曲线)。

工程建议:在任务载荷场景中,建议同时报告检测率、虚警率和 F1,并给出 ROC 曲线及 AUC。若虚警率必须控制在 1% 以下,则应在 ROC 曲线上找到 FPR=0.01 对应的 TPR 作为实际可用检测率,而不是直接使用 AUC。

阈值选择与代价敏感

评价体系的最终目的是指导阈值选择。实际系统中,漏警和虚警的代价往往不对称:漏掉一次载荷过热可能导致设备损坏,而一次虚警只是多一次人工复核。因此可以定义代价函数:Cost = C_FN × FN + C_FP × FP,在验证集上扫描阈值,取代价最小的点。例如设 C_FN = 10、C_FP = 1,当阈值使 FN=2、FP=30 时 Cost = 50;另一阈值使 FN=5、FP=8 时 Cost = 58,前者更优。这种代价敏感阈值选择比单纯最大化 F1 更贴近工程实际。

最后需要强调:所有指标都必须在独立验证集上计算,且验证集应包含足够数量的异常样本。若异常样本过少,检测率和 F1 的置信区间会很宽,此时应使用交叉验证或自助法估计指标波动范围,避免被单次划分的偶然结果误导。