2024年8月18日 星期日

預測性維護 ─ 機器設備異常狀態預測(SPSS Modeler 圖文教學)

根據維基百科的定義,預測性維護(Predictive Maintenance)是一種技術,其目的在確定運行中機器設備的狀況,以預測何時需要進行維護。與定期進行的預防性維護相比,預測性維護的做法是在真正有必要時才進行設備維護,這樣可以更有效地節約成本。預測性維護主要利用設備運行的歷史數據與 AI 機器學習技術來預測故障發生的可能性,並在設備可能出現故障或停機前發出警示。針對關鍵生產設備的故障監控、診斷和預測,可以提高設備的稼動率,減少停機時間,進而提升整體設備運行效率 (OEE)。這也是當前工業4.0時代,製造業致力發展的數位轉型能力之一。



話說從頭
  將人工智慧應用在企業營運的各個環節中,這是現代化企業數位轉型必須思考的重要課題。就我的經驗,很多客戶的第一個問題都是 AI 有什麼實際應用場景,不然就是很想一頭栽進 ChatGPT 的世界。生成式 AI 的成熟發展確實為企業帶來許多新的機會,它在知識問答、文章摘要、本文生成、程式碼生成與除錯等應用領域確實表現非常優異。然而,傳統的機器學習(或稱之為資料探勘)技術還是值得我們細細品味,畢竟 AI 應用的發展是逐步累積而來的成果。AI 手把手教學系列文章最主要的目的就是希望與各位朋友分享實務上的 AI 應用場景,除了解釋 WHY(目的與用途)之外,同時也告訴大家 HOW(如何實作),更重要是希望能夠建立與培養 AI 的思維。我通常都會建議客戶先從一個 MVP 專案開始(MVP = Minimum Valuable Project = 選定單一主題並建立具有實際效益的成功專案),接著逐步複製成功經驗擴大 AI 應用場景,以穩健踏實的方式來拉近與企業 AI 之間的距離。
  為了降低人工智慧與機器學習實作上的困難度,我的系列文章都會以 IBM SPSS Modeler 軟體作為工具來解釋 AI 建模的過程。如同玉山登頂這件事,每個人的體能與登山經驗各有不同,要享受登上玉山主峰那種成就感,有些朋友選擇獨自單攻,有些朋友則會組隊並尋求嚮導與山青的協助。因此,換位思考,如果我們的目的是快速建立企業的 MVP 專案,那麼選擇合適的工具或許也是個合理且聰明的做法。


MVP 專案目標:及早將可能發生故障的機器設備停機保養,避免對產線造成影響。

本篇文章將以一個虛擬的電子零組件製造公司作為 AI 應用的場景,這間公司的經營管理階層目前正在著手發展基於工業 4.0 架構下的工廠維運數位轉型計畫,設備維運主管同時也在思考是否能將預測性維護運用在日常維運工作中,藉由對生產設備的故障監控、診斷和預測,提高設備稼動率減少停機時間,進而提升整體設備運行效率。在過往的經驗中,由於機器設備因故障停機後,維運人員僅能從輸出的日誌資料中看到最後一個時段的狀態碼 (Status Code),必須透過外接裝置才能從機器設備中蒐集完整的設備狀態輸出訊息 (Outcome) 進一步分析發生故障的原因。由於設備因異常停機會影響生產工作的排程計畫與產能效率,因此設備維運主管期望可以透過 AI 技術協助他從機器設備輸出的日誌資料中嘗試預測出設備可能或即將發生故障的狀況,讓維運人員可以及早將設備停機進行保養或維修,將產線受到的衝擊影響最小化。

文章目錄:




1.理解訓練資料集

本篇文章使用的訓練資料集(machine_logs_training.csv)是一個虛擬的電子零組件製造公司設備維運部門彙整近期發生故障停機設備的日誌資料,其中設備狀態輸出訊息 (Outcome) 欄位係設備停機後透過外接裝置所取得之訊息(即目標變數)。此外,我們已事先將設備維運部門提供的原始資料分割為一份測試集資料(machine_logs_newdata.csv),該資料將用於驗證預測模型的準確性。下圖為節錄的訓練資料集內容:


這個資料集共包含 2,422 筆資料,每筆資料代表某台設備在固定時間段記錄的用電量、溫度、瞬間異常壓力警示、該設備計畫工作時間、設備狀態碼以及設備狀態輸出訊息等日誌資料。時間段從 0 開始記錄,直到設備因故障停機結束記錄,設備停機時會產生一個設備狀態碼。

欄位定義:
# 欄位名稱 角色 型別 欄位說明
1 Time 時間間隔 數值 設備日誌記錄的時間間隔,由 0 開始直到設備停機結束。
2 Power 初始輸入變數 數值 用電量。
3 Temperature 初始輸入變數 數值 溫度。
4 Pressure 初始輸入變數 數值 瞬間異常壓力警示,正常情況下為 0,1 則代表發生瞬間壓力異常。
5 Uptime 初始輸入變數 數值 個別設備計畫工作時間。
6 Status 初始輸入變數 數值 設備狀態碼,正常狀態為 0,發生故障停機時記錄錯誤碼(101、202 或 303)。
7 Outcome 目標變數 數值 設備狀態輸出訊息,錯誤碼與 Status 欄位定義相同(此訊息為事後取得)。

《 回到文章目錄 》



2.檢驗資料特性

在建模之前我們必須先了理解設備異常時資料發生了什麼變化,首先在 SPSS Modeler 串流畫布中使用「變數檔案」節點載入 machine_logs_training.csv 檔案。由於測試資料中並未包含足以辨識個別設備的代碼欄位,因此我們選擇以 Status 作為辨識個別設備的欄位。在資料來源節點後方串接一個「選取」節點,並以 Uptime = 404 作為判斷條件,篩選出這台設備的日誌資料。


設備的日誌資料準備完成後,我們在「選取」節點後方串接一個「多重繪圖」節點,並期望透過圖形化的方式了解該設備於故障停機之前各種監測數據的狀態。在「多重繪圖」節點的設定視窗中,X 軸選擇 Time 欄位,Y 軸分別選擇 Power、Temperature、Pressure、Status 以及 Outcome 等欄位。


從輸出的圖形中,我們可以觀察到這台設備共運行 90 個時間段,直到停機(Status = 303)。此外,第 53 個時間段用電量開始下降,此時設備的 Outcome 欄位開始輸出 303 錯誤碼,在過程中 Temperature 與 Pressure 並未發生變化,因此初步判定用電量異常會導致設備停機。


如果想要進一步了解用電量 (Power)、溫度 (Temperature) 以及瞬間異常壓力警示 (Pressure) 這三個輸入變數的敘述統計資訊,可以直接在資料來源節點後方分別串接「統計資料」節點與「直方圖」節點。透過敘述統計量與次數分配直方圖,我們可以觀察到用電量與溫度這二個欄位的數值變化較為明顯,瞬間異常壓力警示如預期僅有 0 與 1 的變化。


接著我們再來分析三種不同的錯誤碼發生時,設備的用電量 (Power) 與溫度 (Temperature) 的數據變化。這個分析需要在資料來源節點後方分別串接三個「選取」節點,篩選條件分別為 Outcome = 101、Outcome = 202、Outcome = 303,然後在「選取」節點後方串接二個「統計圖」節點。第一個統計圖的 X 軸為 Time;Y 軸為 Power。第二個統計圖的 X 軸為 Time;Y 軸為 Temperature。這二個圖形的樣式均為併疊 (Overlay) X 軸的直線圖(用以呈現不同時間段的用電量變化圖形)。


下圖為 Outcome = 101 時用電量以及溫度值的變化,我們可以觀察到,發生錯誤碼 101 時,設備溫度 (Temperature) 並未發生明顯變化,但設備用電量 (Power) 明顯可以觀察到隨時間而遞減的現象。


