基于CNN-LSTM的设备预测性维护实战:从数据采集到故障预警
2026/9/8 17:42:06 网站建设 项目流程

1. 预测性维护到底在解决什么问题:从一次非计划停机说起

做设备管理的人,大概都经历过那种凌晨三点被电话叫醒的时刻。空压机跳机了、冷冻机组高温报警了、风机轴承碎了,生产停线一个小时损失以万计,维修工抢修完才发现,真正的故障前兆早在三五天前就藏在数据里——只是没人看。

我这些年一直在做能源与设备数据相关的工作,经手的项目多数绕不开一个词:预测性维护。所谓预测性维护,通俗讲就是设备还没坏的时候,靠数据判断它"快要坏了",在故障真正发生之前把维修安排进计划。它夹在事后维修和定期保养中间,事后维修是坏了再修,成本最高;定期保养是到点就换,浪费不少可用寿命;预测性维护则是盯着设备的状态量,磨损加剧了、振动异常了、温升趋势不对劲了,提前预警。这个思路本身不新鲜,但落地难度长期被人低估。难点不在模型,而在数据怎么进得来、特征怎么提得准、预警之后现场怎么闭环。

这套逻辑真正跑通,是我在 MyEMS 平台上做的一套设备健康监测系统。MyEMS 本身是开源的能源管理平台,擅长采集、清洗、存储能源与设备运行数据,但默认并不带预测算法。我在它上层接了一套基于 CNN-LSTM 的故障预警模型,跑在电机类旋转设备上,用历史运行数据训练,最终实测汇总准确率到 92% 左右。这篇文章把这次实战从数据到模型再到部署的完整思路拆开讲,包含踩坑过程。

哪些人适合读这篇文章?如果你正在做设备健康管理、能源管理系统二次开发,或者刚接触时序数据预测但不知道怎么选模型、怎么做特征、怎么评估效果,这篇文章应该能省你不少调研时间。如果你是纯算法背景但不熟悉能源设备侧的脏数据,也会看到一些平时论文里不讲的实际问题。

2. 为什么选择 MyEMS 作为落地底座:数据采集层决定了模型的天花板

模型再好,喂进去的数据是脏的、碎的、断的,照样白搭。我见过很多项目死在第一步:训练数据从机房导出,特征是临时拼的,时间戳对不齐,设备标识一个项目一个叫法,模型调参调通了,换一台设备就废。原因多半是底层数据层没做扎实。

2.1 开源能源平台的定位与 MyEMS 的架构优势

MyEMS 在圈子里的定位是能源管理系统的开源底座,架构大致是数据采集层、数据网关、数据库、后端服务和 Web 界面。它支持 Modbus TCP、BACnet、OPC UA 等多种通信协议,能对接绝大多数工业现场的 PLC、仪表、电表和传感器。这一层对预测性维护来说是最关键的——算法团队通常没有精力自己写驱动去采集各种异构设备的数据,而 MyEMS 把设备接入这件事标准化了,它对上层的模型来说就是一个干净、稳定、带时序标签的数据源。

我的做法是把 MyEMS 作为历史数据仓库和准实时数据总线使用。设备运行数据经由 Modbus 采集进 MySQL(或 PostgreSQL),模型训练时直接读取指定时间窗口的工况数据,在线推理时则通过内部 API 拉取最近若干秒的实时数据。这比从零写一套数据平台要省非常多事,而且开源项目本身还在更新,后面接新的设备类型也方便。

2.2 采集点位设计的取舍:别把所有数据都往模型里塞

预测性维护落地时最大的误判之一,是觉得数据越多越好。实际并不是,数据越多的项目,往往在数据清洗上花的精力就越庞大,真正在建模时能提供增量价值的反而集中在少数几个点位上。

