時間序列異常偵測

重要

Machine Learning 工作室 (傳統) 的支援將於 2024 年 8 月 31 日結束。 建議您在該日期之前轉換成 Azure Machine Learning

自 2021 年 12 月 1 日起,您將無法建立新的 Machine Learning 工作室 (傳統) 資源。 在 2024 年 8 月 31 日之前,您可以繼續使用現有的 Machine Learning 工作室 (傳統) 資源。

ML 工作室 (傳統) 文件即將淘汰,未來將不再更新。

偵測輸入時間序列資料中的異常狀況。

類別:時間序列

注意

適用于僅限機器學習 Studio (傳統)

Azure Machine Learning設計工具提供類似的拖放模組。

模組概觀

本文說明如何使用 機器學習 Studio 中的時間序列異常偵測模組, (傳統) 來偵測時間序列資料中的異常狀況。 此課程模組會瞭解您提供做為輸入的時間序列的正常作業特性,並使用該資訊來偵測與正常模式的偏差。 模組可以偵測整體趨勢中的變更,以及值的大小或範圍變更。

偵測時間序列資料中的變更具有廣泛的應用程式。 例如,您可以使用它來近乎即時地監視感應器、網路或資源使用量。 藉由追蹤服務錯誤、服務使用量和其他 KPI,您可以快速回應重大異常。 其他應用程式包括醫療保健和財務。

異常偵測方法

異常偵測是尋找不符合「正常」行為模型之資料模式的問題。 偵測這類變更的一般方法:使用簡單的人類計算臨界值,或平均值和標準差,以判斷資料何時明顯偏離平均值。

不過,這類簡單方法並不容易適應時間序列資料:

  • 會產生大量誤判異常

  • 方法不適用於變更資料值

  • 無法輕鬆地調整為大型時間序列

本課程模組提供兩個額外的方法來評估時間序列趨勢的差異:

  • 測量向上和向下變更的大小

    例如,Web 服務上的要求數目可能會有一段時間的最佳做法,然後大幅增加。

  • 測量趨勢的方向和持續時間:正面與負面變更

    例如,服務佇列長度的持續向上趨勢可能表示基礎問題。 即使整體趨勢持續增加,因此可能會被視為穩定,但斜率的變更可能會標示為異常。 相反地,如果您要監視伺服器的記憶體使用量,則可用記憶體大小的常數減少可能表示有問題。

時間序列中異常模式的範例

向上和向下層級變更

例如,假設您已在一段時間內監視 Web 服務的每日要求數目,而且要求數目似乎保持在特定範圍內。 不過,在 Web 服務更新之後,該 Web 服務的要求數目會變更。 新趨勢可能高於或低於原始趨勢;可以偵測到向上和向下尖峰。

upward and downward level changes

正面或負面趨勢變更

例如,假設您正在監視服務支援網站上的佇列長度。 持續性向上趨勢可能表示基礎服務問題。

在其他情況下,持續性負面趨勢可能是異常。 例如,如果您要監視伺服器上的記憶體使用量,當可用記憶體大小縮小時,可能會表示潛在的記憶體流失。

positive or negative trend change

資源

