写点什么

机器学习技术之预测性维护

2017 年 7 月 19 日

本文要点:

  • 学习预测性维护系统(PMS),监控未来的系统故障并提前安排维护时间表
  • 探讨如何构建机器学习模型进行系统的预测性维护
  • 了解机器学习的处理步骤,如选择模型以及用 Auto-Encoder 技术去除传感器噪声
  • 了解如何训练机器学习模型,并在 WSO2 复杂事件处理器产品中运行模型
  • 应用例子,在 NASA 引擎故障数据集上用回归模型来预测剩余使用寿命(RUL)

在日常生活中,我们依赖于很多系统和机器。我们要开车出门、乘坐电梯或者搭乘飞机。涡轮能产生电,医院里的机器能让我们活着。这些系统会发生故障。有些故障只是给人的生活带来不方便,而有些故障则生死攸关。

当风险很高的时候,我们要对系统进行常规性维护。譬如,车每几个月保养一次,飞机每天保养一次。但是,如同我们在此文后面所讨论的那样,这些方法导致资源的浪费。

预测性维护能预测故障,采取行动来维修、更换系统,甚至计划何时出现故障。它能极大地节省开销、带来高的可预测性和增强系统的可用性。

预测性维护有两种形式来节省开销:

  • 避免或最小化故障停机时间。它会避免出现对故障停机不满意的客户,省钱,有时候还能挽救生命。
  • 优化周期性的维护操作。

为了了解这些,我们来看看出租车公司。如果一辆出租车坏了,该公司需要安慰不满意的顾客并派出替换的车辆,而该出租车和司机在维修期间都将闲着。故障的代价要远高于表面上的代价。

解决这个问题的一种方法是,做一个消极者,在出现故障之前就更换不可靠的组件。譬如,进行常规的维护操作,如更换机油或轮胎。尽管常规维护比出现故障好,但是我们会在系统真正需要维护之前就进行维护。因此,这不是一个最佳的解决办法。比如,每跑 3000 英里就换一次机油,不一定能有效地使用机油。如果我们能更准确地预测故障,那么该出租车可以跑几百英里而不用换油。

预测性维护避免了两种极端,最大化地利用资源。它将检测异常和故障模式,早早地给出警报。这些警报能促使人们更有效地维护这些组件。

在这篇文章中,我们将探讨如何构建一个用于预测性维护的机器学习模型。下一章节讨论机器学习技术,随后讨论例子中的 NASA 数据集。第四和第五章节讨论如何训练机器学习模型。“用 WSO2 CEP 运行模型”这一章节涵盖了如何将模型应用于实际数据流上。

用于预测性维护的机器学习技术

为了进行预测性维护,首先,我们向系统中加入了传感器,用于监控和收集系统运行的数据。预测性维护所需要的数据是时间序列数据。数据包括时间戳、在该时间戳所收集的传感器读数以及设备号。预测性维护的目的是,在时间“t”,使用截至到该时间的数据来预测设备在近期是否会发生故障。

预测性维护可通过以下两种方法之一来实现:

前一种方法只能提供一个由布尔值表示的答案,但是能从很少的数据上获得很高的准确率。后一种方法可以提供关于故障发生时间的更多的信息,但也需要更多的数据。我们将在 NASA 引擎故障数据集上尝试这两种方法。

Turbofan 引擎退化数据集

Turbofan 引擎是一种现代的汽油涡轮引擎,NASA 空间探索局用的就是这种引擎。NASA 生成了下面的数据集来预测 Turbofan 引擎运行一段时间后的故障。可以从 PCoE 数据集获得该数据集。

数据集包括每个引擎的时间序列。所有的引擎都是同一类型,但在制造过程中,每个引擎的初期的磨损程度和差异是不同的,这一点用户是不知道的。有三种可选的配置,可用于改变每个引擎的性能。每个引擎有 21 个传感器,当引擎运行时,传感器收集与引擎状态相关的测量数据。收集到的数据中有一些传感器噪声。