我在这个项目里主要采集的是这几类状态量:

  • 电流:三相电流、平均电流、启动电流峰值
  • 功率:有功功率、无功功率、功率因数
  • 温度:电机本体温度、轴承温度、冷却水温度
  • 振动:如果没有专业振动传感器,至少保留电气量中反映的转矩脉动信号
  • 运行状态:启停、负载率、累计运行时长

这里有个经验供参考:初期宁可用粗一点但完整的时间序列,也别用精确但断断续续的采样。MyEMS 的采集周期可以调到秒级,但对大多数故障建模来说,10秒级甚至分钟级的稳定采集已经足够。采样频率太高的直接后果是数据量大,模型训练慢,而且工业现场的电气噪声高频成分会干扰对缓变趋势的识别。我的最终方案是 5 秒一个点存储历史,训练时按 1 分钟做聚合重采样。

2.3 为什么把第一刀切在电机与泵类设备上

预测性维护的应用范围很广,风电齿轮箱、机床主轴、压缩机、水泵、传送带都有对应方案。第一刀切在哪里很重要。我选择的是电机及由其驱动的泵类、风机类旋转设备,原因有三个。第一,它们占工厂设备总量的比例最高,通用性强,模型换一个产线大概率还能复用;第二,故障机理相对清楚——轴承磨损、转子偏心、润滑失效、绕组绝缘劣化,这些故障在电流信号和温度信号上都有比较明显的模式;第三,这类设备本身价值不如大型透平机高,但停机影响面大,试错成本相对可控。

如果一开始就冲着大型昂贵机组去做,数据量少、故障样本稀缺、停机风险高,项目推进阻力会非常大。从小型但数量多的设备做起,先把数据链路和管理闭环打通,再逐步扩展到关键大型机组,这条路走起来会顺畅不少。

3. 从原始数据到训练样本:故障不是你想象中那种一眼能看出来的东西

前面说了采集的问题,下一步就是数据准备。工业数据做训练,最耗时、最容易翻车的基本都在这个环节。我踩过的坑包括:时间戳不对齐、设备启停状态混淆、正常区间里隐藏的早期劣化数据混进训练集导致模型学歪,等等。

3.1 数据清洗第一关:把停机段和正常运行段彻底分开

用电机设备举例,最难处理的问题是停机状态。设备停机时电流为零,功率为零,温度慢慢下降,这些数据如果直接拿去建模,模型会学到"电流小=故障"这种荒谬规律。因为停机段的特征分布和正常运行差距过大,如果不分开,模型容易把停机当成异常,甚至把停机当故障来预警,误报率会让人完全没法用。

处理方法是先把运行状态离散化:用电流值或功率值判断设备是否在运行,低于额定 30% 视为停机,然后只对正常运行段做故障识别和预测。这个听起来很简单,但实际操作中有几个边界情况要注意:设备在低频运行时的电流和故障初期的电流下降可能很相似;有些设备有备用切换逻辑,短时间停机再启动很频繁,不能简单按连续运行时间切段。我最后写了一套基于滑动窗口的状态打标器,结合启停信号和电流阈值,输出带状态标签的数据段,才把这个问题处理干净。

3.2 滑动窗口与标签:怎么定义"还有多久坏"这个问题

预测性维护本质上是预测一个时间点之后设备是否会发生故障。定义这个"之后"很关键。

我做的是退化趋势预警这一类问题。给每个训练样本定义一个预测窗口,比如"未来 24 小时内是否会发生故障"。如果设备在时间点 t 之后的 24 小时内发生故障,那么 t 时刻的样本就标记为正样本,否则为负样本。这里还有个细节:设备故障发生前的一段时间内,信号通常已经偏离正常状态,如果这段劣化期也打进正样本,模型学会的是识别劣化本身,存在把故障之后又当成正样本、但维修还没跟上导致逻辑混乱的风险。所以我在打标时,会把实际故障点之前的一段數據(比如故障前6小时之内)排除在训练集之外,避免标签含糊。