如需此方法基礎研究的詳細資訊,請參閱下列文章:

  • Shen-Shyang Ho;Wechsler, H., 「A Martingale Framework for Testing Exchangeability, Pattern Analysis and Machine Intelligence, IEEE Transactions, vol.32, no.12, pp.2113,2127, Dec. 2010

    Microsoft 學術) (來源和引文

  • Valentina Fedorova、Alex J. Gammerman、Ilia Nouretdinov、Azure Vovk、「外掛程式 martingales 以測試線上交換性」、ICML 2012

    Microsoft 學術) (來源和引文

  • Azure Vovk、Ilia Nouretdinov、Alex J. Gammerman、「Testing Exchangeability Online」、ICML 2003。

    Microsoft 學術) (來源和引文

如何設定時間序列異常偵測

  1. 時間序列異常偵測 模組新增至實驗,並連接包含時間序列的資料集。

    做為輸入的資料集必須至少包含一個資料行,其中包含字串格式的 datetime 值,以及另一個包含趨勢值的資料行,以數值格式表示。 會忽略其他資料行。

    因為每個資料列都會對應到時間序列中代表值的資料點,所以時間值應該是唯一的。

  2. 資料行:在資料集中選取包含數值資料值的單一資料行。 這些值是您想要模型化趨勢中的資料點,例如一段時間的母體總數、每個月的成本或溫度。

  3. 時間資料行:在資料集中選取包含相關聯時間序列值的單一資料行。

    資料行必須包含有效的 datetime 值,這表示所有日期都必須在.NET Framework支援的日期範圍內。

    Time 資料行必須使用 DateTime 資料類型。 如果您的日期採用字串格式,您可以使用套用SQL轉換模組來轉換它們,或使用執行 R 腳本模組加以轉換。 如果您的日期以整數表示,您也必須使用適當的日期時間轉換函數,以使用有效的 datetime 格式來表示值。

    例如,下列SQL語句會將Excel序列日期值變更為 datetime 格式:

     SELECT CAST([SerialDate]  AS SmallDateTime) as [NewValidDate] from t1;  
    

    日期值格式正確之後,請使用 [編輯中繼資料] 模組,將資料行類型設定為 DateTime。

  4. Martingale 類型:選取要使用的 martingale 函式。

    • PowerAvg。 這個選項是電源 martingale 的一種強大實作。

      預設值為 PowerAvg ,沒有其他參數。 此選項提供更穩定的異常偵測器,而且應該適用于大部分的需求。

    • 電源。 Power martingale 的非特殊實作。

      Power選項可讓使用者選擇為Epsilon參數提供介於 0 到 1 之間的值,以控制偵測器的敏感度。 一般而言,較高的 epsilon 值表示對異常的敏感度較高,但較不具確定性。

    如需此課程模組中所使用的 martingales 和方法的定義,請參閱: 使用機器學習來偵測時間序列資料中的異常偵測

  5. 奇怪的函式類型:此選項用於特定不同類型的異常。 支援三個選項,不需要進一步的參數:

    • RangePercentile

      這是預設值,主要用於偵測層級變更。

    • SlowPosTrend。 選擇此選項可偵測正向趨勢變更。

    • SlowNegTrend。 選擇此選項可偵測負面趨勢變更。

  6. Martingale奇怪值長度:指定歷程記錄視窗的大小,用來計算回溯歷程記錄的 martingale 值。

    預設值為 500,但您可以指定介於 0 到 5000 之間的任何整數。 對於大型時間序列,預設值應該正常運作。 對於較小的時間序列,您可以嘗試估計異常行為預期長度的值。

    建議您一般將這兩個參數設定為相同的值。

  7. 奇怪值的長度:指定用來計算每個資料點奇怪的歷程記錄視窗長度。

    預設值為 500,但您可以指定介於 0 到 5000 之間的任何整數。

    此參數的限制與 Martingale 的長度相同。 也就是說,您應該將值設定為學習「正常」行為所需的估計資料點數目。

    在大部分情況下,預設值為 500 很適合,但如果測量「正常性」的縮放比例會有所不同,則讓 「奇怪 值長度」的值大於 Martingale 的 Length可能會很有説明。

    例如,如果您要監視錯誤,並假設資料點的擷取間隔為 15 分鐘,瞭解一般趨勢所需的時間可能會從月份到月份有很大的差異。

    一般而言,使用較大的視窗大小會導致效能變慢,因為模組必須學習較大的資料集。

    建議您一般將這兩個參數設定為相同的值。

  8. 警示閾值:指定異常分數產生警示的值。

    預設值為 3.25,這表示會針對包含 3.25 或更多分數的每個資料列產生警示。 Y

    您可以指定介於 0 到 100 之間的任何浮點數。 不過,敏感度與信賴度之間的取捨,對於閾值的選擇有一個取捨:

    • 較低的臨界值會使偵測器更敏感于異常,並產生更多警示。

    • 較低的臨界值可能會導致一般變更分類為異常。

  9. 執行實驗。

    請注意,您不需要個別定型此模型;此演算法會從您提供作為本課程模組輸入的資料中學習模式。

結果

當定型完成時,模組會輸出與輸入時間序列相同的時間序列;不過,會加入兩個數據行,以指出可能異常的值。

  • 異常分數:第一個資料行包含一個分數,代表時間序列值異常的可能性。

  • 警示:此資料行包含值為 0 或 1 的旗標,其中 1 表示偵測到異常。 您可以根據分數資料行設定產生警示的臨界值,但設定 [警示臨界值 ] 參數。

範例

下列範例示範如何設定 martingale 函式來偵測異常,以及如何解譯結果。

偵測層級變更

為了說明不同設定的影響,本範例中使用的範例資料集包含 8870 個資料點,有三個層級的變更。 根據此資料,我們使用下列參數建立兩個模型。

  • Martingale 類型PowerAvg

  • 奇怪的函式類型RangePercentile

  • Martingale 的長度 = 50

  • 奇怪值的長度 = 50

模型已針對傳入資料定型,但已針對 警示臨界值套用不同的值。 預測的結果會繪製在模型 1 和模型 2 的下列影像中。 在這些圖表中,藍色線條代表資料值,而紅色線條代表異常引發的 警示

警示閾值為 0.9

level change with alert of 0.9

在此模型中,臨界值較低,因此即使變更是暫時的,也會引發警示 () 偵測到的異常狀況。

根據您正在監視的時間序列類型,其中一些警示可能會被視為 False 警示。 不過,如果您無法承受忽略任何異常,則較低的臨界值可能較佳。

警示閾值 3.25

level change with alert of 3.25

在此模型中,警示閾值較高,因此,模型只會偵測持續較長的變更。 在您只想攔截更長期變更的案例中,警示的臨界值可能會比較理想。

偵測正斜率變更

為了說明異常偵測的這個選項,我們使用包含 300 個資料點的範例資料集。 所有點都形成整體正面趨勢,並具有兩個異常。

同樣地,我們使用除了警示閾值以外的相同參數來建立兩個模型。

  • Martingale 類型PowerAvg

  • 奇怪的函式類型SlowPosTrend

  • Martingale 的長度 = 50

  • 奇怪值的長度 = 50

在這些圖表中,藍色線條代表資料值,而紅色線條代表異常引發的警示。

警示閾值 4.25

positive trend with alert of 4.25

警示閾值 6.0

positive trend with alert threshold of 6.0

建議您試驗不同的警示閾值,以找出異常偵測案例的適當敏感度層級。

預期的輸入

名稱 類型 描述
包含時間戳記和值的輸入資料 資料表 包含日期時間戳記和值的輸入資料。

模組參數

名稱 類型 範圍 選擇性 預設 描述
值資料行 ColumnSelection 必要 選擇包含要追蹤之時間序列的資料行
視窗大小 整數 必要 指定值,以控制分析視窗的大小
臨界值 Float 選擇性 指定值,以判斷分數上的臨界值,以識別異常

輸出

名稱 類型 描述
以異常分數標注的時間序列 資料表 具有異常間隔的資料集。

另請參閱

異常偵測
一級支援向量機器
PCA 型異常偵測