逐渐地,每个引擎会有一些不足,这些可以从传感器读数中发现。时间序列在发生故障前的某个时间结束。数据包括引擎单元号、时间戳、三种配置以及 21 个传感器读取的数据。

下面图 1 和图 2 显示了数据的子集。

(点击放大图像)

图1:数据子集

(点击放大图像)

图2:数据子集的前几列

该实验的目的是预测下一次故障发生的时间。

用回归来预测剩余使用寿命(RUL)

预测RUL 的目标是减小实际RUL 值与预测RUL 值之间的误差。我们用均方根误差作为衡量值,因为它会严厉地惩罚大的误差,迫使算法预测结果接近实际RUL。

(点击放大图像)

第一阶段:下面的管道描述了预测过程。作为第一个阶段,我们运行管道中的几个突出的步骤,大致了解下可行性。我们没有运行特征工程,而是在原始数据上运行算法。

第1 阶段:选择模型

下面的图3 显示了预测性维护的模型选择管道。这里只用到了深颜色的管道步骤。

(点击放大图像)

图3:用于模型选择的预测性维护管道

我们用到了 scikit learn H2O 中的很多回归算法。关于深度学习,我们用到了 H2O 中的深度学习算法,它既可以用于分类应用,也可以用于回归应用。该算法基于多层结构的前馈神经网络,用后向传播随机梯度下降法来训练神经网络。

下面图4 显示了结果。模型可以产生25-35 的均方根误差,也就是说,RUL 将有约25-35 时间步长的误差。

(点击放大图像)

图4:模型选择的均方根误差

下面的几个步骤,我们将集中在深度学习模型上。

第2 阶段:用Auto-Encoder 去除传感器噪声

下图5 显示了带去噪功能的预测性维护管道。这里只用到了深颜色的管道步骤。

(点击放大图像)

图5:用于模型选择的预测性维护管道