再看滑动窗口怎么切。时序模型读的是连续片段,比如一条样本包含最近 128 个时间步,每个时间步是一组特征向量(电流、功率、温度等)。窗口长度决定了模型能看到的"历史长度"。窗口太短,早期劣化趋势看不出来;窗口太长,训练样本间的重叠度过高,模型容易过拟合到重复数据上。我试过从 32 步到 256 步的多种窗口,效果比较均衡的是 128 步,也就是大约两小时的历史数据,因为轴承磨损、绕组过热这类故障的趋势周期一般以小时为单位,太短了趋势不稳定,太长了各种噪声又混进来。

3.3 故障样本不够怎么办:数据增强与罕见故障处理

预测性维护里逃不过的一个现实问题是:故障样本天然稀少。设备大多数时间都在正常运转,真正坏的时候样本才几条,如果指标只看整体准确率,模型会极其容易变成"永远预测正常"也能拿到 99% 准确率。

解决样本不平衡的思路有好几条线,我实际用到的主要有三类:

一是生成合成的少数类样本。对时序数据做窗口滑动增广(用不同起始位置切出多个重叠样本),引入少量噪声扰动来增加多样性。二是加重故障类在损失函数中的权重,让模型更在意正类样本的分类错误。三是收集同类设备的历史故障数据合并训练,用两台相似设备的故障样本一起训练,比单台设备硬生生训练靠谱得多。

这三条线不是三选一,而是叠加使用的。尤其是第一条增广,成本低收益明显,值得优先做。

4. CNN-LSTM 模型:为什么我不直接用 LSTM 或者单纯上 Transformer

选定 MyEMS 做数据底座之后,模型选型是一个绕不开的核心决策。我当时面临三个候选:纯 LSTM、纯 CNN、以及 CNN-LSTM 混合。最终选了 CNN-LSTM,说下判断依据。

4.1 CNN 在时序任务里到底在提取什么

很多做时序的人对 CNN 有误解,认为它是图像专用网络。其实一维卷积在时间序列上的作用非常直观:它就像是沿时间轴滑动的多个"模式模板",自动发现信号里的局部形状特征——比如电流上升沿的陡峭程度、某种周期性波动的幅度、轴承故障引发的特定频率尖峰。CNN 能够以平移不变的方式捕获这些局部模式,即使故障特征在时间轴上稍有偏移,卷积输出仍能保持一致响应。

在 CNN-LSTM 混合结构里,CNN 层更像是一个自动特征提取器:先用若干层卷积核扫描原始特征序列,把每个窗口内的局部特征压缩成一组更紧凑的表示,再把这一串特征表示喂给 LSTM。这样做的好处是 LSTM 不必面对最原始的高噪声数据,而是面对已经提取过一轮局部模式的中层特征,学习长程依赖关系时压力小很多。

4.2 LSTM 部分处理的是什么逻辑:趋势、周期与状态转移

LSTM 擅长的是建模时间上的顺序依赖。旋转设备的故障过程本质上是状态转移过程:正常态到微妙劣化,劣化积累到一定程度出现早期异常信号,早期异常信号再发展成明显故障。这些状态之间有先后顺序、有时间长短,不是某一个时间点上的孤立数值能表达清楚的。

LSTM 的三道门结构(遗忘门、输入门、输出门)让网络能记住"这个设备在过去两小时里电流基值经过了怎样的变化",并且在温度读数短时间受环境影响波动时不会惊慌失措改变判断。这是单靠 CNN 或者其他前馈结构做不到的。把 CNN 提取到的局部特征灌给 LSTM,LSTM 再学习它们之间的时间顺序和依赖模式,就构成了一个比较完备的"局部特征提取 + 时序演变建模"链路。

4.3 我最终的网络参数与为什么这么设

这次项目采用的网络结构大概如下:

