自動化時序異常檢測的可擴充套件通用框架

iEven發表於2019-03-13

譯自Generic and Scalable Framework for Automated Time-series Anomaly Detection

作者:Nikolay Laptev, Saeed Amizadeh, Ian Flint

背景

雖然計算軟硬體的快速發展已經極大地提高了應用的效能,但大型叢集中依然存在各類軟硬體問題,影響了使用者體驗和收益。系統需要不間斷執行,對系統的監控也必須持續進行。從資料分析角度來看,只有不間斷監控大量時序資料才能監測到潛在的故障或異常。由於系統異常或軟體bug很多,人工監控幾乎是不可能的,因此非常有必要通過機器學習和資料探勘技術進行自動化異常檢測。

本文介紹了雅虎開發的大規模時序資料自動化異常檢測的可擴充套件通用框架EGADS。異常檢測對於維護資料一致性非常重要,能夠有效攔截惡意攻擊。現有的異常檢測工具在擴充套件性、用例限制、使用難度等方面存在很大侷限。EGADS通過多種異常檢測和預測模型構建了異常過濾層,實現了準確的時序資料檢測。相比其他異常檢測工具,EGADS在準確度和召回率方面有了50-60%的提升。EGADS框架與異常檢測基準資料均已開源,旨在建立異常檢測標準。

1. EGADS架構

EGADS框架由三個主要部分組成:時間序列建模模組(TMM)、異常檢測模組(ADM)和報警模組(AM)。給定一個時間序列,TMM元件針對時間序列建模,生成預期值;預期值由ADM和AM元件進行消費處理。其中,ADM負責計算誤差,AM負責過濾無關異常。

EGADS是一個框架,便於與現有監控基礎設施整合。雅虎內部監控工具雅虎監控服務(YMS)每秒處理數百萬個資料點。因此,對YMS進行精準可擴充套件的自動化異常檢測至關重要。下面將詳細介紹與YMS的整合。

1.1系統整合

EGADS作為獨立平臺執行,可用作大型系統中的庫。因此,EGADS與YMS之間的介面至關重要。YMS每秒處理數百萬個資料點。因此,很多整合架構決策主要關注優化實時資料處理。EGADS與YMS的整合架構圖如下所示。

自動化時序異常檢測的可擴充套件通用框架

此外,還需要幾個支援元件。首先,所有異常檢測模型都是離線批處理(batch)產生的,然後應用到實時環境(real time)。其中批處理由三個步驟組成:

  1. 監控資料(即監控的時間序列資料)批量儲存在Hadoop叢集上。
  2. 批量模型生成器基於監控資料執行,併為目標時間序列構建模型。
  3. 模型儲存在模型資料庫中。

接下來,線上實時流便會使用這些儲存下來的模型,具體步驟如下:

  1. 資料流入Storm進行流式處理。
  2. 叢集中的一個模組呼叫EGADS ADM,根據儲存在模型資料庫中的模型來評估流入的資料點。
  3. 如果存在異常,則將其傳送到輔助規則流。輔助規則流由組合規則和基於特定用例的邏輯組成。
  4. 根據規則,如果異常是報警事件,則生成事件,將事件儲存在狀態資料庫中,並轉發到報警路由系統。
  5. 報警路由系統應用路由配置規則將報警傳送給相應的報警物件。

1.2可擴充套件性

EGADS的監控用例每秒需要分析億級時間序列的百萬級資料點,要求CPU負載、I/O和記憶體佔用方面均具有可擴充套件性,且資料點的處理效率需要儘可能高,因此需要對大量模型進行預計算。考慮到效能消耗,針對每個資料點逐次從磁碟讀取模型並不現實。因此模型應該儲存在記憶體中。此外,出於控制成本的考慮,模型應儘可能小。

多個相似時序共享模型便是一種有效的優化方式。這種方式尤其適用於大型Web服務環境,因為在這種環境中,應用分佈在相似伺服器的水平層上。這種優化方式能夠有效減少模型資料庫的記憶體消耗、批處理工作量,提升I/O效能。

自調優模型是另一種優化方式。通過線上學習,這種模型能夠根據入站資料流實現自動更新。這類模型需要批量初始化,但整體上能夠減少批處理工作量。不過這種方式可能增加模型資料庫的寫工作量。

模型大小、訓練速度和準確度之間的平衡也是一種選擇。根據時序特徵,輕量快速的預測模型的準確性也很不錯。

