1. 程式人生 > >Yahoo大規模時列資料異常檢測技術及其高效能可伸縮架構

Yahoo大規模時列資料異常檢測技術及其高效能可伸縮架構

))不同波動點(Change Points):給定輸入時間序列x,波動點是指在某個時間t,其狀態(行為)在這個時間序列上表現出與t前後的值不同異常時間序列:給定一組時間序列X={xi},異常時間序列xjX是在X
  • 上與大多數時間序列值不一致的部分

在以下部分中,我們給出了EGADS當前用於檢測上述異常型別的方法。

3.1 異常檢測

檢測異常值是許多監控應用中最重要的功能。EGADS提供了兩類用於檢測輸出的演算法,這些在本節中進行了描述。

3.1.1 外掛方法

EGADS中異常值檢測的第一類方法稱為外掛方法。為了模擬輸入時間序列的正常行為,可以業務和時序資料的特點來插入大量的時間序列模型和預測模型(例如ARIMA,指數平滑,Kalman濾波,狀態空間模型等)。這就是為什麼我們將這個總體策略稱為外掛方法。應該注意的是,所有這些模型都在EGADS中用於時間序列預測,這是我們框架的另一個特徵;然而,由於本文的重點是異常檢測,更多關於EGADS的建模和預測特徵的細節我們不進行更深入的討論。

我們提出的外掛框架由兩個主要元件組成:時間序列建模模組(TMM)和異常檢測模組(ADM)。給定時間序列X={xtRt0}

,TMM提供時間txt的預測值,由ut表示。我們也將這個量稱為xt的預期值(不要與期望的數學概念混淆)。TMM可以是機器學習模型,其基於資料或基於規則進行預測,在時間t上挖掘資料點xt

的具體表現特徵(如波動或異常)。本文中,可以認為TMM只是一個可以產生預測的黑匣子模組。在這個意義上,我們提出的框架是通用的,不依賴於任何特定的時間序列建模框架。

給定預測值ut

和實際觀測值xt

,ADM計算一些我們稱為偏差度量(DM)的偏差概念。最簡單的衡量偏差的方法是預測誤差,即:

PEt
=xtut
。如果錯誤超出某些固定閾值,則會發出警報。這種簡單的方法在某些情況下可能會起作用,但是對於大多數的方法來說,它不會是一個很好的策略,因為它不能捕獲到相對錯誤的具體資訊。

相對誤差REt

定義為ut

的一個因素:

REt=xtutut=xtut(1)

通過對相對誤差進行閾值處理,可以檢測異常值,同時對所期望值的幅度進行歸一化。雖然這些閾值確定了異常檢測模組的敏感度,然而,很難確定異常檢測的最佳度量。事實上,給定時間序列的最優度量的選擇取決於時間序列的性質以及TMM效能。例如,如果我們處理一個非常規則的時間序列,我們有一個準確的模型,使用預測誤差進行異常檢測可能就足夠了,因為它預期是正常分佈的。在其他情況下,最佳度量可能在預測誤差和相對誤差之間存在某種差異。因此,EGADS預設跟蹤一組偏差度量,使用系統的人可以建立自己的錯誤度量。在第4節中描述的警報模組(AM)中使用這些錯誤度量以及其他功能(如時間序列特徵)來了解使用者的偏好並過濾不重要的異常。

3.1.2 基於分解的方法

EGADS中第二類異常值檢測方法是基於時間序列分解的思想,在時間序列分析中,通常將時間序列分解為:趨勢、季節性和噪聲的三個要素。通過監測噪聲分量,可以捕獲異常值。更準確地說,如果點xt

的噪聲分量的絕對值大於某個閾值,則可以認為xt

為異常值。

3.2 變點檢測

在一些文獻裡有提到一種基於時間視窗的變點檢測技術,在EGADS中,目前採用基於模型的方法。在這些方法中,時間序列的預期行為通過3.1.1節中提到的建模技術建模。我們結合3.1.1節中描述的外掛方法來計算輸入時間序列的殘差序列(或模型預測的偏差)。然後我們對殘差系列應用絕對變化點檢測的方法來檢測殘差分佈。我們使用核心密度估計(Kernel Density Estimation)非引數估計殘差分佈和Kullback-Leibler(KL距離,常用來衡量兩個概率分佈的距離)來測量分佈變化。

3.3 檢測異常時間序列

EGADS支援的另一類異常檢測技術涉及檢測異常時間序列。異常時間序列T

定義為與其他時間序列有明顯的平均偏差的時間序列。假設所有的時間序列是均勻的,並且來自相同的源(即,是相同簇的一部分),則可以簡單地計算相對於其他時間序列的時間序列(i)的平均偏差。在EGADS中,我們目前的方法是基於各種時間序列特徵將時間序列聚類到一組簇 C 中,包括趨勢和季節性,光譜熵,自相關,平均歐幾里德距離等。在聚類後,我們通過測量叢集質心內和之間的偏差和時間序列(i

)執行幀內或群集時間序列異常檢測。這種EGADS異常檢測型別的常見場景是用來進行分類。例如,如果網路工程師希望在數百萬個時間序列中找到異常的伺服器,那麼以前的方法可能不切實際,因為建模是按照每個時間序列的基礎完成的,而不考慮其他度量的行為。這種異常檢測型別的另一個應用是發現類似的異常,這與以前的場景相反。

報警

異常檢測的最終目標是產生準確和及時的警報。 EGADS通過兩階段過程實現這一點,首先通過閾值選擇產生一組候選異常,然後對給定的規則過濾不相關的異常。

4.1 閾值選擇

閾值選擇的作用是根據異常檢測模組(ADM)產生的偏差度量選擇合適的閾值。目前,EGADS基於以下兩種閾值選擇演算法實現:

(a)Kσ 偏差

(b)密度分佈