經過分析 101、202、303 這三種錯誤碼的用電量與溫度值變化圖形後,我們可以初步做出以下結論:
  • 這些圖形清晰地顯示了區別錯誤碼 202 與 101 及 303 的樣態。錯誤碼 202 顯示一段時間內溫度升高和用電量波動;而 101 及 303 則是呈現出溫度穩定且用電量下降的樣態。

  • 區別錯誤碼 101 與 303 的型樣則較不容易,這兩個錯誤碼都會顯示溫度穩定和用電量下降,但錯誤碼 303 的用電量下降似乎更急劇。

  • 基於用電量與溫度變化的圖形分析,溫度與用電量的變化率及波動度似乎與預測和區別錯誤率相關。因此我們應該先建立這些衍生變數,然後再進行模型的訓練。



《 回到文章目錄 》



3.建立衍生變數

在大多數實際場景中,運用 AI 機器學習技術建立預測性模型可能會遭遇到 1) 輸入變數過多以致於不易選擇合適的變數;2) 輸入變數太少以致於不易找出與目標變數具有相關性的要素等問題。前者在 SPSS Modeler 中有很多工具節點可以協助我們挑選出合適的變數,後則則可透過建立衍生變數的方式來解決。建立衍生變數需要對產業知識有一定的理解,對於機器設備異常狀態的預測,通常可以詢問實際在現場維修設備的老師傅們,他們腦袋中的各種經驗法則都可以協助資料科學家設計出更貼近於實際狀況的衍生變數。下圖是本案例使用的衍生變數設計架構:


  • Pressure Warnings(瞬間異常壓力警告次數)

  • Pressure Warnings 用於計算設備於一個完整的記錄時間段中,瞬間異常壓力警示 (Pressure) 累計發生的次數。其邏輯係將目前時間 (Tn) 與前一個時間 (Tn-1) 比較,若 Pressure 不等於 0,則判斷結果 = True(Pressure Warnings 次數累加 1),反之判斷結果 = False。

    在 SPSS Modeler 串流中建立衍生變數,直接在資料來源節點後方串接一個「導出」節點,並依據下圖的參數配置方式完成設定即可。

    要檢視衍生變數的輸出結果,可以直接在「導出 (Pressure Warnings)」節點後方串接一個「表格」節點,執行串流後即可檢視輸出內容。從下圖可以觀察到,同一台設備第 78 ~ 106 個時間段中。第 79 個時間發生壓力值警示 (Pressure = 1),因此計數開始 Pressure Warnings = 1;到了第 94 個時間,再次發生壓力值警示 (Pressure = 1),則計數值累加 1,Pressure Warnings = 2。

  • Delta Temperature(瞬間溫度變化率)

  • Delta Temperature 用於計算設備於一個完整的記錄時間段中,前後二個時間的溫度 (Temperature) 變化率。其邏輯為 Temperature(Tn) - Temperature(Tn-1) / Tn - Tn-1,運用 SPSS Modeler 內建的 @DIFF1() 函數即可輕鬆完成變化率的計算,例如 @DIFF1(Time) > 0,即判斷在相同的一個時間段內才會計算溫度變化率,避免時間段切換時計算溫度變化率。

    由於 SPSS Modeler 串流具有延續性,因此我們可以直接在「導出 (Pressure Warnings)」節點後方串接一個新的「導出」節點,並依據下圖的參數配置方式完成設定即可。

    要檢視衍生變數的輸出結果,可以直接在「導出 (Delta Temperature)」節點後方串接一個「表格」節點,執行串流後即可檢視輸出內容。從下圖可以觀察到,同一台設備第 51 ~ 65 時間段中共發生數次的溫度變化,其中以第 52 個時間段變化最大。

  • Delta Power(瞬間用電量變化率)

  • Delta Power 用於計算設備於一個完整的記錄時間段中,前後二個時間的用電量 (Power) 變化率。其邏輯為 Power(Tn) - Power(Tn-1) / Tn - Tn-1,運用 SPSS Modeler 內建的 @DIFF1() 函數即可輕鬆完成變化率的計算,例如 @DIFF1(Time) > 0,即判斷在相同的一個時間段內才會計算用電量變化率,避免時間段切換時計算用電量變化率。

    由於 SPSS Modeler 串流具有延續性,因此我們可以直接在「導出 (Delta Temperature)」節點後方串接一個新的「導出」節點,並依據下圖的參數配置方式完成設定即可。

    要檢視衍生變數的輸出結果,可以直接在「導出 (Delta Power)」節點後方串接一個「表格」節點,執行串流後即可檢視輸出內容。從下圖可以觀察到,紅色框為 Uptime = 209 設備的用電量及其變化率,藍色框則為 Uptime = 436 設備的用電量及其變化率,當設備切換時 Delta Power 的計算已被重置。

  • Power Peak or Trough(用電量尖峰或低谷)

  • Power Peak or Trough 用於比較目前時間 (Tn) 與前一個時間 (Tn-1) 的瞬間用電量變化率 (Delta Power),若正負符號不同表示發生尖峰或低谷的資料轉折,則 Power Peak or Trough 將指定為 T (True),反之為 F (False)。SPSS Modeler 內建的 @OFFSET(FIELD, EXPR) 函數用於傳回現行記錄中值為 EXPR 的記錄偏移量中的 FIELD 值。偏移量為正即往回查找記錄(即 “lookback”),偏移量為負則向後查找記錄(即 "lookahead"),例如 @OFFSET(Delta Power, 1) 傳回前一筆記錄中 Delta Power 欄位的值,而 @OFFSET(Delta Power, –4) 則對序列型資料的後四筆記錄取得 Delta Power 欄位的值。

    直接在「導出 (Delta Power)」節點後方串接一個新的「導出」節點,並依據下圖的參數配置方式完成設定即可。

    要檢視衍生變數的輸出結果,可以直接在「導出 (Power Peak or Trough)」節點後方串接一個「多重繪圖」節點,在同一個 Y 軸 (Time) 中繪製 Power、Delta Power、Power Peak or Trough 的折線圖進行比較。從下圖可以觀察在一個獨立的時間段中,如果目前時間(Tn) 與前一個時間 (Tn-1) 的瞬間電源變化率發生不同方向的變化,也就是瞬間電源變化率發生波峰或波谷的轉折時,此欄位記錄為 T (True),反之為 F (False)。如果 Power Peak or Trough 維持一段時間的 T 值,則代表該段時間的用電量變化率發生較大的波動(用電量不太穩定)。

  • Power State(用電量波動狀態)

  • Power State 用於判斷設備的用電量屬於穩定 (Stable) 或是波動 (Fluctuating) 狀態,其邏輯為如果目前的 Power Peak or Trough = T 且前一個 Power Peak or Trough = T 時(連續兩次偵測到不穩定用電量),Power State 指定為波動 (Fluctuating);再者,計算從目前所在資料記錄往回計算發生 Power Peak or Trough = T 的資料筆數,若 > 5 則表示中間出現的 Power Peak or Trough 不等於 T(在五個時間間隔沒有不穩定電源現象或重設時間),Power State 指定為穩定 (Stable)。SPSS Modeler 內建的 @SINCE(EXPR) 函數用於計算 [EXPR] 判斷結果為 True 的合計資料筆數。

    直接在「導出 (Power Peak or Trough)」節點後方串接一個新的「導出」節點,並依據下圖的參數配置方式完成設定即可。

    要檢視衍生變數的輸出結果,可以直接在「導出 (Power State)」節點後方串接一個「表格」節點,執行串流後即可檢視輸出內容。從下圖可以觀察到,紅色框為 Uptime = 202 設備出現連續二筆 Power Peak or Trough = T 的記錄,因此 Power State 切換為 Fluctuating;藍色框則為該設備的 Power Peak or Trough = F 連續超過五筆,因此 Power State 切換為 Stable。

  • Avg Delta Power(瞬間用電量變化率平均值)

  • Avg Delta Power 用於計算最後五個時間間隔內的瞬間電源變化率 (Delta Power) 的平均數,若時間段不足 5 時,Avg Delta Power 指定為 0。使用 SPSS Modeler 內建的 @AVE() 函數可以輕鬆地完成這件事,直接在「導出 (Power Peak or Trough)」節點後方串接一個新的「導出」節點,並依據下圖的參數配置方式完成設定即可。


    要檢視衍生變數的輸出結果,可以直接在「導出 (Avg Delta Power)」節點後方串接一個「表格」節點,執行串流後即可檢視輸出內容。

  • Avg Delta Temperature(瞬間溫度變化率平均值)

  • Avg Delta Temperature 用於計算最後五個時間間隔內的瞬間溫度變化率 (Delta Temperature) 的平均數,若時間段不足 5 時,Avg Delta Temperature 指定為 0。使用 SPSS Modeler 內建的 @AVE() 函數可以輕鬆地完成這件事,直接在「導出 (Avg Delta Power)」節點後方串接一個新的「導出」節點,並依據下圖的參數配置方式完成設定即可。


    要檢視衍生變數的輸出結果,可以直接在「導出 (Avg Delta Temperature)」節點後方串接一個「表格」節點,執行串流後即可檢視輸出內容。