# 基于 Keras 的 CNN-LSTM 结构示意 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense, Dropout, Flatten, BatchNormalization model = Sequential([ # 第一层一维卷积:16个卷积核,卷积核大小为8,检测短期局部模式 Conv1D(filters=16, kernel_size=8, strides=1, padding='same', activation='relu', input_shape=(128, 9)), BatchNormalization(), MaxPooling1D(pool_size=2), # 第二层一维卷积:32个卷积核,卷积核大小变为5,组合上一层特征为更复杂的模式 Conv1D(filters=32, kernel_size=5, strides=1, padding='same', activation='relu'), BatchNormalization(), MaxPooling1D(pool_size=2), # LSTM 层:64个单元,捕获时间依赖 LSTM(units=64, return_sequences=False, dropout=0.2, recurrent_dropout=0.2), Dropout(0.2), # 输出:二分类,故障预警 or 正常 Dense(units=1, activation='sigmoid') ]) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

输入形状是 (128, 9),128 是时间步数,9 是特征数。第一层卷积设置 16 个卷积核、卷积核尺寸为 8——核尺寸 8 意味着每看 8 个连续时间点(约 8 分钟)找一次局部模式,比较适合捕捉缓变温升和电流波动。第二层卷积扩展为 32 个核、核尺寸 5,是为了把第一层提取的 16 组局部模式进行组合,形成更高阶的特征。两层卷积之后再接 LSTM 时,LSTM 已经不需要承受原始信号的强噪声,输入特征的维度也降下来了,训练收敛更快。

BatchNormalization 的作用是让每层输入保持在相对稳定的分布上,尤其是 CNN 层的输出分布变化快,做批归一化能减少内部协变量偏移。Dropout 在 LSTM 层和全连接之前的连接处各放了一层,丢 20% 的神经元来缓解过拟合。两个 MaxPooling 把步长从 128 降到 32,显著降低 LSTM 的计算压力。

如果把这个结构替换成堆叠三层的纯 LSTM,训练时间大约是混合结构的 2 到 3 倍,且准确率在我的测试集上还低了几个点,原因大概率是原始噪声对 LSTM 门控更新的干扰比预期大。而替换成纯 CNN 后,短期特征识别没问题,但对长程演变模式的感知明显偏弱。这个实验对比过程也印证了 CNN-LSTM 组合对这类工业退化数据的适配性。

4.4 为什么没选 Transformer:数据量和场景的双重考虑

Transformer 这几年的势头很猛,我不否认它在长序列建模上的优势。但在当时这个项目里我不选它,原因很简单:数据量不够。Transformer 的核心优势在于能从海量数据里学到复杂的全局注意力关系,前提是喂给它的数据足够多。工业预测性维护场景的数据量往往只是几十台设备几个月到一年的历史数据,撑不起一个 attention 矩阵的大规模参数训练。

Transformer 对训练稳定性也更敏感,需要更多调参经验,对部署团队的工程能力也有要求。CNN-LSTM 相比之下参数规模更可控,收敛更快,在中小规模工业数据集上的表现已经足够好,综合效率和性能是一个更稳妥的方案。

4.5 模型对比:同一个测试集上不同模型的实测表现

为了说明模型选择不是拍脑袋,我把同一份数据分别喂给了几种不同结构,在保留的测试集上做了一次横向对比。测试集来自两台没有被用于训练的泵机设备,时间跨度两个月,包含一次轴承磨损故障和一次对中不良故障。

模型准确率精确率(故障类)召回率(故障类)F1
纯 LSTM(3层)88.4%79.6%82.1%0.81
纯 CNN(3层)85.1%70.3%68.7%0.70
CNN-LSTM(2层CNN + 1层LSTM)92.0%86.8%84.2%0.85
Transformer(小参数量)89.2%81.5%77.9%0.80

整体准确率看似只差几个点,但是在故障样本本来就少的情况下,召回率的差距意味着能捕捉到的实际故障次数差别明显。CNN-LSTM 在故障类召回率上的优势是最关键的一点,它真正做到了"该报的基本都报了"。

