深度學習時間序列異常偵測 — Bimap.co

mz bai
8 min readMar 5, 2019

--

來源網址

相較於原本 Bimap 提供視覺化監控機台運作狀況,加入異常偵測演算法可藉助機器學習的能力達到快速預警的功能,並得以降低人工尋找肇因所需的時間成本。

本次於集先鋒科技公司的實習內容為建立基於機器學習的異常偵測演算法,我發現比起原本 Bimap 提供視覺化監控機台運作狀況,藉助機器學習的能力更能達到快速預警的功能,並降低人工尋找肇因所需的時間成本。資料以每個小時為檢測依據, 利用歷史數據找出異常的時間段,達到自動檢測單台伺服器的 CPU / Network / DiskIO 產生異常時段的目標並期望能完成多台主機異常時段的自動偵測。

以下為我提出的幾個方法:

Anomaly Detection with LSTM in Keras

​​LSTM示意圖

深度學習為近年來最火紅的機器學習技術,而 LSTM (Long-Short Term Memory)身為 RNN (Recurrent neural network) 最常見的變形之一,特別常用於聲音、文字、時間序列等具有前後文 (context) 特性的資料,具有良好的準確性和處理複雜特徵的能力。​​

我選擇使用此演算法對 CPU 的處理器時間進行異常偵測,因為其對序列資料優秀的表現。資料為 2018/10 ~ 2019/01 的 CPU 使用狀況,以 2018/10 ~ 2018/12 作為訓練集,訓練與驗證比例為 8 : 2,測試 2019/01 的資料集。異常的判斷目標為與過去相比有明顯變化之 CPU 使用狀況即符合與人工判斷相似。

演算法設計上,首先以深度學習網路預測未來可能的值,與實際值相比產生殘差序列,並以當日的多元常態分佈概似值 (multivariate normal likelihood) 判斷是否為顯著值,最後因考慮實際使用情況選擇過濾標準,避免不常見的小高峰所造成的誤判。

Model Architecture

深度學習網路設計為兩層 LSTM 堆疊,提升模型對抽取時間序列資料的複雜特徵能力。

示範模型架構圖
RNN 可使用於不同長度時間步的預測, 來源網址

Real-time Data

我們以測試集中異常最為明顯的一天作為範例,驗證不同參數及網路架構的表現。前方的 U 型高峰是正常排程,而演算法的確偵測到後方的不正常高峰。並與正常的一天比較,演算法的表現亦佳。

異常序列
正常序列

Performance

以每天是否有異常判斷

模型的準確率高且錯誤的判斷在可接受範圍內。

Accuracy : 0.9333Kappa:0.864Pos Pred Value : 0.9444Neg Pred Value : 0.9259Balanced Accuracy : 0.9281

Conclusion

LSTM 對異常偵測任務的效果非常仔細,對於微小變化也會有所反應,我認為如何訓練一般性( generalizability )佳的模型是進一步設計的方向。

Reference:

​​Malhotra, Pankaj, et al. “Long short term memory networks for anomaly detection in time series.” Proceedings. Presses universitaires de Louvain, 2015.

Anomaly Detection in Kibana

Kibana 6.6.0 後內附 Machine learning 的功能,協助沒有資料科學相關背景的使用者得以做到簡易的異常偵測。提供的項目包括:單一測度、多重測度、族群分析、進階選項。缺點是試用期僅 30 天。

任務面板

A little thought about the algorithm

來源網址

As the member of Elastic.co said, they used clustering, time series decomposition, Bayesian modeling and correlation analysis to deal with the anomaly detection. My guessing is that the Machine learning extension uses Prophet-like algorithm to predict the time series and clusters the residual based on the correlation coefficient matrix in a piecewise way.

Multi metric v.s. Population analysis

多重測度將多個時間序列視為互相獨立,而族群分析則是把所有時間序列視為一個族群互相比較。前者的基準互相獨立,後者的基準以族群測量。

概念上,我們不會期待CPU行為一致,所以多重測度應更符合需求。

多重測度於測試集的檢測結果

Performance

對於異常的判斷並不準確,多數時候即使異常發生也不會警報。

Accuracy : 0.7556Kappa : 0.433Pos Pred Value : 0.3889Neg Pred Value : 1.0000Balanced Accuracy : 0.8553

Conclusion

Kibana 的機器學習演算法可快速提供大規模群集下的異常偵測結果,雖然對異常情況不敏感,但也不失為一種選擇。

Appendix : Anomaly Detection in R

R語言身為統計分析的重要軟體,具有許多統計背景人士設計的套件,滿足各式各樣數據分析相關的需求。關於異常偵測,我們選擇 anomalize 套件對 CPU 處理器時間偵測單日異常,接著以 Shiny 套件產生使用者友善的介面,並藉由其網頁應用程式特性快速部署。

Algorithm

概念為去除季節性和趨勢後,進行異常值 (outlier) 偵測。

可分為以下兩部分:

Time series decomposition

Seasonal and Trend Decomposition using Loess (stl)

使用 Lowess 估計季節性和趨勢,相較 Twitter 法,散佈圖呈曲線。

Twitter

使用片段中位數估計季節性和趨勢,信賴區間較水平。

Anomaly detection

Generalized extreme studentized deviate test ( gesd )

個人覺得像 t 檢定針 對極值的延伸,並推廣至多重檢定上。

Interquantile range ( IQR )

四分位距,判斷較 gesd 為保守。

可參考

Conclusion

自動化偵測叢集使用狀態不僅可減輕管理機房人力上的需求,亦可提高人員對問題偵錯的速度。

此外,雖為我在這篇文章中的內容主要是 CPU 的異常偵測,同樣的架構亦可使用在信用卡盜刷、品質管理、消費者行為、交通流量……等題目上,此技術的應用範圍可以非常廣泛。

Implementation

warning: archived.

--

--

mz bai
mz bai

Written by mz bai

Math is math, math is universal Code is code, code is horrifying unique.

Responses (1)