第一種方法是引數化的,並假定資料正態分佈,有明確的平均值和標準偏差。依靠高斯分佈,並根據為“3sigma規則”(即:其中99.73%的樣本位於平均值的三個標準偏差之內。因此,根據Kσ中的K值,可以確定在時間t觀測樣品的可能性。根據所需的敏感度,可以測量給定的樣品是否在K = 2或1的所有樣品的95.45%或68.27%之內。請注意,這裡的假設是我們的偏差度量是正態分佈的。第二種方法是非引數的,並且對於偏差度量不是正態分佈的情況是有用的。基本思想是找到偏差度量分佈的低密度區域。一種方法是使用諸如區域性離群因子(LOF)的演算法。通過將物件的區域性密度與其鄰居的區域性密度進行比較,可以識別具有相似密度的區域,以及具有比鄰居密度明顯更低的密度的點,這些點被認為是異常值。

4.2 過濾

過濾是傳遞給應用的最後階段的處理。雖然作為過濾階段的輸入的候選異常在統計上是顯著的,但並不是所有異常都與特定用例相關。例如,一些應用對時間序列中的尖峰感興趣,而其他應用對下降感興趣,而其他應用對變化點感興趣。 EGADS提供了一個簡單直觀的介面,允許使用者標記時間序列的哪些區域是異常的。然後,該反饋被EGADS與時間序列和模型特徵一起用於訓練一個分類器,該分類器預測異常ai是否與使用者uj相關。 EGADS使用的時間序列資料特徵如表1所示。
表1 EGADS所使用的時序資料特徵表
時間序列功能 描述
週期(頻率) 週期對於確定季節性非常重要。
趨勢 如果平均水平存在長期變化,則存在
季節性 當時間序列受季節性因素影響時,如一年中的一個月或一週中的某一天
自相關 代表遠端依賴。
非線性 非線性時間序列包含通常不由線性模型表示的複雜動力學。
偏態 測量對稱性,或更加明確地說,缺乏對稱性。
峰度 如果資料相對於正常分佈達到峰值或平坦,則採取措施。
林中小丘 衡量時間序列的長期記憶。
李亞普諾夫指數 衡量附近軌跡的發散速度。

圖2顯示了樣本時間序列的特徵曲線。請注意,以dc開始的指標是在時間序列上經過調整後(即刪除趨勢和季節性資料後)得到的。在第6.2節中,我們將看看這些時間序列特徵如何影響模型效能。

這裡寫圖片描述

圖2:EGADS提取的時間序列及其特徵的一個示例

實驗研究

6.1資料

用於實驗的資料集由1:1的合成和真實資料混合而成。我們已經建立了一個合成的時間序列生成工具,該工具隨著框架和基準資料的開放。使用該工具,通過指定長度,幅度,異常數,異常型別,異常大小,噪聲水平,趨勢和季節性來生成合成時間序列。真實資料集使用了雅虎會員登入資料(YML)。合成和真實資料在時間序列都包含3000個數據點,YML資料包含了3個月的資料點。除非另有說明,所有實驗均以1000次隨機選取的時間序列進行,結果取平均值。還要注意,合成和真實資料都有異常標籤,方便測量精度和召回率。

6.2建模實驗

時間序列建模(由EGADS中的TMM元件捕獲)是異常檢測的基本部分。通常情況下,異常檢測與底層時間序列模型一樣好。由於大量的候選模型,模型選擇變得至關重要,並且取決於時間序列特徵和可用資源。在下面的實驗中,我們展示了時間序列特徵對模型效能的影響,並顯示了精度,實驗中使用的模型和誤差度量分別參見表2和3。

表2 用於建模實驗的模型列表
模型 描述
Olympic Model 季節模型,其中下一個點的預測是先前n個時期的平滑平均值
指數平滑模型 用於產生平滑時間序列比較流行的模型,雙重和三重指數平滑變數增加了模型的趨勢和季節性,用於實驗的ETS模型自動選擇最佳“擬合”指數平滑模型
移動平均模型 在這種模式下,預測是基於人為構建的時間序列,其中給定時間段的值被該值的平均值和一些前後時間段的值所取代,加權移動平均和初始預測模型是移動平均模型的特例
迴歸模型 使用一個或多個變數來對x
y
之間的關係進行建模
ARIMA Autoregressive integrated moving average
(T)BATS系列 帶有Box-Cox變換的指數平滑狀態空間模型
表3 用於建模實驗的指標列表
模型 描述
Bias 誤差的算術平均值
MAD 平均絕對偏差,也稱為MAE
MAPE 平均絕對百分比誤差
MSE 誤差的均方
SAE 絕對錯誤的總和
ME 平均誤差
MASE 平均絕對比例誤差
MPE 平均百分比誤差

6.2.1時間序列特徵和效能

為了證明時間序列特徵對模型效能的影響,我們比較了不同模型的時間序列與不同特徵的誤差度量(見4.2節)。圖3顯示了時間序列特徵在模型行為中起著重要作用。例如,季節性模式的Olympic模型在資料集上表現不佳,沒有季節性和強勁趨勢。 EGADS能夠跟蹤歷史時間序列特徵和模型效能,使用這些歷史資訊,EGADS選擇由表3中描述的誤差度量判斷的最佳模型(給定時間序列特徵)。實際上,基於資料特徵進行模型選擇比針對每個模型執行交叉驗證要快得多。

這裡寫圖片描述

圖3 具有不同特性的時間序列效能

6.2.2時序模型的可擴充套件性

如第2節所述,時序模型需要高效能技術以支援大規模(例如每秒數百萬點)資料流的實時計算,因此需要在模型大小、訓練時間和準確性之間進行權衡。 這種權衡在圖4(a)和4(b)中可以看出。 例如,從圖中可以看出,季節性天性模型很快訓練,但是具有較大的儲存要求和較高的平均誤差。 在雅虎,首先設定了資源和模型訓練時間的目標,然後選擇相應的模型。 換句話說,目標是將資源和模型建立時間限制下使得表3中的錯誤減到最小。

這裡寫圖片描述

圖4 模型大小與訓練時間的權衡

6.3異常檢測實驗

在本節中,我們比較了開源系統與EGADS,參考的開源系統如表4所示。

表4 開源異常檢測模型(系統)列表
模型 描述
EGADS ExtremeLow-密度模型異常值 EGADS基於密度的異常檢測
EGADS CP 基於EGADS核心的波動點檢測
EGADS KSigmaModel異常值 EGADS重新實現了經典的k-西格瑪模型
Twitter Outlier 基於廣義ESD方法的開源Twitter-R異常檢測庫
ExtremeI&II R異常值 開源單變異常值檢測,閾值絕對值和殘差檢測異常
BreakOut Twitter CP 來自Twitter基於ESD統計測試來檢測變化點的一個庫
ChangePt1 R CP 一個R庫,實現各種主流和專門的變化點方法,用於在資料中查詢單個和多個變化點
ChangePt2&3 R CP 檢測平均值和變數的變化

在圖5顯示了對6.1節中描述的資料的測試結果,比較方法採用:

F1Score=2××+

這裡寫圖片描述

圖5 異常模型在不同資料集上的表現(觀察到在所有資料集上沒有最好的單一模型)

結果可以看出,沒有一個最佳的異常檢測模型能適合所有業務場景,不同的演算法需要結合檢測不同型別的異常來確定。例如,Twitter在資料集TS2

上表現最好,而ExtremeLowDensity模型在TS3

上表現最好。但是,EGADS的設計初衷是在使用者對資料型別的時間序列和異常型別不瞭解的情況下,該系統能夠優雅和穩健地處理資料中存在的各種異常現象。因此,EGADS被構建為將一組異常檢測模型組合成一個最佳的框架的庫。這些模型的異常被轉發到過濾元件以進行精確的異常檢測。

6.4異常過濾實驗

異常的重要性往往取決於實際應用場景。具體來說,一些使用者可能對展示惡意攻擊的時間序列行為感興趣,而其他使用者可能對收入有興趣。
為了解決這個要求,過濾階段掃描所有模型的所有異常ai

,並使用分類為ai

作為真正的模型。在YM用例的過濾階段使用的模型是基於AdBoost的增強樹模型。模型中使用的特徵參見表1。AdaBoost的核心原理是在變化的資料上進行適合一系列weak learners(例如,小決策樹),最後的結果是通過組合加權多數表決產生的。圖6中的實驗結果表明,在濾波階段使用不同的模型特徵,得到比較好的精確率和召回率。

這裡寫圖片描述

圖6:使用不同型別特徵的過濾階段的精度

結論

異常檢測是許多具有故障應用的實時監控系統的核心部分, 檢測,欺詐檢測,網路入侵檢測等等。儘管它至關重要,但實際上實施全自動異常檢測系統是一項具有挑戰性的任務,這些挑戰通常導致解決方案不是可擴充套件的或高度專業化的,也導致了較高的誤報率。

在本文中,我們介紹了EGADS,雅虎實現的通用異常檢測系統,對不同的Yahoo屬性進行數百萬個時間序列進行自動監控和警報。正如我們在本文中所描述的,Hadoop上的EGADS的並行架構以及它通過Storm的流處理機制使得它能夠在雅虎的數百萬個時序資料集上執行實時異常檢測。此外,EGADS採用不同的時間序列建模和異常檢測演算法來處理不同的監控場景。通過將這一組演算法與機器學習機制結合在警報模組中,EGADS自動適應對使用者重要的異常檢測用例。所有這些功能都有效地建立了一個功能強大的異常檢測框架,它是通用的和可擴充套件的。我們對真實和綜合資料集的展示實驗表明,與其競爭對手的解決方案相比,我們的框架具有優越的適用性。

EGADS的設計本質上是可擴充套件的,為系統中插入新的模型和演算法提供了一種簡單的機制。我們的框架及其所有資料集都已經開源。