3、异常检测概念:异常类型、异常评分与二分类告警、评估指标

TinyML 传感器异常检测的核心任务,是从连续采集的时序数据中识别出“不正常”的模式。与传统的阈值告警(如温度超过 80°C 就报警)不同,异常检测需要回答三个递进的问题:什么是异常?如何量化异常?如何评估检测得好不好?本章将围绕这三个问题,系统梳理异常的类型划分、评分与告警的差异,以及分类评估指标的计算逻辑与适用场景,为后续调参提供理论基准。

异常类型 评分 vs 告警 评估指标 点异常 单个采样点偏离正常范围 上下文异常 在特定时间/条件下才异常 集体异常 一组数据点联合出现异常 TinyML 常见场景 振动尖峰 → 点异常 夜间温度漂移 → 上下文 连续脉冲序列 → 集体 异常评分 连续值:0~1 或 0~∞ 二分类告警 离散值:正常 / 异常 阈值 θ 的作用 score ≥ θ → 告警 score < θ → 正常 调参核心 θ 决定误报率与漏报率 精确率 Precision 告警中有多少是真异常 召回率 Recall 真实异常有多少被捕获 F1 分数 精确率与召回率的调和平均 AUC 阈值无关的排序能力 调参时需综合权衡

3.1 异常类型:从数据形态到业务语义

3.1.1 核心原理:三类异常的数学定义

在 TinyML 传感器场景中,异常类型决定了特征提取方式与模型选择。根据 Hawkins 的经典定义与时间序列异常检测的扩展,异常可分为三类:

  • 点异常(Point Anomaly):单个数据点相对于全局分布显著偏离。例如加速度计在平稳运行时突然出现一个 5g 的尖峰,该点本身即为异常。数学上,若 x(t) 满足 |x(t) - μ| > 3σ(μ 为均值,σ 为标准差),则可视为点异常。
  • 上下文异常(Contextual Anomaly):数据点在全局范围内正常,但在特定上下文(时间、季节、工况)下异常。例如电机在 25°C 环境温度下正常振动幅度为 0.5g,但在 60°C 高温下振动幅度达到 0.5g 则属于异常——因为高温下轴承润滑变差,正常振动应更高。上下文异常必须结合时间戳、环境变量或工况标签判断。
  • 集体异常(Collective Anomaly):单个数据点正常,但一组连续数据点的联合模式异常。例如振动传感器连续 10 个周期出现幅值递增的脉冲序列,每个脉冲本身在正常范围内,但整体模式表明轴承出现早期点蚀。

3.1.2 判断方法:如何区分三类异常

在实际工程中,可通过以下流程快速分类:

  1. 单点检验:计算每个采样点的 z-score(z = (x - μ) / σ),若 |z| > 3 则标记为候选点异常。
  2. 上下文检验:将数据按工况标签(如温度区间、转速档位)分组,在每组内重新计算 μ 和 σ,再检验单点是否偏离组内分布。
  3. 序列模式检验:对连续窗口(如 128 点)提取特征(峰值、频谱能量、过零率),用滑动窗口检测特征序列是否出现突变或周期性异常。

下表总结了三类异常在 TinyML 传感器中的典型表现与检测策略:

异常类型传感器示例特征表现推荐检测方法
点异常加速度计单轴瞬时尖峰z-score、固定阈值
上下文异常温度+振动特定温度下振动偏高条件归一化、回归残差
集体异常电流传感器连续脉冲序列滑动窗口特征、序列模型

3.1.3 案例拆解:工业泵振动监测

某工厂在离心泵上部署了 TinyML 振动监测节点,采样率 2kHz,每 10 秒上传一次特征。初始阶段使用固定阈值(振动幅值 > 2g 告警),但现场出现两类误报:

  • 误报场景 A:泵启动瞬间产生 3g 的瞬时冲击,持续 50ms,属于正常启动过程,但被判定为点异常。
  • 误报场景 B:泵在低负荷运行时振动幅值 1.2g,高负荷时 1.8g,均属正常。但固定阈值 1.5g 导致高负荷时频繁告警。