經過一系列的設定程序,我們完成了這七個衍生變數。按照衍生變數的設計架構,接下來我們會將其中四個衍生變數作為輸入變數進行機器設備異常狀態預測的建模。下圖為截至目前為止,我們的 SPSS Modeler Flow。



《 回到文章目錄 》



4.建立預測模型

在建模之前我們再做一些前置資料的準備,首先我們需要捨棄日誌記錄中發生設備切換時的資料,訓練資料集中若符合以下任一條件時,捨棄該筆資料:
  • 捨棄每一個時間序列的第一個記錄來避免用電量及溫度在時間序列記錄邊界的不正確跳躍。

  • 目前時間 (Tn) 與前一個時間 (Tn-1) 比較,若 Outcome 值不相同(設備切換),則判斷結果 = True,反之判斷結果 = False。我們將捨棄判斷結果 = True 的資料

接續之前已完成的 SPSS Modeler Flow,在「導出 (Avg Delta Temperature)」節點後方串接一個「選取」節點。於節點的「設定」頁籤中,「模式」選擇 捨棄 (Discard),在「條件」區塊中輸入 Time = 0 or Outcome /= @OFFSET(Outcome, 1) 公式。


接著我們挑選最終需要用於建模的欄位,在「選取」節點後方串接一個「過濾器」節點。保留以下欄位:Uptime、Status、Outcome、Pressure Warnings、Power State、Avg Delta Power、Avg Delta Temperature。


再來將目標變數 Outcome 欄位轉換為字串型別,在「過濾器」節點後方串接一個「填入器」節點。於節點的「設定」頁籤中,「填入欄位」選擇 Outcome,「置換」選擇 總是 (Always),在「取代成」區塊中輸入 to_string(@FIELD) 公式。


再來將 Pressure Warningse 欄位轉換為數值型別,在「填入器」節點後方串接一個新的「填入器」節點。於節點的「設定」頁籤中,「填入欄位」選擇 Pressure Warnings,「置換」選擇 總是 (Always),在「取代成」區塊中輸入 to_number(@FIELD) 公式。


最後,我們進行 SPSS Modeler 建模中最重要的一個步驟,設定變數的測量層級 (Measurement Levels),也就是指定變數的類型與建模時扮演的角色。在第二個「填入器」節點後方串接一個「類型」節點,依據下表完成設定,設定完成後,必須點擊「讀取值」按鈕更新「值」欄位的內容(完成實例化)。這個動作很重要,建模前必須讓 SPSS Modeler 清楚地透過解析原始資料的內容,確認每個變數配置的測量(類型)與其值域內容是否相符。
# 欄位名稱 測量 角色
1 Uptime 連續 (Continuous) 輸入 (Input)
2 Status 連續 (Continuous) 輸入 (Input)
3 Pressure Warnings 連續 (Continuous) 輸入 (Input)
4 Power State 旗標 (Flag) 輸入 (Input)
5 Outcome 列名 (Nominal) 目標 (Target)
6 Avg Delta Power 連續 (Continuous) 輸入 (Input)
7 Avg Delta Temperature 連續 (Continuous) 輸入 (Input)