一般而言,传感器读数含有噪声。软件中自带的ReadMe 文件证实了这一点。因此,我们用 autoencoder 来去除噪声。Autoencoder 是一种简单的神经网络,它用同一个数据集作为网络的输入和输出来训练模型,网络的参数个数少于数据集的维度。这与主成分分析(PCA)( http://setosa.io/ev/principal-component-analysis/ )非常类似,在 PCA 中,数据被表示为它的几个主要维度。由于噪声的维度要远高于常规数据,该过程能降低噪声。

我们用到了有三个隐藏层的 H2O Auto-encoder 和下面的标准来去除噪声。

去除噪声后,均方根误差降低了 2。

(点击放大图像)

表1:去除噪声前后的均方根误差

第3 阶段:特征工程

下面的图6 显示了预测性维护的特征工程管道。这里只用到了深颜色的步骤。

(点击放大图像)

图6:用于模型选择的预测性维护管道

在这一步,我们尝试了很多特征,保留了最有预测能力的特征子集。我们用到的数据集是时间序列数据集,因此传感器读数是自相关的。因此,在时间“t”时的预测很有可能受到“t”之前的某些时间窗的影响。我们用到的大多数特征都是基于这些时间窗的。

在第三章节中,我们讨论了数据集含有21 个传感器的读数。更多的细节信息可参看与数据集一起提供的ReadMe 文件。经过一些实验之后,我们只用到了传感器2、3、4、6、7、8、9、11、12、13、14、15、17、20 和21。对于每一个被选中的传感器,我们通过运用以下方法来生成特征:滑动标准差(窗口大小是5)、滑动k- 最近平均值(窗口大小是5)以及窗口内的概率分布(窗口大小是10)。

我们试过其他某些特征但最终没有使用它们,包括:滑动平均值、自相关、直方图、滑动熵和滑动加权平均值。

这些特征使得均方根误差降低了1。

(点击放大图像)

表2:特征选择前后的均方根误差

第4 阶段:用网格搜索来优化超参数

图7 显示了带超参数优化的预测性维护管道。这里只用到了深颜色的管道步骤。

(点击放大图像)

图7:用于模型选择的预测性维护管道

超参数控制算法的行为特点。在最后一步,我们优化了如下的超参数:迭代次数、分布、激活函数以及隐藏层的个数。每个参数的详细描述可以参看 H2O 文档。我们用网格搜索找到最好的参数,结果如下表所示。

(点击放大图像)

Table 3:不同超参数下的均方根误差

如结果所描述的,超参数优化将均方根误差减小了 3。在剩余误差直方图(图 8)中,可以看见误差收敛到“0”。过早预测和过迟预测的频率都被最小化了。

(点击放大图像)

图8:用于模型选择的预测性维护管道

构建模型来预测后N 步的故障

在这个方法中,我们将预测某机器是否会在接下来的30 次循环中发生故障,而不是预测它的剩余寿命长短。我们将有故障的状态看作正面的(P),没有故障的状态看作正常的(N)。我们运行一个深度学习分类模型,用到了同样的特征工程和去噪过程。图9 给出了结果。

混淆矩阵

(点击放大图像)

图9:用于模型选择的预测性维护管道

准确率(accuracy)描述了有多大比列的测试数据被正确地预测了。它给出了准确预测的测试案例的个数与测试案例总个数的比列。

(点击放大图像)

如果类的分布不均衡,那么仅仅考虑准确率会误导人。在数据集中,当同一个类被过分表示时,就会出现不均衡的类分布。这种情况下,有些模型可能有很高的准确率但很差的预测性能。

为了避免这个问题,我们用查准率(precision)和查全率(recall)作为衡量标准。查全率是被正确预测的正面类的个数与所有实际为正面类的数据的个数的比例。

(点击放大图像)

查准率被定义为一个模型能预测正面类的能力。它是被正确预测的正面类的个数与所有被预测为正面类的数据的个数的比列。

(点击放大图像)

F1 分数用于衡量测试的准确率。查准率和查全率都被用于该分数的计算中。

(点击放大图像)

关于准确率、查全率、查准率和F1 分数,最好是值接近1,训练的模型才有很好的性能。

用WSO2 CEP 运行模型

在处理存储在磁盘上的数据时,我们用批处理的形式来构建模型。然而,为了运用模型,我们需要在运行时向模型输入可用的数据。数据的处理被称为“流处理”。我们用流处理引擎 WSO2 CEP 来运用模型。

我们用 H2O 来构建模型。H2O 能将模型导出为两种格式中的一种:POJO(简单 Java 对象)或 MOJO(优化的模型对象)。前者需要被编译而后者可以直接使用。我们用了 CEP 中的 MOJO 模型。

为了评估模型,我们用到了 WSO2 CEP 中的一个扩展。WSO2 使用一种类似于SQL 的查询语言来处理数据流中的数据。

如图10 所示,一个复杂的事件处理系统接收事件流数据,并用一种类SQL 查询来评估它们。比如,一个给定的查询可以计算一个一分钟滑动窗口的stockQuotes 流,将其与一分钟窗口的Tweets 流连接,并发送一个事件到PredictedStockQuotes 流。

(点击放大图像)

图 10:用于模型选择的预测性维护管道

用 CEP 评估模型的查询例子如下面所示。

复制代码
from data_input#h2opojo:predict('ccpp/DRF_model_python_1479702792496_1')
select T, V, AP, RH, prediction
insert into data_output

下面的图 11 显示了整个管道,包括训练步骤和评估步骤。

(点击放大图像)

图 11:用于模型选择的预测性维护管道

该查询取走送到“数据输入”流的事件,并运用机器学习模型。运用机器学习模型包括下面几个步骤:

  1. 用“第 3 阶段:特征工程”章节中所描述的预处理步骤对事件数据进行预处理,并生成特征集
  2. 用生成的特征集来评估机器学习模型。
  3. 返回结果

结论

预测性维护的主要目的是预测设备可能发生故障的时间。然后采取相关行动来预防这些故障。预测性维护系统(PMS)监控未来的故障并提前安排维护时间。

这些能降低一些成本。

  • 减少维护频率。
  • 最小化花在某个被维护的设备上的时间,更充分地利用时间。
  • 最小化维护费用。

本文探讨了预测性维护的不同方法,使用了不同的回归和分类算法。而且,本文一步步地展示了调整这些模型的技术。我们的最终解决方案在预测剩余使用寿命上的 RMSE 值是 18.77,在预测后 N(30)步内可能出现故障上的准确率是 94%。

上述那些技术需要大量包含足够多故障场景的训练数据。由于故障很少见,数据收集会需要很长的时间。这是应用预测性维护的一个极大的障碍。

参考文献

  1. Deep Learning with H2O
  2. PCoE Datasets
  3. A Simulation Study of Turbofan Engine Deterioration Estimation Using Kalman Filtering Techniques
  4. Predictive maintenance

关于作者

Srinath Perera是分布式系统领域的科学家、软件系统架构师和程序员。他是 Apache Axis2 项目的合创人,也是 Apache Software Foundation 的成员。他还是 WSO2 复杂事件处理引擎的架构师之一。Srinath 著有两本关于 MapReduce 的书,发表了很多技术文章。他于 2009 年获得美国印第安纳大学的博士学位。

Roshan Alwin是莫勒图沃大学计算机科学与工程系的年级代表 (CSE 13)。

查看英文原文: Machine Learning Techniques for Predictive Maintenance


感谢薛命灯对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017 年 7 月 19 日 17:208895
用户头像

发布了 21 篇内容, 共 73279 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

作业一

泡泡

架构师训练营 - 命题作业 - 第二周

徐时良

第二周作业及学习笔记

橘子皮嚼着不脆

架构师训练营 1 期第 2 周:框架设计

Wee权

第二周总结

fmouse

极客大学架构师训练营

极客时间架构 1 期:第 2 周框架设计 - 命题作业

Null

架构师训练营第二次作业

月殇

极客大学架构师训练营

【第二周】课后作业

云龙

极客大学架构师训练营

架构师训练营 week2 作业

陈皓07

架构师训练营第二周总结

月殇

极客大学架构师训练营

架构师训练营 -week02- 总结

大刘

极客大学架构师训练营

数据结构之堆栈

C语言与CPP编程

c++ 数据结构 堆栈 C语言 数据结构与算法

Week 2 命题作业及总结

阿泰

架构师训练营 week2 总结

陈皓07

面向对象设计原则及框架案例

garlic

极客大学架构师训练营

第 2 周 框架设计 腐败的代码

Pyr0man1ac

极客大学 - 架构师训练营第一期 - 第二周作业

Black Eyed Peter

极客大学架构师训练营

极客时间架构1期:第2周框架设计-学习总结

Null

架构师训练营 2 期 - 第二周总结

Geek_no_one

极客大学架构师训练营

架构师训练营第 1 期第二周学习总结

郑凯元

极客大学架构师训练营

架構師訓練營 week2 作業

ilake

极客大学架构师训练营

依赖倒置原则和接口隔离原则

garlic

极客大学架构师训练营

数据结构之线性表

C语言与CPP编程

c++ 数据结构 C语言 线性表 数据结构与算法

Serverless 的收益与挑战 | 2020年度状态报告

donghui2020

Serverless

架构师训练营 - 学习笔记 - 第二周

徐时良

设计模式

高兵

第二周作业

fmouse

极客大学架构师训练营

华为18级工程师十年之作,整整3625页互联网大厂面试题合集

云流

学习 程序员 Java 面试 架构师技能

学习总结1

Wee权

架构师训练营第 1 期第二周课后练习题

郑凯元

极客大学架构师训练营

作业二

泡泡

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

机器学习技术之预测性维护-InfoQ