最近在搞異常檢測相關的工做,所以調研了業界經常使用的異常檢測系統。經過查閱相關資料,發現業界對雅虎開源的EGADS系統評價比較高,其git項目已有980個star。這周閱讀了項目的源碼,梳理了系統框架的基本處理流程,整理成這篇文章。現分享給你們,但願對想了解EGADS系統工做原理的同窗有所幫助。java
EGADS (Extensible Generic Anomaly Detection System 可擴展通用的異常檢測系統) 是雅虎開源的java庫,用於自動檢測大規模時序數據中的異常。它包含了許多異常檢測技術,適用於不少使用狀況,只須要一個包,惟一依賴是java。EDADS的工做原理是,首先創建一個時間序列模型來計算時間t的預期值,而後經過對比時間t的預期值和實際值,計算出若干偏差E。EDADS自動肯定E的閾值,並輸出最有可能的異常點。EGADS庫能夠在各類各樣的情形中使用,以檢測具備各類季節性、趨勢和噪聲成分的時間序列中的異常點和變化點。git
EGADS可以準確、可擴展地檢測時間序列的異常。EGADS將預測和異常檢測分離成兩個獨立的組件,容許用戶將本身的模型添加到任何組件中。github
EGADS框架由兩個重要部分組成:時間序列建模模塊(TMM)和異常檢測模塊(ADM)。給定一個時間序列,TMM組件對時間序列建模生成預期值,該值隨後被ADM消費並計算出異常評分。EGADS是做爲一個框架構建的,能夠很容易地集成到現有的監測基礎實施中。Yahoo內部的Yahoo監控服務(YMS)每秒處理數百萬的數據點。所以,有一個 可擴展的、準確的和自動化的異常檢測 對於YMS相當重要。基於此,EGADS能夠編譯成一個輕量級jar包,而且很容易大規模部署。TMM和ADM能夠在main/java/com/yahoo/egads/models
找到。shell
EGADS系統將輸入數據轉化爲時間序列,而後選擇一個時間序列模型應用於時間序列,構成時間序列建模模塊(TSMM),再把異常檢測模型應用於時間序列建模模塊輸出的預測值,構成異常檢測模塊(ADM),最終把檢測出的異常點寫入DB。總體架構以下圖所示。架構
EGADS的github上給出了一個簡單使用案例:框架
java -Dlog4j.configurationFile=src/test/resources/log4j2.xml -cp target/egads-*-jar-with-dependencies.jar com.yahoo.egads.Egads src/test/resources/sample_config.ini src/test/resources/sample_input.csv
以github上的示例爲例,經過閱讀EGADS源碼,筆者將框架處理流程劃分爲四部分:函數
主函數加載配置文件 sample_config.ini
和數據輸入文件sample_input.csv
,並實例化輸入文件的處理對象FileInputProcessor
。 這裏要說明一點,若是數據是以其餘形式輸入的,如經過控制檯輸入,則須要示例化控制檯輸入的處理對象StdinProcessor
.性能
FileInputProcessor
負責把輸入文件轉化爲List<TimeSeries>
,其中一個TimeSeries
對象存儲了一列時間戳及對應的一列值,若輸入文件若包含了一列時間戳和n
列值,那麼就會產生n
個TimeSeries
組成的列表。3d
同時TimeSeries
也封裝了時序數據的元數據信息,如文件名,列名稱等。而後根據配置中的參數,判斷是否須要對輸入數據進行簡單的缺失值處理和聚合處理。code
使用ProcessableObjectFactory
工廠類構建時間序列模型。時序模型經過類加載器加載並實例化,示例中實例化的類爲OlympicModel
, 而後把時間序列TimeSeries
和時序模型List<TimeSeriesModel>
封裝成ModelAdapter
,做爲時序模型的模塊。
使用ProcessableObjectFactory
工廠類構建異常檢測模型。異常檢測模型經過類加載器加載並實例化,示例中實例化的類爲ExtremeLowDensityModel
, 而後把時間序列TimeSeries
和異常檢測模型List<AnomalyDetectionModel>
封裝成AnomalyDetector
,做爲異常檢測模型的模塊。
最後把時序模型的模塊ModelAdapter
和異常檢測模型的模塊AnomalyDetector
封裝成異常檢測處理模塊DetectAnomalyProcessable
.
先使用時間序列訓練模型,根據訓練好的模型獲得預期值,這裏使用的模型爲OlympicModel
。接着使用異常檢測模型計算若干項偏差指標對應的閾值,其中偏差指標包括:MAE, sMAPE, MAPE, MASE,再根據各個偏差指標的閾值檢測出異常點,這裏使用的模型爲ExtremeLowDensityModel
。
下圖是EGADS框架詳細的處理流程圖。