分析后发现:场景 A 是点异常但属于“已知正常事件”,场景 B 是上下文异常(负荷为上下文变量)。解决方案:

  1. 对启动过程建立“启动窗口”标记,在启动后 2 秒内禁用告警。
  2. 引入负荷信号(通过电流互感器采集),将振动幅值除以负荷值进行归一化,再计算 z-score。

改进后,误报率从 12 次/天降至 1 次/天,且成功捕获了轴承早期故障(表现为连续 5 个周期的振动递增,属于集体异常)。

常见误区:不要将所有异常都当作点异常处理。在 TinyML 中,上下文异常和集体异常往往需要额外的上下文变量(如温度、转速、负荷)或时序窗口特征,否则模型会因“正常但上下文不符”的数据产生大量误报。

3.2 异常评分与二分类告警:从连续值到决策

3.2.1 核心原理:评分是连续谱,告警是离散决策

异常评分(Anomaly Score)是模型输出的连续值,表示数据点或窗口的“异常程度”。常见评分方式包括:

  • 距离度量:如马氏距离、欧氏距离到正常簇中心的距离。
  • 重构误差:自编码器输入与输出的 MSE(均方误差)。
  • 概率密度:高斯混合模型输出的负对数似然。
  • 隔离森林:路径长度的倒数。

二分类告警则是将评分与阈值 θ 比较,输出“正常(0)”或“异常(1)”。评分与告警的本质区别在于:评分保留了不确定性信息,告警则丢弃了程度信息。例如,评分 0.9 与 0.6 都触发告警,但 0.9 的异常置信度远高于 0.6,这在后续人工复核或自动处置时具有不同意义。

3.2.2 判断方法:阈值选择与告警策略

阈值 θ 的选择直接影响告警的敏感性与特异性。常用方法包括:

  1. 分位数法:在训练集上计算评分的 95% 或 99% 分位数作为 θ。适用于评分分布稳定的场景。
  2. 代价敏感法:定义误报代价 CFP 和漏报代价 CFN,选择使总代价最小的 θ。例如,设备损坏代价远高于误报代价时,应降低 θ 以提高召回率。
  3. 动态阈值:根据时间或工况调整 θ。例如,夜间环境噪声低,可降低 θ;白天环境噪声高,可提高 θ。

下表对比了评分与告警在不同场景下的适用性:

维度异常评分二分类告警
输出形式连续值(0~1 或 0~∞)离散值(0/1)
信息量保留异常程度丢失程度信息
存储开销需存储评分序列仅存储告警事件
调参灵活性可事后调整阈值需重新训练或重设阈值
TinyML 适用性适合边缘端持续监控适合低功耗事件触发

3.2.3 案例拆解:电池温度异常评分调参

某储能系统在电池模组上部署温度传感器,使用自编码器计算重构误差作为异常评分。初始阈值设为 0.05,导致以下问题:

  • 夏季高温时段,正常温度波动较大,重构误差经常超过 0.05,产生大量误报。
  • 冬季低温时段,电池温度变化平缓,早期热失控(温度缓慢上升)的重构误差仅为 0.03,未触发告警。

分析发现:评分分布随环境温度变化而漂移。解决方案:

  1. 将环境温度作为条件变量,训练条件自编码器(输入为电池温度+环境温度)。
  2. 在验证集上绘制不同环境温度区间下的评分分布,分别设定 θ高温=0.08、θ常温=0.05、θ低温=0.03。
  3. 在边缘端部署分段阈值查找表,每 5 分钟根据环境温度切换 θ。

调参后,误报率降低 70%,且成功提前 15 分钟捕获了一次热失控前兆(评分从 0.02 缓慢升至 0.04,超过低温阈值 0.03)。

经验提醒:在 TinyML 中,建议同时输出评分和告警标志。评分用于云端离线分析,告警用于边缘端实时响应。这样既保留了调参灵活性,又满足了低延迟要求。

3.3 评估指标:精确率、召回率、F1 与 AUC

3.3.1 核心原理:混淆矩阵与指标定义

评估异常检测模型需要对比预测结果与真实标签。混淆矩阵定义如下:

  • TP(真阳性):实际异常,预测异常。
  • FP(假阳性):实际正常,预测异常(误报)。
  • TN(真阴性):实际正常,预测正常。
  • FN(假阴性):实际异常,预测正常(漏报)。

