EGADS介紹(一)--框架處理流程分析


最近在做異常檢測相關的工作,因此調研了業界常用的異常檢測系統。通過查閱相關資料,發現業界對雅虎開源的EGADS系統評價比較高,其git項目已有980個star。這周閱讀了項目的源碼,梳理了系統框架的基本處理流程,整理成這篇文章。現分享給大家,希望對想了解EGADS系統工作原理的同學有所幫助。

1. 簡介

EGADS (Extensible Generic Anomaly Detection System 可擴展通用的異常檢測系統) 是雅虎開源的java庫,用於自動檢測大規模時序數據中的異常。它包含了許多異常檢測技術,適用於很多使用情況,只需要一個包,唯一依賴是java。EDADS的工作原理是,首先建立一個時間序列模型來計算時間t的預期值,然后通過對比時間t的預期值和實際值,計算出若干誤差E。EDADS自動確定E的閾值,並輸出最有可能的異常點。EGADS庫可以在各種各樣的情形中使用,以檢測具有各種季節性、趨勢和噪聲成分的時間序列中的異常點和變化點。

EGADS能夠准確、可擴展地檢測時間序列的異常。EGADS將預測和異常檢測分離成兩個獨立的組件,允許用戶將自己的模型添加到任何組件中。

2. 整體架構

EGADS框架由兩個重要部分組成:時間序列建模模塊(TMM)和異常檢測模塊(ADM)。給定一個時間序列,TMM組件對時間序列建模生成預期值,該值隨后被ADM消費並計算出異常評分。EGADS是作為一個框架構建的,可以很容易地集成到現有的監測基礎實施中。Yahoo內部的Yahoo監控服務(YMS)每秒處理數百萬的數據點。因此,有一個 可擴展的、准確的和自動化的異常檢測 對於YMS至關重要。基於此,EGADS可以編譯成一個輕量級jar包,並且很容易大規模部署。TMM和ADM可以在main/java/com/yahoo/egads/models找到。

EGADS系統將輸入數據轉化為時間序列,然后選擇一個時間序列模型應用於時間序列,構成時間序列建模模塊(TSMM),再把異常檢測模型應用於時間序列建模模塊輸出的預測值,構成異常檢測模塊(ADM),最終把檢測出的異常點寫入DB。整體架構如下圖所示。

egads系統集成

3. 框架處理流程

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源碼,筆者將框架處理流程划分為四部分:

  1. 初始化配置文件和輸入文件

主函數加載配置文件 sample_config.ini 和數據輸入文件sample_input.csv ,並實例化輸入文件的處理對象FileInputProcessor 。 這里要說明一點,如果數據是以其他形式輸入的,如通過控制台輸入,則需要示例化控制台輸入的處理對象StdinProcessor.

  1. 把輸入文件轉化為TimeSeries列表

FileInputProcessor 負責把輸入文件轉化為List<TimeSeries>,其中一個TimeSeries對象存儲了一列時間戳及對應的一列值,若輸入文件若包含了一列時間戳和n 列值,那么就會產生nTimeSeries組成的列表。

同時TimeSeries也封裝了時序數據的元數據信息,如文件名,列名稱等。然后根據配置中的參數,判斷是否需要對輸入數據進行簡單的缺失值處理和聚合處理。

  1. 加載時序模型和異常檢測模型

使用ProcessableObjectFactory工廠類構建時間序列模型。時序模型通過類加載器加載並實例化,示例中實例化的類為OlympicModel, 然后把時間序列TimeSeries和時序模型List<TimeSeriesModel>封裝成ModelAdapter,作為時序模型的模塊。

使用ProcessableObjectFactory工廠類構建異常檢測模型。異常檢測模型通過類加載器加載並實例化,示例中實例化的類為ExtremeLowDensityModel, 然后把時間序列TimeSeries和異常檢測模型List<AnomalyDetectionModel>封裝成AnomalyDetector,作為異常檢測模型的模塊。

最后把時序模型的模塊ModelAdapter和異常檢測模型的模塊AnomalyDetector封裝成異常檢測處理模塊DetectAnomalyProcessable.

  1. 使用時序模型預測,並使用異常檢測模型檢測出異常點

先使用時間序列訓練模型,根據訓練好的模型得到預期值,這里使用的模型為OlympicModel。接着使用異常檢測模型計算若干項誤差指標對應的閾值,其中誤差指標包括:MAE, sMAPE, MAPE, MASE,再根據各個誤差指標的閾值檢測出異常點,這里使用的模型為ExtremeLowDensityModel

下圖是EGADS框架詳細的處理流程圖。

egads_architecture_sequence

4. 參考資料

  1. https://github.com/yahoo/egads
  2. Yahoo 大規模時列數據異常檢測技術及其高性能可伸縮架構 https://www.infoq.cn/article/automated-time-series-anomaly-detection


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM