預測性維護模型,可在故障發生之前識別故障跡象
情況
我正在解決一個問題,我正在使用傳感器數據在故障發生之前預測機器故障,我需要一些關於探索哪些方法的建議。
具體來說,我想在故障實際發生之前確定即將發生故障的跡象。理想情況下,這將有足夠的提前期,以便我們可以在導致故障之前修復發生的任何事情。
問題
我遇到的概念障礙是我知道我可以將各種分類模型(邏輯回歸、決策樹、最近鄰等)擬合到數據中,以識別當時給定特定參數的故障概率。但是,我無法弄清楚如何識別即將發生的故障的跡象,並有足夠的時間來實際做一些事情。
可能的方法
我對生存分析很熟悉,但鑑於我沒有來自多台機器的數據,而且在維修後機器並沒有恢復到 100%,我覺得這不一定適合。
我還考慮過花時間發生故障,將其向後移動 1 小時,然後看看我能預測到這一點有多準確。如果可以的話,將目標向後移動一小時,看看我可以自信地預測多長時間。但我不確定這樣做是否合適。
可用數據
我擁有的數據是在 1 年期間從一台機器記錄的。每兩分鐘記錄大約 60 個傳感器。這些傳感器測量變量,例如組成機器的不同組件的溫度(包括恆溫器設置與實際溫度)、機器運行的速度、整個機器的蒸汽壓力、風扇速度、機器是否正在運行, 等等。
除了傳感器讀數之外,我還豐富了數據集以包括機器未運行的原因(例如:換班、預防性維護、故障)。我在這篇文章的底部包含了一個關於數據外觀的精簡示例。我已經更改了示例以捕獲在整個數據集中捕獲的一些變化。實際上,當機器停止運行時,它會停機 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 | +-----------------+----------+-------------+------------+------------+-------+-------+-----+--------------------------+------------+
這是一個問得很好而且很有趣的問題。
我有一些疑問 :
- 您是否已經對您的目標的可行性有所了解?(預計會出現一些故障)您是否確定了預示失敗的變量?
- 失敗前的典型時間是多少?
我認為研究此類問題的自然方法是使用生存分析。熟悉它會加分!
我會做什麼(儘管我不知道您的問題的所有特殊性):
計算您感興趣的時間變量 () 和事件變量的發生 () :在這一步中,您可以:
- 將故障時間視為事件
- 將預防性維護時間視為刪失變量
- 跳過輪班時間以計算故障時間和審查
在此數據上擬合 Cox 模型:
- 備註:您有時間更改協變量(此地址有一個關於如何在 Cox 模型中處理時間相關協變量的小插圖:https ://cran.r-project.org/web/packages/survival/vignettes/timedep.pdf )
- 這一步可能並不容易(我不知道我不是時間相關協變量的專家)。例如,我認為您可能會遇到麻煩,因為您的數據中可能有太多變化點(協變量之一發生變化的時間)
然後,要使用您的模型(看看您是否可以預測將來會發生故障(之前有足夠的時間)),您應該使用您的 Cox 模型:
- Cox 模型將為您提供風險率的估計值。因此,使用模型可以做的最簡單的事情是在機器運行時計算在線預測,並在危險率超過閾值時決定停止機器)
儘管研究問題的自然方法是使用生存分析,但您可以使用分類方法,尤其是在失敗前的時間很短的情況下(這樣您就可以分析過去的數據,並且不會受到審查的干擾)。在這種情況下,我認為整體方法會非常相似。
給我們一些關於您的問題的反饋!