譯自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的集成架構圖以下所示。oop
此外,還須要幾個支持組件。首先,全部異常檢測模型都是離線批處理(batch)產生的,而後應用到實時環境(real time)。其中批處理由三個步驟組成:
接下來,在線實時流便會使用這些存儲下來的模型,具體步驟以下:
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框架的適用性更強。
微信掃一掃,關注該公衆號