5. 92% 这个数是怎么算出来的:评估方式比模型本身更容易藏猫腻

宣布准确率之前,必须先定义清楚"准确率"三个字。我经常看到一些项目汇报说准确率 97%,结果深问下去,是拿正常样本的单类别来算的,故障完全没抓到,这种 97% 没有实际意义。更科学的做法是画混淆矩阵看细粒度指标。

5.1 时间维度上的样本切分:避免数据穿越

数据切分是工业时序建模最容易做错的地方,我本人第一版代码也在这里栽过跟头。普通机器学习里随机打散数据切出训练集和测试集问题不大,因为各样本间独立。但时序数据不同,同一台设备的相邻时间点高度相关,如果随机打散,训练集里会混入测试时段的信息,测试结果自然虚高,这在业界叫数据穿越。

解决方法是按时间顺序切分:用前 80% 时间的数据做训练,保留最后 20% 时间的数据做验证和测试。并且同一时间窗口内的样本必须整体归属同一个集合,不能有重叠。我当时第一版是用随机切分,测试准确率堆到 96% 左右,换成时序切分后掉到 92%,这个落差虽然让人沮丧,但后面上线验证时才发现 92% 才是真实水平。

5.2 阈值调节:92% 的系统准确率背后有一个人为决策

很多模型默认用 0.5 作为故障判断阈值,即输出概率超过 0.5 就报警。但实际场景里 0.5 并不一定是最优阈值。如果阈值设高,误报减少但漏报增多;阈值设低,漏报减少但误报激增。对预测性维护来说,误报带来的成本是人工去现场检查一次,漏报带来的成本是设备彻底损坏和产线非计划停机,显然后者严重得多。

我基于验证集概率分布做了阈值扫描,发现把阈值设在 0.38 左右时,召回率提升明显,而误报数量的增加还在可接受范围内。整体系统的"故障预警准确率 92%"就是在这种情况下计算出来的:预测为故障且确实发生了故障的样本数,除以所有被预测为故障的样本数。出于平衡考虑,我没有继续过度压低阈值来换召回率,不然误报率上升会损害运维人员对系统的信任度,最终系统被关停的项目我见过不止一个。

6. 在线推理与工程部署:一个模型能跑起来只是万里长征第一步

模型训练得好是一回事,真正放到现场 7×24 小时跑起来是另一回事。这里涉及的问题包括实时数据延迟、推理频率、告警去重和人工反馈闭环。很多团队在这一步会明显感觉到,算法问题解决后,剩下的都是工程问题,而这些工程问题往往决定了项目能否长期存活。

6.1 推理时延与数据新鲜度:多长时间推一次最合理

理论上数据采集是每秒一次,模型推理理论上也可以每秒一次。但这完全没有必要。设备故障演化以小时为单位,推理频率过高只会增加后端负担并增加误报波动。我在实践中是把推理频率定为每分钟一次,每次读取最近 128 分钟的数据序列并输出一个故障概率。一分钟里即使有若干秒的数据点抖动,对最终输出的影响也是有限的,模型的输出稳定性反而更好。

推理时延在 MyEMS 上实测保持在几十毫秒量级,CPU 上运行这个规模的 CNN-LSTM 足够了。由于没有硬实时要求,不需要上 GPU,生产环境用几台 CPU 服务器部署完全没有压力。这个量级也意味着,就算将来把推理频率加密到每 10 秒一次,单机也能撑住,弹性空间很大。

6.2 告警去重与静默期机制:不被批量报警淹没

模型上线初期我犯过一个错误:直接对每分钟的推理结果发告警。于是某天设备发生轻微波动,系统在一个小时内连续告警了几十次,运维人员直接选择屏蔽这个告警通道。后知后觉才明白,预测性维护的告警不是每分钟判断一次的概念,而是"设备是否进入了需要关注的劣化阶段"这个概念。