2.異常檢測演算法

本節彙總了EGADS支援的異常檢測演算法。目前EGADS能夠檢測三類異常:

(a) 異常值:在給定時間序列X上,某個時間戳值對(T, Xt)中的觀測值Xt與期望值E(Xt)顯著不同。

(b) 變點:給定時間序列x在某個時間戳t的狀態(行為)與相鄰值顯著不同。

(c) 異常時間序列:在給定的一組時間序列X = {X(i)}中,與大多數時間序列不一致的序列。

2.1異常值檢測

異常值檢測是很多監控應用中最重要的功能。本文中,除有特殊說明,異常值均指預設異常。

2.1.1外掛法

這類方法對時間序列的正常行為進行建模,明顯偏離模型的資料便是異常值。為了模擬已有時間序列的正常行為,可以根據應用和時序資料的特徵插入大量的時間序列模型和預測模型(例如ARIMA、指數平滑、Kalman濾波、狀態空間模型等)。因此,我們稱這種方法為外掛法。在EGADS中,這些模型均用於時間序列預測,這也是該框架的另一個特徵。由於本文的重點是異常檢測,因此不再對EGADS的建模和預測特徵進行深入討論。

我們提出的外掛框架包括兩個主要元件:時間序列建模模組(TMM)和異常檢測模組(ADM)。給定時間序列X ={Xt∈R : ∀t ≥0},TMM提供時間t的預測值Xt,記為Ut。該值也被稱為預期值xt (不同於數學中的期望值概念)。TMM可以是機器學習模型,基於訓練資料或規則系統進行預測,挖掘資料點Xt 在時間t的行為。我們可以將TMM理解為一個可以產生預測的黑匣子模組。從這個意義上來說,EGADS框架是通用的,不依賴於任何特定的時間序列建模框架。

給定預測值Ut 和實際觀測值Xt,ADM便會計算偏差度量。衡量偏差最簡單的方法是預測誤差,即:PEt=Xt-Vt。如果偏差超出閾值,則傳送報警。這種方法無法捕獲相對偏差,因而僅適用於少數場景。相對偏差計算公式為REt=(Xt-Vt)/Vt=Xt/Vt。

對相對誤差進行閾值處理後便可以檢測異常值,同時調整期望值範圍。閾值決定了異常檢測模組的敏感度。相對誤差雖然是常用的有效度量,但未必是所有時間序列異常檢測的最佳度量。事實上,給定時間序列的最優度量取決於時間序列的性質以及TMM效能。針對非常規則的時間序列,如果存在準確模型,使用預測誤差進行異常檢測可能就足夠了。因為根據預期,異常的分佈是有規律的。在其他情況下,最佳度量可能介於預測誤差和相對誤差之間。因此,EGADS預設跟蹤一組偏差度量。使用者可以建立自己的誤差度量。報警模組(AM)使用這些誤差度量和其他功能(如時間序列特徵)來了解使用者的偏好,過濾不重要的異常。

2.1.2分解法

EGADS中第二類異常值檢測方法基於時間序列分解的思想。時間序列通常被分解為趨勢、季節性和噪聲的三個要素。通過監測噪聲可以捕獲異常值。準確來說,如果點Xt噪聲的絕對值大於某個閾值,則可以認為Xt 為異常值。

時間序列分解可以通過時域平滑實現,也可以通過頻域頻譜分解實現。STL是最常用的平滑分解方法。頻域分解又可以進一步分為引數性頻域分解和非引數性頻域分解。引數性頻譜分解基於已知引數形式;非引數性頻域分解則基於資料。

2.2變點檢測

變點即時間序列的行為偏離預期的時間點。變點與異常值的主要區別在於,變點往往是持續一段時間的變化,而異常值則是波動性變化。文獻中提到的常有的變點檢測方法是將時間序列上的兩個視窗並列平鋪,計算兩個視窗中時間序列的行為差異。

根據時間序列中的值、基序、頻率等的分佈,對每個視窗中時間序列的行為建模。這種方法不對時間序列的預期行為作出具體推測,因而被稱為絕對方法。

目前EGADS採用的是基於模型的方法。這些方法通過前文提到的建模技巧對時間序列的預期行為進行建模。EGADS結合外掛法來計算已知時間序列的殘差序列(或模型偏差),然後採用絕對變點檢測殘差分佈。EGADS採用核心密度估值(Kernel DensityEstimation)來估計殘差分佈,採用Kullback-Leibler來測算分佈變化。

