4、传统异常检测方法:统计方法(均值方差、Z-score)、基于距离的方法(KNN、LOF)、基于密度的方法,优缺点对比

在传感器数据异常检测的工程实践中,TFLite Micro 提供了强大的边缘端推理能力,但模型的有效性高度依赖于前端特征提取与基线判定方法的选择。传统异常检测方法——统计方法、基于距离的方法、基于密度的方法——构成了绝大多数轻量级检测系统的数学基石。它们不依赖大量标注样本,计算开销可控,非常适合部署在 Cortex-M 系列等资源受限的 MCU 上。本章将系统梳理这三类方法的数学原理、判定逻辑、适用边界与工程代价,并通过一个振动传感器实例展示如何在实际项目中组合使用这些方法。

传统异常检测方法对比框架 统计方法 均值方差 / Z-score / IQR 距离方法 KNN 距离 / 最近邻距离 密度方法 LOF / 局部密度比 核心原理 假设数据服从正态分布 偏离均值 k 个标准差 核心原理 异常点远离正常邻居 距离阈值判定 核心原理 异常点局部密度显著低 与邻居密度比值 典型算法 • 3σ 准则 • Z-score 阈值法 典型算法 • KNN 距离和 • 平均 k 近邻距离 典型算法 • LOF (Local Outlier Factor) • 局部可达密度 适用场景 单变量、平稳信号 MCU 上计算极快 适用场景 多变量、全局异常 需要存储历史样本 适用场景 局部密度变化检测 多模态数据分布 工程建议:统计方法做粗筛 → 距离/密度方法做精判 → TFLite Micro 模型做最终决策

4.1 统计方法:均值方差与 Z-score

4.1.1 核心原理

统计方法假设正常传感器数据服从或近似服从正态分布(高斯分布)。对于采集到的样本序列 \( x_1, x_2, ..., x_n \),计算均值 \( \mu \) 和标准差 \( \sigma \)。根据正态分布的性质,约 99.7% 的数据落在 \( \mu \pm 3\sigma \) 区间内。因此,超出该区间的样本点被视为异常。Z-score 是这一思想的标准化形式:\( Z_i = (x_i - \mu) / \sigma \),当 \( |Z_i| > 3 \) 时判定为异常。该方法在 MCU 上实现时仅需维护两个累加器(用于计算均值和方差),内存占用极小。

4.1.2 判断方法或操作流程

  1. 离线训练阶段:采集一段正常工况下的传感器数据(建议至少 1000 个样本点),计算均值 \( \mu \) 和标准差 \( \sigma \)。
  2. 阈值设定:根据实际需求选择 k 值(通常 k=2.5~3.5)。k 值越小,灵敏度越高但误报率也越高。
  3. 在线检测阶段:对每个新样本计算 \( |x_i - \mu| / \sigma \),若超过 k 则触发异常标志。
  4. 滑动窗口更新:在非异常状态下,每 N 个样本(如 100 个)用滑动平均法更新 \( \mu \) 和 \( \sigma \),以适应缓慢的传感器漂移。
工程提示:在 TFLite Micro 中,统计方法通常作为第一级粗筛。由于它只依赖两个浮点数(或定点数),可以在中断服务函数中直接完成计算,延迟在微秒级。但需要注意,传感器数据往往存在自相关性,直接使用原始样本可能违反独立性假设,建议先对数据进行差分或提取滑动窗口内的均方根值(RMS)再应用 Z-score。

4.1.3 案例拆解:工业振动传感器温度漂移检测

某旋转机械的加速度传感器输出 1kHz 采样率的振动数据。正常运行时,振动 RMS 值稳定在 0.8g 左右,标准差 0.1g。某日,由于轴承润滑不良,RMS 值缓慢上升至 1.2g。使用 Z-score 方法,设定 k=3,则阈值上限为 \( 0.8 + 3 \times 0.1 = 1.1g \)。当 RMS 超过 1.1g 时系统报警。实际运行中,该方法在第 47 分钟时触发报警,而人工巡检在第 2 小时才发现异常。但该方法对突发性冲击(如刀具断裂)不敏感,因为冲击信号持续时间短,对 RMS 均值影响有限。

4.1.4 常见误区与总结

  • 误区一:直接对原始波形做 Z-score,忽略了传感器噪声的非高斯性。建议先提取特征(如峰值、RMS、频谱能量)。
  • 误区二:固定阈值不更新。传感器会随温度、老化产生漂移,必须定期更新基线。
  • 误区三:将多变量问题拆成多个单变量分别检测,忽略了变量间的相关性。