后来的做法是引入一个状态机:只有当连续 N 分钟内故障概率持续超过阈值时才触发告警。N 取 10 到 30 分钟之间。正常波动不会触发,持续劣化才会。一旦触发,进入"已告警"状态后会进入一个静默期——比如 24 小时内不再重复告警同一台设备,除非模型概率先回落到正常区间再重新触发。

这套去重机制上线后,整个告警系统终于从讨人嫌变成了真正能用的工具。技术含量不高,但对系统价值的贡献比我调试模型结构还要大。

6.3 人工反馈闭环:告警后如何处理才能让模型越用越准

如果模型告警之后没有记录现场处理结果,那么模型的演进就是一句空话。预测性维护的本质是一个循环系统:模型输出告警 -> 现场人员检查 -> 确认是哪种故障、还是误报 -> 结果标记反馈 -> 定期用真实反馈数据重新训练模型。

MyEMS 平台上本身就带工单管理的概念,但没有内置预测维护工单的接口逻辑。我在上面加了一个内部 Web 接口,让工程师在 App 上报"故障确认为轴承磨损"或者"检查后无异常(误报)",这两个标签会回流到数据库中,成为下一轮模型训练时的验证样本。这套闭环流程的关键意义在于,故障样本库会随着运行时间逐渐扩大,模型精度会越跑越高。到项目后期,我们单靠这些反馈样本就积累了一个比原始历史故障丰富得多的故障库。

7. 实战过程记录:一台水泵从正常到故障到底经历了什么

上面讲了很多模型和框架,最终落地还是要看一个完整的实例。分享一次真实记录的水泵从正常状态到报警的完整数据演化过程,这样大家对前面讲的内容会有更直观的感受。

7.1 故障前的信号演化时序:正常期、萌芽期、预警期、故障期

关注的这台水泵负责冷却水循环,电机额定功率 22kW。故障类型最终确认为驱动端轴承润滑脂干涸导致的磨损加剧。从数据上看,信号变化可以清晰分为四个阶段。

正常期(D-30 到 D-7,约 23 天):三相电流均值在 28A 到 30A 之间波动,电机轴承温度稳定在 46°C 到 52°C 之间,功率因数在 0.85 左右,一切平稳。

萌芽期(D-7 到 D-3):振动值没有明显变化,但轴承温度开始以每天 0.5°C 到 1°C 的速度缓涨,从 51°C 涨到 53°C,电流均值升高到了 31A。这些变化单日看都微不足道,人工看报表很难察觉。

预警期(D-3 到 D-1):温度曲线斜率明显上升,从 53°C 涨到 58°C,电流出现了一些低频波动,功率频谱中存在 0.5Hz 到 1Hz 的边缘分量。CNN-LSTM 在这个阶段已经连续产生了超过阈值的高概率输出。

故障期(D 日):轴承温度突破 70°C,电流摆动幅度加大,振动传感器如果装了的话应该能看到明显加速度峰值,随后轴承保持架损坏前的噪声显著加剧。这时系统在第 4 章状态机触发逻辑下,于故障前约 7 小时发出了预警。

7.2 这次预警的价值核算:一次计划内维修替代了非计划停机

现场工程师收到预警后做了一次点检,判断轴承温度异常升高且润滑脂已经发黑变质,于是安排了一次计划性停机,轴承更换加上调试总共用了约 9 小时。如果把这次故障拖到彻底抱死,产线冷却循环中断导致的停线时间至少 30 小时起,且可能损伤电机绕组,维修成本会高出一个数量级。计划内换轴承的成本只有几百到两三千元备件加工时费,而一次意外停线事故的综合损失往往数万元起步,这中间的差值就是预测性维护核心的经济价值。

这正是我去给企业讲方案时反复强调的一点:预测性维护的 ROI 不要抽象地去算,拿一次真实故障推演一次比较即可。故障提前了多少小时发现、安排在什么时间修、为此付出多少成本,账目一目了然。

