预测性维护中的时间序列异常检测:从3sigma到Transformer

上个月整理公司代码库,翻出来一个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 Forest,scikit-learn 1.3.x里几行代码,适合多维特征联合判断"这个工况点有多孤立",训练快、内存友好,我们常拿它做设备运行工况的粗筛。

真正的主力是LSTM自编码器:模型只学正常数据,重构误差大就是异常。它最大的好处是不需要故障样本------工业现场本来就凑不出多少故障标签,这个现实约束比任何算法偏好都硬。

最小可用的实现大概是这个样子(PyTorch 2.1):

python 复制代码
import torch
import torch.nn as nn

class LSTMAE(nn.Module):
    def __init__(self, n_feat=8, hidden=64):
        super().__init__()
        self.encoder = nn.LSTM(n_feat, hidden, batch_first=True)
        self.decoder = nn.LSTM(hidden, n_feat, batch_first=True)

    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 Transformer(ICLR 2022)火了之后,我们2023年在两组数据上认真复现过。说实话,结果泼了冷水。

公开的SWaT水处理数据集上,复现指标和论文差距不大,没啥好说的。但换成我们自己的钢厂轧机数据------非平稳、工况切换频繁------它的表现不如调好的LSTM-AE。论文里的"关联差异"机制,在高噪声、强非平稳的工业信号上没有展现出预期优势,训练成本倒是翻了将近十倍:A10显卡上LSTM-AE两小时跑完的训练,它要一天多。

有意思的是,2024年之后时序基础模型(TimesFM、Chronos这类预训练模型)流行起来,零样本异常检测成了新方向。我们在风机数据上试过Chronos的zero-shot打分,效果中规中矩------不如在domain数据上微调过的小模型,但胜在不用训练,适合新设备上线初期的冷启动。这个定位我觉得是合理的,但把它吹成"异常检测的终点"就过了。

我的判断一直没变:80%的预测性维护异常检测场景,滑动窗口统计+Isolation Forest+LSTM-AE这套组合拳足够了;剩下20%里的一半,是数据质量没做好,换什么模型都白搭。Transformer留给真正需要长程依赖建模、且数据质量过硬的场景。

最后说两句

方法演进这些年,我最深的体会是:异常检测的天花板往往不在算法,而在你对"正常"的定义有多清楚。3sigma的μ±3σ是一种正常,LSTM-AE学到的数据流形也是一种正常------前者清楚但粗糙,后者精细但黑盒。

别为了用新模型而用新模型。先把信号的物理意义搞明白,再谈算法,这个顺序不能反。

相关推荐
高洁019 小时前
数据同化与动态状态估计:让孪生持续贴合现实
人工智能·python·深度学习·transformer·迁移学习
2601_967979123 天前
这7个小众Python库,才是机器学习工程化的降效神器
机器学习·推荐系统·工程化·时间序列·python库
一起学安全技术3 天前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer
风巽·剑染春水3 天前
【Generative AI综述】生成式人工智能在医学影像中的应用(ACME-2026)
人工智能·transformer·gan·vae·生成模型·扩散模型·医学影像
机器学习之心3 天前
5 个特征、2 个输出:让 DBO 替 CNN-Transformer 挑结构,再用 SHAP 把黑箱撬开
人工智能·cnn·transformer·cnn-transformer
bryant_meng4 天前
【TNT】《Transformer in Transformer》
人工智能·深度学习·transformer·word embedding·tnt·sentence embed
怎么全是重名5 天前
VerdictAD
人工智能·异常检测·few-shot·zsas·异常分割
布吉岛的石头6 天前
Java 程序员第 50 阶段14:灾难性遗忘与回放
人工智能·深度学习·transformer
weixin_468466856 天前
视觉Transformer的“第二次革命”:ViT³如何用测试时训练重构注意力范式
人工智能·深度学习·机器学习·ai·重构·transformer·vit
DevOps老兵7 天前
Transformer拆解13:现代大模型改了什么,RoPE、RMSNorm、SwiGLU与GQA
transformer·gqa·rope·rmsnorm·swiglu