4. 异常发现任务定义与评价体系
在实验数据智能异常发现工程中,最先要解决的不是“用什么算法”,而是“到底要发现什么”。同一批传感器时序数据,如果任务定义不同,标注方式、模型输出形式、评价指标乃至上线阈值都会完全不同。本节把异常发现任务拆成三类可形式化的对象:点异常、上下文异常与集体异常,并建立一套以召回率、误报率和业务代价为核心的评估体系。
一、三类异常的任务形式化
设实验数据为按时间索引的序列 X = {x_1, x_2, …, x_T},每个 x_t 可以是标量(如温度)或多维向量(如温度、压力、流量)。异常发现的目标是给出一个判定函数 f(x_t) → {0,1},或给出异常分数 s_t,再通过阈值 τ 得到标签。
点异常指单个样本在数值上显著偏离其正常分布。形式化地,若 x_t 的异常分数 s_t > τ,则 x_t 为点异常。它不依赖邻居,典型例子是某次采样中温度突然跳到 180℃,而正常范围是 20~30℃。点异常适合用统计阈值、孤立森林、单类 SVM 等方法处理。
上下文异常指样本本身数值可能正常,但在特定上下文(时间、工况、设备状态)下不合理。形式化地,判定函数变为 f(x_t, C_t) → {0,1},其中 C_t 是上下文,例如“当前处于升温阶段”“设备处于待机模式”。例如温度 60℃ 在升温阶段正常,在恒温阶段却可能是异常。上下文异常要求模型显式建模上下文,常用滑动窗口特征、工况编码或条件概率模型。
集体异常指单个点可能都正常,但一段连续子序列整体呈现异常模式。形式化地,若存在区间 [t_1, t_2],使得该区间内每个点单独看都不超过阈值,但区间整体与正常模式差异显著,则称该区间为集体异常。典型例子是流量在 10 分钟内缓慢下降 15%,单点变化很小,但整体趋势异常。集体异常需要序列级建模,如 LSTM 自编码器、矩阵剖面或子序列聚类。
二、召回率、误报率与业务代价
任务定义清楚后,评价体系必须回答两个问题:漏掉了多少异常,以及误报了多少正常。设真实异常集合为 A,模型预测异常集合为 P,则:
- 召回率 Recall =
|A ∩ P| / |A|,衡量异常被找出来的比例。召回率低意味着漏报,可能造成实验失败未被及时发现。 - 误报率 FPR =
|P \ A| / |N|,其中N为正常样本集合。误报率高意味着大量正常数据被标记为异常,导致告警疲劳。 - 精确率 Precision =
|A ∩ P| / |P|,常与召回率配合使用,但在异常发现中,由于正常样本远多于异常样本,精确率对业务解释不如误报率直观。
仅看召回率和误报率还不够,因为不同错误的业务代价不同。定义代价矩阵:漏报一个异常的代价为 C_FN,误报一个正常样本的代价为 C_FP。则总业务代价可写为:
TotalCost = C_FN × FN + C_FP × FP
其中 FN = |A| - |A ∩ P|,FP = |P \ A|
例如某高温实验场景,漏报一次过热可能导致设备损坏,设 C_FN = 5000 元;误报一次只需人工复核 10 分钟,设 C_FP = 50 元。若某模型召回 90%、误报 200 次,真实异常 20 个,则 FN = 2,FP = 200,总代价 = 5000×2 + 50×200 = 20000 元。若另一模型召回 100%、误报 800 次,则总代价 = 0 + 50×800 = 40000 元。可见盲目追求高召回并不一定最优,必须结合代价比选择工作点。
C_FN / C_FP 比值很大时,应优先提高召回率,允许较高误报;当比值接近 1 时,应追求召回率与误报率的平衡,常用 Fβ 分数或代价曲线辅助决策。三、从任务到评估的落地流程
实际工程中,建议按以下顺序推进:先明确异常类型,再确定标注粒度,然后选择评价指标,最后用业务代价调阈值。具体来说:
- 任务归类:判断当前场景属于点、上下文还是集体异常。若单点突跳为主,按点异常处理;若与工况强相关,按上下文异常处理;若关注趋势段,按集体异常处理。
- 标注对齐:点异常标注到具体时间点;上下文异常需附带工况标签;集体异常标注到区间
[t_1, t_2]。标注粒度必须与模型输出粒度一致,否则召回率计算会失真。 - 指标计算:在验证集上计算召回率、误报率和总代价。建议同时输出混淆矩阵,便于定位漏报和误报的具体样本。
- 阈值调优:改变判定阈值
τ,观察召回率—误报率曲线,选择使总业务代价最小的阈值。若业务要求召回率不低于 95%,则在满足该约束下最小化误报。
以一个温度实验为例:正常样本 10000 个,异常样本 50 个。模型 A 在 τ=0.8 时召回 45 个、误报 300 个;在 τ=0.6 时召回 49 个、误报 900 个。若 C_FN=2000、C_FP=20,则前者代价 = 2000×5 + 20×300 = 16000,后者代价 = 2000×1 + 20×900 = 20000。因此 τ=0.8 更优。这个例子说明,评价体系不是单纯追求某个指标最高,而是把任务形式化、指标计算和业务代价统一到同一个决策框架中。
FP / (TP + FP),会得到与业务感知不一致的结论,尤其在异常极少的实验数据中偏差极大。总结来看,点异常、上下文异常和集体异常分别对应不同的判定函数和输出粒度;召回率、误报率和业务代价则构成从模型输出到业务决策的桥梁。只有先把任务定义清楚,再选择合适的评价指标和代价参数,异常发现系统才能真正服务于实验安全与效率,而不是停留在算法指标的表面比较上。