8. 常见问题与排查技巧实录:这些坑我不希望你再踩一遍

做这套系统前后折腾了大半年,中间积累了不少问题和对应的处理手感。整理一批有共性的,希望读者少走弯路。

8.1 数据质量与特征工程类问题

问题现象可能原因处理方法
模型在验证集上精度高、现场误报多数据穿越或训练集测试集重叠严格按时序切分,禁止随机打散
凌晨时段频繁报警环境温度低导致设备温度偏低、相对变化被放大给特征做设备自回归差分,使用滑动窗口内的变化量
设备启动后立刻误报启动瞬间的浪涌电流被当作异常排除启动后前 5 分钟数据,或把运行状态标签过滤前置
传感器断线产生零值和跳变采集链路异常用前后值线性插值修复,并在特征中加入质量标记
数据时间戳错位几分钟多路采集线程时序不一致按采集时间重新索引,并在特征里加入采集间隔差

这里面最想重点提的是时间戳对齐问题。工业现场很多采集链路里会有不同设备不同周期的情况,实际运行起来一条数据在设备 A 上是 10 点 00 分 02 秒,设备 B 上是 10 点 00 分 07 秒,误差几秒对单点数据没有影响,但在 CNN 卷积核一滑动时,如果错位导致电流与功率的相位关系失真,模型学到错误的联动模式,影响会不小。所以我在工程实现里加了一步强制重采样:按整分钟对齐所有点位,同一分钟内多点的取平均,缺点的用前值填充。

8.2 模型训练与调参类问题

第一个常见问题是训练 loss 降不下去。我一度遇到过这个情况,后来发现是数据里混入了大量停机段和传感器断线段。清洗之后 loss 马上降到合理区间。

第二个是过拟合严重。故障样本太少时,LSTM 很容易把训练集里的故障样本逐条背下来。我的解决思路是加大数据增强倍数,同时调低模型容量,把 LSTM 隐藏单元从 128 降到 64,Dropout 从 0.1 提到 0.2,效果立竿见影。

第三个是模型对某一台设备表现很好、换一台就失灵。这往往是设备个体差异太大造成的。润滑状态、负载率曲线、环境温度不同,同样的特征分布偏移很多。处理方法有两种:一种是做归一化时按每台设备自己的均值和标准差来,而不是用全局的归一化参数;另一种是做迁移学习——先用多台设备的数据训练一个通用模型,再针对目标设备用小样本微调模型最后几层的参数。迁移学习在这类场景里极其有效,值得多花时间。

8.3 部署与运维侧问题

模型文件版本管理是常被忽视的一环。线上模型迭代几版后,如果没有版本号关联,到时候出了问题都不知道是数据问题还是模型回退了。我在 MyEMS 的配置表里新增了一张模型版本表,记录上线时间、训练数据区间、阈值参数和验证表现,告警时也会在消息中带上版本号,排障链路顺畅很多。

另一个是告警消息的通道选择。最开始只接邮件通知,结果预警邮件半夜来得太安静,等看到已经晚了。后来换成企业微信机器人 + 短信双重推送的通道,预警消息直接到当班工程师手机。因为 MyEMS 有 HTTP 回调能力,自己写一个告警转发服务并不复杂。技术上很好实现,关键是要在项目一开始就确认好告警责任人制度,否则告警发出去没人处理,前面所有工作等于白做。

8.4 样本不平衡问题的细节考量

很多讨论样本不平衡时只讲加权重和过采样,但在预测性维护场景里还有一个容易被忽略的工具:在负样本中删掉设备健康状态稳定期的冗余部分。靠近故障前的负样本和远离故障期的负样本,对模型决策价值完全不同。以窗口为单位分析时,可以把数据集中每个正常运行窗口距离最近一次故障的时间作为样本权重,靠近故障的负样本权重高,远离的则可以不放入训练集或降低权重。