在實際應用中,基於模型的變點檢測方法比絕對方法更常用,因為超過一定的時間點後,模型便無法再解釋時間序列的行為;而變點則能解釋這些行為。如果超過絕對變點後,模型依然能夠解釋時間序列的行為,則該時間點就不需要再被視為變點,即變點是相對的。因此,相對變點檢測技術也隨之誕生。

2.3異常時間序列檢測

EGADS還支援檢測異常時間序列。異常時間序列T是指平均偏差與其他時間序列存在明顯差別的時間序列。假設所有的時間序列是均勻、同源(即來自同一叢集)的,則可以計算時間序列(i)相對於其他時間序列的平均偏差。目前,EGADS基於各種時間序列特徵(包括趨勢和季節性、光譜熵、自相關、平均歐幾里德距離等)將時間序列聚類到一組叢集中。聚類後,通過測量叢集內和叢集之間時間序列的偏差,實現時間序列的異常檢測。這種異常檢測方式常用於分類。如果網路工程師需要從數百萬個時間序列中找到異常伺服器,此前的方法顯然不適用。因為建模是針對每個時間序列的,不考慮其他度量的行為。這種異常檢測方式還可以用於發現類似異常。

3.報警

異常檢測的最終目的是產生準確及時的報警。EGADS首先通過設定閾值產生一組候選異常,然後過濾掉與給定用例不相關的異常。

3.1設定閾值

設定閾值的目的是為異常檢測模組(ADM)產生的偏差度量選擇合適的閾值。目前,EGADS根據Kσ偏差和密度分佈採用以下兩種閾值設定演算法:

第一種演算法是引數方法,假定資料正態分佈,且有明確的平均值和標準偏差。根據高斯分佈,可以採用“3sigma原則”,即99.73%的樣本在平均值的三個標準偏差範圍之內。因此,根據Kσ中的K值,可以確定在時間t觀測到樣本的可能性。根據所需的敏感度,可以測算當K = 2或1時,給定的樣品是否在所有樣品的95.45%或68.27%之內。注意此處是假設偏差度量是正態分佈的。

第二種演算法是非參方法,且適用於偏差度量為非正態分佈的場景,主要目的是找到偏差度量分佈的低密度區域。一種方法是使用像區域性異常值因子(LOF)這樣的演算法。通過對比某一個點與其相鄰點的區域性密度,識別具有相似密度的區域以及密度明顯低於相鄰點的點。這些點被視為異常值。

3.2過濾

過濾是對異常的最後一次處理。過濾階段的候選異常雖然具有統計學意義,但並非所有的候選異常都與特定用例相關。有些應用對時間序列中的峰值感興趣,有些應用對谷值感興趣,還有些應用對變點感興趣。 EGADS提供了一個簡單直觀的介面,支援使用者標記時間序列中的異常區域。然後EGADS結合標記資料、時間序列和模型特徵訓練分類器,該分類器用於預測異常與用例是否相關。EGADS使用的時間序列的特徵如下表所示。和其他元件一樣,過濾元件的模型和特徵均可擴充套件。

自動化時序異常檢測的可擴充套件通用框架

下圖為樣本時間序列的特徵曲線。注意,以dc開頭的度量是從調整後的時間序列(即刪除趨勢和季節性資料)上得到的。

自動化時序異常檢測的可擴充套件通用框架

4.實驗研究

下文介紹了建模實驗、異常檢測實驗和報警實驗。

4.1資料

實驗資料集由合成資料和真實資料按照1:1的比例混合而成。雅虎開發了合成時間序列的生成工具,該工具已與框架和基準資料一起開源。使用該工具可以生成指定長度、幅度、異常數量、異常型別、異常大小、噪聲水平、趨勢和季節性的合成時間序列。真實資料集使用了雅虎會員登入資料(YML)。合成時間序列和真實時間序列均包含3000個資料點。除非另有說明,所有實驗均包含1000個隨機選取的時間序列,結果取平均值。此外,合成資料和真實資料都有異常標籤,方便測量精度和召回率。

4.2建模實驗

時間序列建模(由TMM元件捕獲)是異常檢測的基本構成。通常情況下,異常檢測的效果取決於底層時間序列模型。因此模型選擇至關重要。此外,時間序列特徵和可用資源也會影響選模。下面的實驗體現了時間序列特徵對模型效能的影響以及精度、記憶體消耗與訓練時間之間的平衡。實驗中使用的模型和誤差度量見下表。