我們選擇使用「神經網路」與「C5.0 決策樹」這二個演算法分別建立二個多元分類模型,分類模型將使用 Uptime、Status、Pressure Warnings、Power State、Avg Delta Power、Avg Delta Temperature 等六個輸入變數來預測 Outcome 這個目標變數。在訓練資料集中,Outcome 共有三種結果:101、202、303 也就是導致設備停機的三種錯誤碼。在「類型」節點後方串接「神經網路」與「C5.0」建模節點,在使用預設參數的條件下執行建模。


由於資料量不大,SPSS Modeler 很快就能完成建模,並產生二個對應的模型節點(金黃色鑽石形狀),我們直接在這二個模型節點後方串接「分析」節點,檢視模型的預測能力。


合併顯示這二個分類模型的分析結果,下圖左邊為 C5.0 決策樹模型的評分結果(正確率 99.79%),右邊為 Neural Net 模型的評分結果(正確率 99.87%),二個模型的表現都非常好。



《 回到文章目錄 》



5.驗證模型準確性

為避免模型過度擬合影響對實際資料的預測結果,我們將使用預先準備好的測試資料集(machine_logs_newdata.csv)實際驗證這二個分類模型面對新資料的預測能力。在 SPSS Modeler 串流畫布中使用「變數檔案」節點載入 machine_logs_newdata.csv 檔案,由於測試資料集係由訓練資料集分割出來,欄位名稱及內容格式並無差異,因此我們可以直接將測試資料來源節點與建模串流的第一個衍生欄位節點(Pressure Warnings)鏈結在一起,此時 SPSS Modeler 會提示警告,請點擊「取代」按鈕,置換 SPSS Modeler Flow 的資料來源。


在建模階段,我們分別進行神經網路與 C5.0 決策樹的模型預測能力分析。在驗證階段我們也可以嘗試串接二個模型節點進行合併比較,除了可以分析這二個分類模型各自的預測能力之外,還可以進行合併模型評分的比較,也就是二個模型的預測結果相同時才視為真正的預測結果。串接二個或多個預測模型在實務上很常見,如果不拿來進行合併預測,也可用來比較不同模型的性能分析圖形。做法非常容易,只需要將串流畫布中的「神經網路」模型節點鏈結到「C5.0」模型節點即可,並於「C5.0」模型節點後方串接一個新的「分析」節點即可。


先觀察二個模型各自的表現,「神經網路」模型針對測試集資料評分的正確率為 99.66%,「C5.0」模型針對測試集資料評分的正確率為 99.68%,二個分類模型的預測能力還是表現得很好。檢視合併模型評分的結果,針對全體測試集 4,124 筆資料,二個模型預測結果相同共 4,113 筆,其中預測正確共 4,106 筆(正確率為 99.83%),比各自評分的表現還要更好。


最後,我們可以藉由這個案例來評估使用 AI 機器學習技術建立設備故障預測模型的預期效益。依據這二個模型共同預測的結果,挑選 10 個設備彙整如下表,若採用 AI 模型預測的結果,平均可以提前約 115.1 個時間段進行故障停機示警。若一個時間段代表 1 小時,則平均可以在故障發生前 4.8 天提早通知維運人員進行設備維修及保養,避免因臨時性停機影響產線生產工作排程的計畫。




《 回到文章目錄 》



版權聲明
文章內容未經授權,請勿進行任何形式的複製、修改或發佈本文內容,如需轉載或引用,請在使用時注明出處並取得授權。本文中提及的特定公司、產品、品牌名稱等僅為描述目的,其版權歸屬於相應的公司或擁有者。

沒有留言:

張貼留言