这属于数据级和算法级相结合的处理思路,实践效果比单纯调 loss 权重更好,因为在删冗余负样本的同时,也顺带减少了训练时间。

9. 从传统维护流程到预测性维护:落地中要避开的组织协作暗礁

前面聊的主要是技术实现。但一个真实项目能否存活,技术和组织流程至少要各占一半。项目做到后期我越来越清楚地意识到,最大的阻力往往不是模型效果不够好,而是现场维护团队不敢信、不想用。

9.1 现场维护团队的信任建立:先挑可控的小节点打样

很多算法团队习惯性把模型效果汇报做成一组漂亮的曲线图,然后期望现场一次性切换过去。但一线工段长会问:你说要坏,万一我停机检查没坏,这个损失谁承担?在设备管理文化中,误报对系统信用的杀伤力远大于漏报,因为漏报还可以归因于偶发意外,而误报会直接导致"这套系统就是拿来折腾人"的评价。

我后来把上线策略改成先选一条影响面很小的辅助设备线做试点(比如一台非主工艺流程的冷却水泵),约定首月只记录不主动干预,让现场熟悉系统输出。跑通几次真实预警后,运维团队自然会建立信任。直接上关键设备且一上来就指望完全取代人工巡检,一定会翻车。

9.2 数据、算法、运维三条线的责任划分

预测性维护系统维护起来涉及三个角色,必须在项目初期就明确协作边界。数据工程师负责确保采集链路稳定,哪些点位掉了要能在 30 分钟内被发现;算法工程师定期用新数据迭代模型并做评测;运维侧需要有人审核每一条预警、标记处置结果。

这套机制里最薄弱的一环通常是标签反馈。如果运维不在现场处置完点一下结果标签,算法团队拿不到新样本,系统就退化成一条单方向的数据流,长期效果只会越来越差。可行做法是在工单流程里强制加一步"处置结果标记",处置按钮和标签选择绑在同一界面上,不让运维多填无关字段,反馈率才会稳定。

10. 后续演进路径:这套框架还能往哪些方向扩展

系统上线稳定之后,你会发现路径其实已经铺开了,后续扩展方向很丰富。把这次项目的一些延伸思路列出来,供后来者参考。

从数据侧看,进一步是可以接入振动传感器信号做融合分析。电流和温度能覆盖多数电气与轴承类故障,但滚动体早期点蚀、齿轮断齿这类信号极其微弱的故障,还是振动信号更直接。多模态融合不是简单地把振动加速度的统计量堆到特征矩阵里,还要考虑信号对齐和不同采样率的降采样方法,复杂度会增加不少。

从模型侧看,可以把二分类预警升级为多分类故障类型识别——轴承磨损、转子断条、对中不良、润滑失效各自建立子分类器,或者用一个多输出网络同时预测故障类型和剩余使用寿命。这样对现场排修方案制定的帮助会更直接。

从业务侧看,多台设备之间的横向对比值得关注。同一型号多台设备的健康度对比能辅助调度决策——把健康度告急的设备与健康度高的设备负载轮换,可以整体延长设备群寿命,这是一种比单台预警更有价值的生产调度策略。

我的做法是预留了扩展接口:模型输出的故障概率已经持久化到 MyEMS 数据库,后续无论做多设备横向对比还是多分类扩展,历史概率序列都是现成的训练特征。如果现在正在规划做预测性维护项目,建议一开始就把原始故障概率也存下,不用等到将来再从第一层数据重新训练,至少能省一两个月的数据追溯时间。

回到这次整套系统的搭建心得,本质上是做了一件很朴素的事:把设备管理者想知道的"什么时候会坏",拆成了"数据怎么来 - 特征怎么提 - 模型怎么选 - 结果怎么用"四个环节,在 MyEMS 这个开源的能源数据底座上全部跑通。如果我的这些经验能在你规划自己的预测性维护项目时帮你少踩几个坑,少走几段弯路,那这篇文章的时间就值回票价了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询