预测性维护模型,可在故障发生之前识别故障迹象

机器算法验证 机器学习 时间序列 预测模型 预测区间 工程统计
2022-03-21 19:32:17

情况

我正在解决一个问题,我正在使用传感器数据在故障发生之前预测机器故障,我需要一些关于探索哪些方法的建议。

具体来说,我想在故障实际发生之前确定即将发生故障的迹象。理想情况下,这将有足够的提前期,以便我们可以在导致故障之前修复发生的任何事情。

问题

我遇到的概念障碍是我知道我可以将各种分类模型(逻辑回归、决策树、最近邻等)拟合到数据中,以识别当时给定特定参数的故障概率。但是,我无法弄清楚如何识别即将发生的故障的迹象,并有足够的时间来实际做一些事情。

可能的方法

我对生存分析很熟悉,但鉴于我没有来自多台机器的数据,而且在维修后机器并没有恢复到 100%,我觉得这不一定适合。

我还考虑过花时间发生故障,将其向后移动 1 小时,然后看看我能预测到这一点有多准确。如果可以的话,将目标向后移动一小时,看看我可以自信地预测多长时间。但我不确定这样做是否合适。

可用数据

我拥有的数据是在 1 年期间从一台机器记录的。每两分钟记录大约 60 个传感器。这些传感器测量变量,例如组成机器的不同组件的温度(包括恒温器设置与实际温度)、机器运行的速度、整个机器的蒸汽压力、风扇速度、机器是否正在运行, ETC。

除了传感器读数之外,我还丰富了数据集以包括机器未运行的原因(例如:换班、预防性维护、故障)。我在这篇文章的底部包含了一个关于数据外观的精简示例。我已经更改了示例以捕获在整个数据集中捕获的一些变化。实际上,当机器停止运行时,它会停机 2 分钟到 2 天,具体取决于原因。此外,变量不一定会像下面的示例中那样快速变化,但我想提供一些变化。

+-----------------+----------+-------------+------------+------------+-------+-------+-----+--------------------------+------------+
|    Datetime     | CircFan  | CircFanAct  | EntrySpeed | ExhaustFan | Speed | Temp1 | Run |          Reason          | TimeBtwRun |
+-----------------+----------+-------------+------------+------------+-------+-------+-----+--------------------------+------------+
| 2009-10-19 0:00 |      100 |         600 |        461 |         40 |    45 |  1126 |   1 |                          | NA         |
| 2009-10-19 0:02 |      100 |         600 |          0 |         39 |    45 |  1120 |   0 | shift change             | 0:00       |
| 2009-10-19 0:04 |      100 |         600 |          0 |         39 |    45 |  1118 |   0 | shift change             | 0:02       |
| 2009-10-19 0:06 |       95 |         600 |        461 |         39 |    45 |  1119 |   1 |                          | 0:00       |
| 2009-10-19 0:08 |       95 |         599 |        461 |         40 |    45 |  1120 |   1 |                          | 0:02       |
| 2009-10-19 0:10 |       95 |         598 |        461 |         40 |    45 |  1120 |   1 |                          | 0:04       |
| 2009-10-19 0:12 |       95 |         597 |        461 |         40 |    45 |  1130 |   1 |                          | 0:06       |
| 2009-10-19 0:14 |      100 |         597 |          0 |         40 |    45 |   699 |   0 | failure                  | 0:00       |
| 2009-10-19 0:16 |      100 |         597 |          0 |         40 |    45 |   659 |   0 | failure                  | 0:02       |
| 2009-10-19 0:18 |      100 |         597 |          0 |         40 |    45 |   640 |   0 | failure                  | 0:04       |
| 2009-10-19 0:20 |      100 |         600 |        461 |         40 |    45 |  1145 |   1 |                          | 0:00       |
| 2009-10-19 0:22 |      100 |         600 |        461 |         40 |    45 |  1144 |   1 |                          | 0:02       |
| 2009-10-19 0:24 |       80 |         600 |        461 |         40 |    45 |  1138 |   1 |                          | 0:04       |
| 2009-10-19 0:26 |       80 |         600 |        461 |         41 |    45 |  1133 |   1 |                          | 0:06       |
| 2009-10-19 0:28 |       80 |         600 |        461 |         41 |    45 |  1134 |   1 |                          | 0:08       |
| 2009-10-19 0:30 |      100 |         600 |        461 |         41 |    45 |  1134 |   1 |                          | 0:10       |
| 2009-10-19 0:31 |      100 |         600 |        461 |         41 |    45 |  1133 |   1 |                          | 0:11       |
| 2009-10-19 0:34 |      100 |         600 |        461 |         40 |    45 |  1140 |   1 |                          | 0:13       |
| 2009-10-19 0:36 |      100 |         600 |        100 |         40 |    45 |   788 |   0 | preventative maintenance | 0:00       |
| 2009-10-19 0:38 |      100 |         600 |        100 |         40 |    45 |   769 |   0 | preventative maintenance | 0:02       |
+-----------------+----------+-------------+------------+------------+-------+-------+-----+--------------------------+------------+
2个回答

这是一个问得很好而且很有趣的问题。

我有一些疑问 :

  • 您是否已经对您的目标的可行性有所了解?(预计会出现一些故障)您是否确定了预示失败的变量?
  • 失败前的典型时间是多少?

我认为研究此类问题的自然方法是使用生存分析。熟悉它会加分!

我会做什么(尽管我不知道您的问题的所有特殊性):

  • 计算您感兴趣的时间变量 ( ) 和事件变量 ( ) 的发生时间:在此步骤中,您可以:ydelta

    • 将故障时间视为事件
    • 将预防性维护时间视为删失变量
    • 跳过轮班时间以计算故障时间和审查
  • 在此数据上拟合 Cox 模型:

    • 备注:您有时间更改协变量(此地址有一个关于如何在 Cox 模型中处理时间相关协变量的小插图:https ://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf )
    • 这一步可能并不容易(我不知道我不是时间相关协变量的专家)。例如,我认为您可能会遇到麻烦,因为您的数据中可能有太多变化点(协变量之一发生变化的时间)
  • 然后,要使用您的模型(看看您是否可以预测将来会发生故障(之前有足够的时间)),您应该使用您的 Cox 模型:

    • Cox 模型将为您提供风险率的估计值。因此,使用模型可以做的最简单的事情是在机器运行时计算在线预测,并在危险率超过阈值时决定停止机器)

尽管研究问题的自然方法是使用生存分析,但您可以使用分类方法,尤其是在失败前的时间很短的情况下(这样您就可以分析过去的数据,并且不会受到审查的干扰)。在这种情况下,我认为整体方法会非常相似。

给我们一些关于您的问题的反馈!

我研究类似的问题。

我建议将此建模为分类任务:将数据标记为...系统/系统在故障前关闭的时间...系统/系统正常的时间

然后你需要拟合一个模型来做这个分类。可能您需要先按时间间隔汇总数据。