上个月整理公司代码库翻出来一个2019年写的监控脚本就十几行读PLC采集的温度序列算均值和标准差超3sigma就报警。让我有点感慨的是这个脚本至今还在一家建材厂的窑炉车间里跑着没出过大问题。而同一个代码库里还躺着一个2023年写的Anomaly Transformer实验代码训练了几百个epoch最后没有上线。从3sigma到Transformer中间踩过的坑比写过的论文都多。这篇文章就把这几代方法的演进、各自的适用边界和翻车现场捋一遍。第一代3sigma不是垃圾是基线先给3sigma正个名。它假设数据近似正态分布超过μ±3σ判为异常就这三行逻辑覆盖了工业现场一大批慢变量场景储罐液位、环境温度、油箱油温——变化平滑、物理上不可能突变的信号。它真正的死穴是非平稳。转速变化的电机电流、负载波动的轧机力矩μ和σ本身在漂移固定阈值天天误报。我们2019年就在风机功率数据上翻过车白天负荷高、夜里负荷低用全局3sigma每天下午四点准时异常其实是负荷爬坡。所以我的观点一直很明确3sigma不是被淘汰的方法是用错场景的方法。任何新传感器信号上手我都会先跑一遍3sigma看分布它是最快的健全性检查。第二代滑动窗口统计让阈值活起来要处理非平稳最直接的思路是让统计量跟着数据走。EWMA指数加权移动平均和CUSUM累积和是这一代的代表本质都是用近期数据定义正常。EWMA对缓慢漂移特别敏感。轴承磨损引起的温度逐月爬升全局统计可能永远追不上EWMA窗口内几周就能拉响。CUSUM专门抓持续性小偏移在过程工业用得多。这一代的坑在窗口和灵敏度的调参。窗口太短正常工况切换开机、换产被误报太长故障响应又慢半拍。那时候调一套参数要跑好几天的历史回放没有捷径就是笨功夫。但现在回头看这套笨功夫打下的对数据的体感比后来学任何算法都有用。第三代机器学习入场Isolation Forest和自编码器测点数量上来之后统计方法不够用了。300个测点互相耦合谁跟谁正常、谁跟谁不正常人眼看不过来。这一代我们主力用两个东西。Isolation Forestscikit-learn 1.3.x里几行代码适合多维特征联合判断这个工况点有多孤立训练快、内存友好我们常拿它做设备运行工况的粗筛。真正的主力是LSTM自编码器模型只学正常数据重构误差大就是异常。它最大的好处是不需要故障样本——工业现场本来就凑不出多少故障标签这个现实约束比任何算法偏好都硬。最小可用的实现大概是这个样子PyTorch 2.1import torch import torch.nn as nn class LSTMAE(nn.Module): def __init__(self, n_feat8, hidden64): super().__init__() self.encoder nn.LSTM(n_feat, hidden, batch_firstTrue) self.decoder nn.LSTM(hidden, n_feat, batch_firstTrue) def forward(self, x): # x: [batch, seq_len, n_feat] # 窗口长度建议取一个工况周期的整数倍不然重构误差有周期性起伏 _, (h, c) self.encoder(x) h_last h[-1] # [batch, hidden] dec_in h_last.unsqueeze(1).repeat(1, x.size(1), 1) out, _ self.decoder(dec_in, (h, c)) return out注意这里有两个容易翻车的细节训练集只用正常段数据验证集里要故意混一点已知故障段用F1分数找重构误差阈值——别用最大误差当阈值那是对异常值的过拟合另外一定要做滑动窗口重构不要单点重构单点的重构误差抖动太大误报根本压不下去。在一家水泥厂的生料磨上8个测点、10秒采样LSTM-AE把误报率从统计方法的每天20多次压到2次以内还提前40分钟报出了主轴承温度漂移。这是它值得花钱的地方。第四代Transformer系光环之下要冷静2022年Anomaly TransformerICLR 2022火了之后我们2023年在两组数据上认真复现过。说实话结果泼了冷水。公开的SWaT水处理数据集上复现指标和论文差距不大没啥好说的。但换成我们自己的钢厂轧机数据——非平稳、工况切换频繁——它的表现不如调好的LSTM-AE。论文里的关联差异机制在高噪声、强非平稳的工业信号上没有展现出预期优势训练成本倒是翻了将近十倍A10显卡上LSTM-AE两小时跑完的训练它要一天多。有意思的是2024年之后时序基础模型TimesFM、Chronos这类预训练模型流行起来零样本异常检测成了新方向。我们在风机数据上试过Chronos的zero-shot打分效果中规中矩——不如在domain数据上微调过的小模型但胜在不用训练适合新设备上线初期的冷启动。这个定位我觉得是合理的但把它吹成异常检测的终点就过了。我的判断一直没变80%的预测性维护异常检测场景滑动窗口统计Isolation ForestLSTM-AE这套组合拳足够了剩下20%里的一半是数据质量没做好换什么模型都白搭。Transformer留给真正需要长程依赖建模、且数据质量过硬的场景。最后说两句方法演进这些年我最深的体会是异常检测的天花板往往不在算法而在你对正常的定义有多清楚。3sigma的μ±3σ是一种正常LSTM-AE学到的数据流形也是一种正常——前者清楚但粗糙后者精细但黑盒。别为了用新模型而用新模型。先把信号的物理意义搞明白再谈算法这个顺序不能反。