自動化時序異常檢測的可擴充套件通用框架

自動化時序異常檢測的可擴充套件通用框架

4.2.1時間序列特徵與模型效能

為了驗證時間序列特徵對模型效能的影響,我們比較了不同模型應用於具有不同特徵的時間序列時的誤差度量。下圖表明,時間序列特徵在模型行為中起著重要作用。例如,Olympic模型為季節性模型,當應用於沒有季節性和明顯趨勢特徵的資料集時便會表現不佳。據此,EGADS便會根據上表中的誤差度量選擇最佳模型(給定時間序列特徵)。實際上,基於資料特徵選擇模型比針對每個模型執行交叉驗證更有效率。

自動化時序異常檢測的可擴充套件通用框架
具有明顯趨勢特徵的時間序列的模型效能

自動化時序異常檢測的可擴充套件通用框架
具有明顯季節性特徵的時間序列的模型效能

4.2.2時間序列模型的可擴充套件性

時序模型依賴高效能技術才能完成大規模(如每秒數百萬點)資料流的實時計算,因此需要在模型大小、訓練時間和準確性之間進行權衡。從下圖中可以看出,季節性模型訓練時間段,但記憶體消耗大,平均誤差高。雅虎的做法是先設定資源和模型訓練時間目標,然後選擇相應的模型,即目標是在限制資源和模型建立時間的前提下,將錯誤數量控制在最低。

自動化時序異常檢測的可擴充套件通用框架
模型大小與訓練時間之間的平衡

自動化時序異常檢測的可擴充套件通用框架
模型準確度

4.3異常檢測實驗

下圖表明,目前不存在適合所有業務場景的異常檢測模型。Twitter在TS-2資料集上表現最好,ExtremeLowDensity模型在TS-3上表現最好。EGADS的設計初衷是在對資料中的時間序列型別和異常型別不瞭解的情況下,系統能夠優雅穩健地處理資料中的各種異常。因此,EGADS被構建成一個庫,將一組異常檢測模型組合成一個最佳框架。模型中的異常被轉發到過濾元件,進行精確的異常檢測。

自動化時序異常檢測的可擴充套件通用框架
異常模型在不同資料集上的表現

4.4異常過濾實驗 實際應用場景決定了異常是否重要。有些使用者可能關注與惡意攻擊相關的時間序列行為,有些使用者則更關注對與收入下降相關的時間序列行為。

為滿足不同的需求,EGADS在過濾階段掃描所有模型的所有異常,然後為不同的異常匹配相應的模型。YM用例在過濾階段使用的模型是基於AdaBoost的增強樹模型。AdaBoost的核心原理是為不斷變化的資料匹配弱學習器(如小決策樹),然後進行組合加權計算,得出最終結果。經過迭代,較難預測的樣例的權重會逐漸變大,弱學習器也會相應地關注被之前的學習器漏掉的樣例。下圖實驗結果表明,過濾後的結果準確度更高,召回率更低。這些實驗表明,異常與具體用例密切相關,完全自動化的可擴充套件解決方案是實現有效異常檢測的最佳解決方案。

自動化時序異常檢測的可擴充套件通用框架
不同型別特徵在過濾階段的準確度

5.結論

異常檢測是許多實時監控系統的核心部分,具有故障檢測、欺詐檢測和網路入侵檢測等功能。

但現實中由於大規模問題和各種用例的存在,全自動異常檢測系統很難實現。現有解決方案往往存在不可擴充套件或專業化程度過高的問題,且誤報率較高。

EGADS這一通用異常檢測系統能夠對數百萬個時間序列進行自動監控和警報。Hadoop上EGADS的並行架構及其Storm流處理機制支援EGADS對雅虎的數百萬個時間序列進行實時異常檢測。此外,EGADS還通過不同的時間序列建模和異常檢測演算法滿足不同的場景需求。報警模組將演算法與機器學習機制結合以後,EGADS便能夠自動適應具體異常檢測場景。這些功能共同建立了一個功能強大的可擴充套件通用的異常檢測框架。實驗表明,與其他解決方案相比,EGADS框架的適用性更強。

微信掃一掃,關注該公眾號

自動化時序異常檢測的可擴充套件通用框架

相關文章