统计方法子类型计算复杂度内存占用适用数据维度主要局限
均值方差法O(1)2 个浮点数单变量对非正态分布失效
Z-score 固定阈值O(1)2 个浮点数单变量无法检测局部异常
滑动窗口 Z-scoreO(W)W 个样本单变量窗口大小敏感
IQR 四分位距法O(n log n)需存储全部样本单变量不适合在线流式处理

4.2 基于距离的方法:KNN 与最近邻距离

4.2.1 核心原理

距离方法的基本假设是:异常样本在特征空间中远离大多数正常样本。KNN(K-Nearest Neighbors)异常检测不直接做分类,而是计算每个样本到其 k 个最近邻居的平均距离。如果该距离显著大于数据集中其他样本的平均距离,则该样本为异常。对于传感器数据,特征向量可以是滑动窗口内的统计量(均值、方差、峰值)、频域特征(FFT 各频段能量)或时频特征。距离度量常用欧氏距离,但在不同特征量纲差异大时需先做标准化。

4.2.2 判断方法或操作流程

  1. 特征提取:将原始时间序列切分为长度为 L 的窗口,每个窗口提取 d 维特征向量。
  2. 离线建模:对正常数据集中的 N 个特征向量,计算两两之间的距离矩阵(N×N),存储每个样本的 k 近邻平均距离。
  3. 阈值确定:取所有正常样本 k 近邻距离的 95% 或 99% 分位数作为阈值。
  4. 在线检测:新样本到达时,计算它与所有历史正常样本的距离,取最小的 k 个距离求平均,若超过阈值则报警。
资源警告:KNN 方法需要存储全部训练样本(或其特征向量),在 MCU 上可能占用大量 Flash/RAM。例如,1000 个样本、每个 8 维特征(float32),需要 32KB 存储。且每次检测需计算 N 次距离,时间复杂度 O(N·d),当 N 较大时无法满足实时性。工程上通常限制 N ≤ 500,或使用 KD-Tree 等索引结构(但 MCU 上实现复杂)。

4.2.3 案例拆解:多轴加速度计装配异常检测

在电子产品装配线上,三轴加速度计用于检测螺丝拧紧过程中的冲击波形。正常装配的冲击特征在三维空间中形成两个密集簇(对应两种不同型号的外壳)。某次装配中,由于螺丝刀扭矩异常,产生了一个偏离两个簇的孤立特征点。使用 KNN 方法(k=5),该点的平均最近邻距离为 4.2,而正常样本的平均距离为 1.1,阈值设为 2.5,因此被正确判定为异常。相比之下,若使用单变量 Z-score 分别检测三个轴,该异常点在 X 轴上的 Z-score 仅为 1.8,无法触发报警。

4.2.4 常见误区与总结

  • 误区一:未对特征做标准化。加速度计三个轴的量纲相同,但若混合温度、湿度等不同量纲特征,必须标准化。
  • 误区二:k 值选择不当。k 太小(如 1)对噪声敏感;k 太大(如 N/2)会平滑掉局部异常。
  • 误区三:忽略数据分布的多簇特性。KNN 对多簇数据效果较好,但若簇间距离差异大,需考虑使用局部方法。

4.3 基于密度的方法:LOF(局部离群因子)

4.3.1 核心原理

LOF 方法克服了 KNN 的全局视角缺陷,它关注的是样本相对于其局部邻域的密度。对于每个样本 p,计算其第 k 距离邻域内的局部可达密度(LRD),然后与邻域内其他样本的 LRD 比较,得到局部离群因子 LOF(p)。若 LOF(p) 远大于 1,说明 p 的密度显著低于其邻居,即为异常。LOF 特别擅长检测那些在全局距离上不突出、但在局部区域密度突变的样本——例如,一个样本虽然距离正常簇中心不远,但处于两个正常簇之间的稀疏地带。

4.3.2 判断方法或操作流程

  1. 计算 k 距离:对每个样本 p,找到其第 k 近邻的距离 \( k\_dist(p) \)。
  2. 计算可达距离:\( reach\_dist_k(p, o) = max(k\_dist(o), dist(p, o)) \),其中 o 是 p 的邻居。
  3. 计算局部可达密度:\( LRD_k(p) = 1 / ( \sum_{o \in N_k(p)} reach\_dist_k(p, o) / |N_k(p)| ) \)。
  4. 计算 LOF:\( LOF_k(p) = ( \sum_{o \in N_k(p)} LRD_k(o) / |N_k(p)| ) / LRD_k(p) \)。
  5. 判定:LOF 值大于 1.5~2 时视为异常(具体阈值需根据数据分布调整)。
经验值:在传感器数据中,k 通常取 10~20。k 太小会导致 LOF 波动剧烈;k 太大则失去“局部”意义。LOF 的计算复杂度为 O(N²),在 MCU 上通常只用于离线分析或周期性(而非逐样本)检测。若需在线使用,可考虑简化版——仅计算样本到其 k 近邻的平均距离与邻居平均距离的比值。

4.3.3 案例拆解:环境传感器多模态漂移检测

一个温湿度传感器节点部署在数据中心机房。正常运行时,温度在 20~25°C、湿度在 40%~60% 范围内波动,形成椭圆形分布。当空调故障时,温度缓慢上升至 30°C,湿度下降至 30%,数据点沿对角线方向漂移。这些漂移点与正常簇的欧氏距离并不大(因为温湿度同时变化,综合距离可能仍在正常范围内),但它们在局部区域形成了低密度轨迹。LOF 方法成功检测出这些漂移点(LOF 值从 1.0 升至 2.3),而 KNN 和 Z-score 均未报警。该案例说明,当异常表现为“组合特征偏移”而非“单特征超限”时,密度方法具有明显优势。

4.3.4 常见误区与总结

  • 误区一:直接使用原始时间序列计算 LOF。必须先提取特征并去除时间相关性。
  • 误区二:忽略参数 k 的敏感性。建议在训练集上做参数扫描,选择使异常分数分布最稳定的 k。
  • 误区三:将 LOF 阈值设为固定值。不同传感器、不同工况下 LOF 的基线不同,应使用正常数据的 95% 分位数动态设定。

4.4 三类方法综合对比与选型建议

对比维度统计方法(Z-score)距离方法(KNN)密度方法(LOF)
数据分布假设正态分布无明确假设局部密度可比
计算复杂度(在线)O(1)O(N·d)O(N·d)(简化版)
内存需求极低(<1KB)中(需存 N 个特征)中高(需存 N 个特征及距离矩阵)
多变量支持弱(需逐维处理)强(直接计算多维距离)强(天然支持多维)
局部异常检测能力无弱强
对参数敏感性低(仅 k 值)中(k 和距离度量)高(k 和阈值)
MCU 部署难度极易中等较难
典型延迟微秒级毫秒级(N≤500)秒级(离线)
选型建议:在 TFLite Micro 项目中,推荐采用“三级漏斗”策略:第一级用 Z-score 对每个特征做快速粗筛,剔除明显异常;第二级用 KNN(限制训练样本数 N≤200)对通过粗筛的样本做距离判定;第三级将疑似异常样本的特征向量送入 TFLite Micro 模型(如 Autoencoder)做最终确认。LOF 更适合在开发阶段离线分析数据分布,用于确定前两级方法的阈值和特征选择。

4.5 实战中的组合策略与调优经验

在实际传感器系统中,没有任何单一方法能应对所有异常模式。例如,Z-score 擅长检测幅值突变,但对缓变漂移不敏感;KNN 能捕捉多变量联合异常,但计算开销大;LOF 能发现局部密度异常,但参数调优复杂。一个经过验证的组合策略是:

  1. 特征工程:从原始波形中提取 5~8 个特征,包括 RMS、峰值因子、波形因子、频谱质心、频带能量比等。
  2. 粗筛层:对每个特征独立计算 Z-score,若任一特征超过 4σ,直接判定为异常(快速响应)。
  3. 精判层:对通过粗筛的样本,计算其到历史正常样本的 KNN 距离(k=10),若超过 95% 分位数,则标记为疑似异常。
  4. 模型层:将疑似异常的特征向量输入 TFLite Micro 上的 Autoencoder 模型,重建误差超过阈值则确认异常。
风险提示:组合策略会增加系统复杂度,且每层都可能产生误报或漏报。务必在部署前使用带标签的历史数据(包含正常和各类异常)进行端到端验证,记录每层的检出率和误报率。在 MCU 上,还需注意浮点运算的精度问题——建议使用 Q15 或 Q31 定点格式,避免不同层之间因精度损失导致判定不一致。

总结而言,统计方法是最轻量的第一道防线,距离方法是可靠的多维判定器,密度方法则是处理复杂分布的高级工具。在 TFLite Micro 的约束下,合理搭配这三类方法,可以在有限资源内实现高精度的传感器异常检测。开发时应先从统计方法入手建立基线,再逐步引入距离和密度方法,每增加一层都要评估其带来的计算开销和误报率变化。