基于混淆矩阵,核心指标为:

  • 精确率(Precision) = TP / (TP + FP),衡量告警的“纯度”。
  • 召回率(Recall) = TP / (TP + FN),衡量对异常的“捕获率”。
  • F1 分数 = 2 × (P × R) / (P + R),精确率与召回率的调和平均,适用于类别不平衡场景。
  • AUC(Area Under ROC Curve):ROC 曲线下的面积,衡量模型在不同阈值下的排序能力,AUC=0.5 表示随机猜测,AUC=1.0 表示完美排序。

3.3.2 判断方法:如何选择评估指标

指标选择取决于业务目标:

  1. 误报代价高(如频繁误报导致运维人员麻木):优先优化精确率。
  2. 漏报代价高(如设备损坏或安全事故):优先优化召回率。
  3. 两者均衡:使用 F1 分数。
  4. 阈值未定:使用 AUC 评估模型本身的排序能力,不依赖具体阈值。

下表展示了不同场景下的指标优先级:

应用场景误报代价漏报代价首选指标
消费电子(如手机跌落检测)低(仅弹窗提示)中(用户可能忽略)召回率
工业设备预测性维护中(停机检查成本)高(设备损坏)F1 或召回率
医疗可穿戴(如跌倒检测)高(占用急救资源)极高(生命危险)召回率为主,精确率辅助
安防入侵检测高(出警成本)高(安全事件)F1 或 AUC

3.3.3 案例拆解:智能门磁异常检测的指标权衡

某智能家居门磁传感器使用 TinyML 检测“非法闯入”与“正常开门”的差异。模型输出异常评分,需设定告警阈值。初始阈值设为 0.5,在测试集(100 个正常事件,20 个异常事件)上得到:TP=15,FP=8,FN=5,TN=92。

计算指标:

  • 精确率 = 15 / (15+8) = 65.2%
  • 召回率 = 15 / (15+5) = 75.0%
  • F1 = 2 × (0.652 × 0.75) / (0.652 + 0.75) = 69.8%

分析发现:8 次误报中有 6 次是“快递员短暂开门后立即关门”,属于正常行为但评分偏高。5 次漏报中有 3 次是“缓慢推门”导致评分偏低。

调参过程:

  1. 将阈值从 0.5 降至 0.4,召回率提升至 85%,但精确率降至 55%。
  2. 引入“开门持续时间”特征:若开门时间 < 3 秒且评分 < 0.6,则判定为正常。该规则将 FP 从 8 降至 3。
  3. 最终阈值 0.45 + 持续时间规则,得到精确率 83.3%,召回率 85%,F1=84.1%。

同时计算 AUC:通过改变阈值绘制 ROC 曲线,AUC=0.91,表明模型排序能力良好,主要问题在于阈值选择而非模型本身。

调参复盘:在 TinyML 异常检测中,AUC 用于评估模型上限,F1 用于评估当前阈值下的综合性能。若 AUC 高但 F1 低,说明阈值选择不当;若 AUC 本身较低,则需要改进特征或模型结构,而非单纯调阈值。

3.3.4 常见误区与总结

  • 误区一:只看准确率(Accuracy)。在异常检测中,异常样本通常占比极低(如 1%),即使全部预测为正常,准确率也有 99%,但模型毫无价值。必须使用精确率、召回率或 F1。
  • 误区二:忽略类别不平衡。TinyML 传感器数据中,正常样本远多于异常样本。训练时需使用加权损失或过采样/欠采样,评估时使用 PR 曲线而非 ROC 曲线(ROC 在极端不平衡下过于乐观)。
  • 误区三:固定阈值不调整。传感器数据分布会随环境、老化、季节变化,阈值应定期用新数据重新校准。
  • 误区四:混淆“评分”与“概率”。自编码器的重构误差不是概率,不能直接与 0.5 比较。需先通过验证集将评分映射到概率或直接使用分位数阈值。

总结:异常检测的评估是一个多目标权衡过程。在 TinyML 资源受限环境下,建议采用“离线 AUC 评估 + 在线 F1 调参”的双层策略:离线阶段用 AUC 筛选模型结构,在线阶段用 F1 调整阈值与规则,最终实现误报与漏报的平衡。