共用方式為


使用 Multivariate 異常偵測程式 API 的最佳做法

重要

從 2023 年 9 月 20 日起,您將無法建立新的異常偵測程式資源。 異常偵測程式服務將于 2026 年 10 月 1 日淘汰。

本文提供使用多重變數異常偵測程式 (MVAD) API 時所要遵循之建議做法的指引。 在本教學課程中,您將:

  • API 使用方式 :瞭解如何使用 MVAD 而不發生錯誤。
  • 資料工程 :瞭解如何充分利用您的資料,讓 MVAD 以更佳的精確度執行。
  • 常見陷阱 :瞭解如何避免客戶遇到的常見陷阱。
  • 常見問題 :瞭解常見問題的解答。

API 使用量

請遵循本節中的指示,避免使用 MVAD 時發生錯誤。 如果您仍然收到錯誤,請參閱 錯誤碼 的完整清單,以取得要採取的說明和動作。

輸入參數

必要參數

定型和推斷 API 要求需要這三個參數:

  • source- 您的 zip 檔案連結位於具有共用存取簽章的 Azure Blob 儲存體 (SAS)。
  • startTime - 用於定型或推斷的資料開始時間。 如果它早于資料中實際最早的時間戳記,則會使用實際最早的時間戳記作為起點。
  • endTime - 用於定型或推斷的資料結束時間,必須晚于或等於 startTime 。 如果 endTime 晚于資料中的實際最新時間戳記,則會使用實際的最新時間戳記作為結束點。 如果 endTime 等於 startTime ,則表示推斷一個經常用於串流案例的單一資料點。

定型 API 的選擇性參數

定型 API 的其他參數是選擇性的:

  • slidingWindow - 使用多少個資料點來判斷異常狀況。 介於 28 到 2,880 之間的整數。 預設值為 300。 如果 slidingWindowk 用於模型定型,則推斷期間至少 k 應該可從來源檔案存取點,以取得有效的結果。

    MVAD 會採用資料點區段來決定下一個資料點是否為異常。 線段的長度為 slidingWindow 。 選擇 slidingWindow 值時,請記住兩件事:

    1. 資料的屬性:其是否為定期和取樣率。 當您的資料是定期時,您可以將 1 - 3 個週期的長度設定為 slidingWindow 。 當您的資料處於高頻率(小細微性)時,例如分鐘層級或第二層,您可以設定相對較高的值 slidingWindow
    2. 定型/推斷時間和潛在效能影響之間的取捨。 較大的 slidingWindow 可能會造成較長的定型/推斷時間。 不保證 較大的 slidingWindow 會導致精確度提升。 小型 slidingWindow 可能會導致模型難以交集到最佳解決方案。 例如,當只有兩個點時 slidingWindow ,很難偵測異常。
  • alignMode - 如何在時間戳記上對齊多個變數(時間序列)。 此參數有兩個選項, InnerOuter 預設值為 Outer

    當變數的時間戳記序列之間有不對齊時,這個參數非常重要。 模型必須先將變數對齊相同的時間戳記序列,才能進一步處理。

    Inner表示模型只會報告每個變數 具有值之 時間戳記的偵測結果,也就是所有變數的交集。 Outer表示模型會報告任何變數 具有值之 時間戳記的偵測結果,也就是所有變數的聯集。

    以下是說明不同 alignModel 值的範例。

    Variable-1

    timestamp value
    2020-11-01 1
    2020-11-02 2
    2020-11-04 4
    2020-11-05 5

    Variable-2

    timestamp value
    2020-11-01 1
    2020-11-02 2
    2020-11-03 3
    2020-11-04 4

    Inner 聯結兩個變數

    timestamp Variable-1 Variable-2
    2020-11-01 1 1
    2020-11-02 2 2
    2020-11-04 4 4

    Outer 聯結兩個變數

    timestamp Variable-1 Variable-2
    2020-11-01 1 1
    2020-11-02 2 2
    2020-11-03 nan 3
    2020-11-04 4 4
    2020-11-05 5 nan
  • fillNAMethod - 如何填 nan 入合併的資料表。 合併資料表中可能有遺漏的值,而且應該正確處理這些值。 我們提供數種方法來填滿它們。 選項為 LinearPreviousSubsequentZeroFixed ,而預設值為 Linear

    選項 方法
    Linear 依線性插補填滿 nan
    Previous 傳播最後一個有效值以填滿間距。 範例: [1, 2, nan, 3, nan, 4] ->[1, 2, 2, 3, 3, 4]
    Subsequent 使用下一個有效值來填滿間距。 範例: [1, 2, nan, 3, nan, 4] ->[1, 2, 3, 3, 4, 4]
    Zero 以 0 填滿 nan 值。
    Fixed 以應該在 中 paddingValue 提供的指定有效值填入 nan 值。
  • paddingValue- 填補值是用來填滿 nan 當 為 FixedfillNAMethod ,而且必須在該案例中提供。 在其他情況下,這是選擇性的。

  • displayName - 這是用來識別模型的選擇性參數。 例如,您可以使用它來標記有關模型及其輸入資料的參數、資料來源和任何其他中繼資料。 預設值為空字串。

輸入資料架構

MVAD 會從一組計量偵測異常,而我們會呼叫每個計量變數 或時間序列。

  • 您可以從 Microsoft 下載範例資料檔案,以檢查接受的架構: https://aka.ms/AnomalyDetector/MVADSampleData

  • 每個變數都必須有兩個且只有兩個欄位, timestamp 而且 value 應該儲存在逗號分隔值 (CSV) 檔案中。

  • CSV 檔案的資料行名稱應該精確 timestampvalue 區分大小寫。

  • 這些 timestamp 值應該符合 ISO 8601; value 可以是整數或小數位數,且具有任意數目的小數位數。 CSV 檔案內容的良好範例:

    timestamp value
    2019-04-01T00:00:00Z 5
    2019-04-01T00:01:00Z 3.6
    2019-04-01T00:02:00Z 4
    ... ...

    注意

    如果您的時間戳記有小時、分鐘和/或秒,請確定時間戳記在呼叫 API 之前已正確四捨五入。

    例如,如果您的資料頻率應該是每 30 秒一個資料點,但您會看到 「12:00:01」 和 「12:00:28」 之類的時間戳記,這是一個強訊號,表示您應該將時間戳記預先處理到 「12:00:00」 和 「12:00:30」 等新值。

    如需詳細資訊,請參閱 最佳做法檔中的一節

  • csv 檔案的名稱將做為變數名稱,而且應該是唯一的。 例如,「temperature.csv」 和 「humidity.csv」。

  • 定型的變數和推斷的變數應該是一致的。 例如,如果您使用 series_1 、、 series_2series_3series_4series_5 進行定型,則應該提供完全相同的變數來推斷。

  • CSV 檔案應該壓縮成 zip 檔案,並上傳至 Azure Blob 容器。 zip 檔案可以有您想要的任何名稱。

資料夾結構

資料準備的常見錯誤是 zip 檔案中的額外資料夾。 例如,假設 zip 檔案的名稱是 series.zip 。 然後將檔案解壓縮到新資料夾 ./series 之後, CSV 檔案的正確 路徑是 ./series/series_1.csv ,而且 路徑錯誤 可能是 ./series/foo/bar/series_1.csv

解壓縮 Windows 中的 zip 檔案之後,目錄樹狀結構的正確範例

.
└── series
    ├── series_1.csv
    ├── series_2.csv
    ├── series_3.csv
    ├── series_4.csv
    └── series_5.csv

解壓縮 Windows 中 zip 檔案之後目錄樹狀目錄樹狀目錄的不正確範例

.
└── series
    └── series
        ├── series_1.csv
        ├── series_2.csv
        ├── series_3.csv
        ├── series_4.csv
        └── series_5.csv

資料工程

現在您可以使用 MVAD API 執行程式碼,而不會發生任何錯誤。 可以做些什麼來改善您的模型精確度?

資料品質

  • 當模型從歷程記錄資料學習一般模式時,定型資料應該代表 系統的整體正常 狀態。 如果定型資料充滿了異常,模型很難瞭解這些類型的模式。 異常率的經驗閾值為 1%, 低於正確性。
  • 一般而言, 定型資料的遺漏值比率應低於 20%。 太多遺漏的資料最後可能會自動填滿值(通常是線性值或常數值)學習為一般模式。 這可能會導致偵測到實際(未遺漏)資料點為異常。

資料數量

  • MVAD 的基礎模型具有數百萬個參數。 它需要最少的資料點數目,才能瞭解一組最佳的參數。 經驗規則是,您必須為每個變數 提供 5,000 個以上的資料點(時間戳記),才能將模型定型,以取得良好的精確度。 一般而言,定型資料越多,精確度就越好。 不過,當您無法累算那麼多的資料時,我們仍然鼓勵您試驗較少的資料,並查看遭入侵的精確度是否仍可接受。

  • 每次呼叫推斷 API 時,都需要確保來源資料檔只包含足夠的資料點。 這通常是 slidingWindow + 真正 需要推斷結果的資料點 數目。 例如,在串流案例中,當您每次想要推斷 ONE 新時間戳記時,資料檔案只能包含前置 slidingWindow ONE 資料點;然後您可以繼續並建立具有相同資料點數目的另一個 zip 檔案( slidingWindow + 1),但將 ONE 步驟移至「右側」,並提交給另一個推斷作業。

    超過該或「之前」前置滑動視窗的任何專案都不會影響推斷結果,而且可能只會造成效能降級。 以下任何可能導致 NotEnoughInput 錯誤的任何專案。

時間戳記進位

在一組變數(時間序列)中,每個變數都可以從獨立來源收集。 不同變數的時間戳記可能會彼此和已知頻率不一致。 以下是簡單的範例。

Variable-1

timestamp value
12:00:01 1.0
12:00:35 1.5
12:01:02 0.9
12:01:31 2.2
12:02:08 1.3

Variable-2

timestamp value
12:00:03 2.2
12:00:37 2.6
12:01:09 1.4
12:01:34 1.7
12:02:04 2.0

我們有兩個變數從兩個感應器收集,每 30 秒傳送一個資料點。 不過,感應器不會以嚴格的偶數頻率傳送資料點,但有時較舊且稍後會傳送資料點。 由於 MVAD 會考慮不同變數之間的相互關聯,因此時間戳記必須正確對齊,以便計量可以正確反映系統的狀況。 在上述範例中,變數 1 和變數 2 的時間戳記必須在對齊之前正確「四捨五入」到其頻率。

讓我們看看如果沒有預先處理,會發生什麼事。 如果我們設定 alignModeOuter (這表示兩組的聯集),合併的資料表為:

timestamp Variable-1 Variable-2
12:00:01 1.0 nan
12:00:03 nan 2.2
12:00:35 1.5 nan
12:00:37 nan 2.6
12:01:02 0.9 nan
12:01:09 nan 1.4
12:01:31 2.2 nan
12:01:34 nan 1.7
12:02:04 nan 2.0
12:02:08 1.3 nan

nan 表示遺漏值。 顯然,合併的資料表不是您可能預期的資料表。 變數 1 和變數 2 交錯,而 MVAD 模型無法擷取它們之間相互關聯的相關資訊。 如果設定 alignModeInner ,則合併的資料表是空的,因為變數 1 和變數 2 中沒有常見的時間戳記。

因此,變數 1 和變數 2 的時間戳記應該預先處理(四捨五入為最接近的 30 秒時間戳記),而新的時間序列為:

Variable-1

timestamp value
12:00:00 1.0
12:00:30 1.5
12:01:00 0.9
12:01:30 2.2
12:02:00 1.3

Variable-2

timestamp value
12:00:00 2.2
12:00:30 2.6
12:01:00 1.4
12:01:30 1.7
12:02:00 2.0

現在合併的資料表比較合理。

timestamp Variable-1 Variable-2
12:00:00 1.0 2.2
12:00:30 1.5 2.6
12:01:00 0.9 1.4
12:01:30 2.2 1.7
12:02:00 1.3 2.0

在接近時間戳記時,不同變數的值都對齊良好,而 MVAD 模型現在可以擷取相互關聯資訊。

限制

定型和推斷 API 有一些限制,您應該注意這些限制以避免錯誤。

一般限制

  • 滑動視窗:28-2880 時間戳記,預設值為 300。 針對定期資料,將 2-4 迴圈的長度設定為滑動視窗。
  • 變數編號:針對定型和批次推斷,最多 301 個變數。

訓練限制

  • 時間戳記:最多 1000000。 時間戳記太少可能會降低模型品質。 建議使用超過 5,000 個時間戳記。
  • 細微性:最小細微性為 per_second

批次推斷限制

  • 時間戳記:最多 20000,至少 1 個滑動視窗長度。

串流推斷限制

  • 時間戳記:最多 2880,至少 1 個滑動視窗長度。
  • 偵測時間戳記:從 1 到 10。

模型品質

如何在實際案例中處理誤判和誤判?

我們提供了指出異常重要性的嚴重性。 誤判可能會藉由設定嚴重性閾值來篩選掉。 有時候,當推斷資料中有模式移位時,可能會出現太多誤判。 在這種情況下,模型可能需要重新定型新的資料。 如果定型資料包含太多異常,偵測結果中可能會有誤判。 這是因為模型會從定型資料和異常中學習模式,可能會對模型產生偏差。 因此,適當的資料清除可能有助於減少誤判。

如何根據定型損失和驗證損失來估計哪一個模型最適合使用?

一般而言,很難決定哪一個模型是最佳模型,而不需要加上標籤的資料集。 不過,我們可以利用定型和驗證損失來有粗略的估計,並捨棄這些不正確的模型。 首先,我們需要觀察訓練損失是否交集。 不同的損失通常表示模型的品質不佳。 其次,遺失值可能有助於識別是否過度學習或過度學習。 學習不足或過度學習的模型可能沒有想要的效能。 第三,雖然損失函式的定義不會直接反映偵測效能,但損失值可能是估計模型品質的輔助工具。 低損失值是良好模型的必要條件,因此我們可能會捨棄具有高損失值的模型。

常見的陷阱

除了錯誤碼資料表 之外,我們已向客戶學習,例如使用 MVAD API 時的一些常見陷阱。 下表將協助您避免這些問題。

陷阱 結果 說明和解決方案
定型資料和/或推斷資料的時間戳記不會四捨五入,以配合每個變數的個別資料頻率。 推斷結果的時間戳記不如預期:時間戳記太少或時間戳記太多。 請參閱 時間戳記進位
定型資料中有太多異常資料點 模型精確度會受到負面影響,因為它會將異常資料點視為定型期間的一般模式。 經驗上,將異常率保持在或低於 1% 將有所説明。
定型資料太少 模型精確度遭到入侵。 從經驗上看,定型 MVAD 模型需要每個變數 15,000 個以上的資料點(時間戳記),才能保持良好的精確度。
將所有資料點視為 isAnomaly=true 異常 太多誤判 您應該同時使用 isAnomalyseverity (或 score ) 來篩選非嚴重且 (選擇性地) 使用群組來檢查異常持續時間以抑制隨機雜訊。 如需 和 score 之間的差異 severity 請參閱下面的常見問題 一節。
子資料夾會壓縮到資料檔案中,以進行定型或推斷。 子資料夾內的 csv 資料檔案會在定型和/或推斷期間被忽略。 zip 檔案中不允許任何子資料夾。 如需詳細資訊, 請參閱資料夾結構
推斷資料檔案中的資料太多:例如,壓縮推斷資料 zip 檔案中的所有歷程記錄資料 您可能不會看到任何錯誤,但當您嘗試將 zip 檔案上傳至 Azure Blob 時,以及嘗試執行推斷時,效能會降低。 如需詳細資訊, 請參閱資料數量
在尚不支援 MVAD 的 Azure 區域中建立異常偵測程式資源,並呼叫 MVAD API 呼叫 MVAD API 時,您會收到「找不到資源」錯誤。 在預覽階段期間,MVAD 僅適用于有限的區域。 請將 異常偵測程式 的新功能加入書簽 ,以使用 MVAD 區域推出保持最新狀態。 您也可以提出 GitHub 問題,或與我們連 AnomalyDetector@microsoft.com 絡,以要求特定區域。

常見問題

MVAD 滑動視窗如何運作?

讓我們使用兩個範例來瞭解 MVAD 滑動視窗的運作方式。 假設您已設定 slidingWindow = 1,440,且輸入資料的資料細微性為一分鐘。

  • 串流案例 :您想要預測 「2021-01-02T00:00:00Z」 的 ONE 資料點是否異常。 您的 startTimeendTime 將會是相同的值 (「2021-01-02T00:00:00Z)。 不過,您的推斷資料來源必須包含至少 1,440 + 1 個時間戳記。 因為 MVAD 會在目標資料點 (「2021-01-02T00:00:00Z」 )之前取得前置資料,以決定目標是否為異常。 在此案例中,所需前置資料的長度為 slidingWindow 或 1,440。 1,440 = 60 * 24,因此您的輸入資料必須從最新的 「2021-01-01T00:00:00Z」 開始。

  • 批次案例 :您有多個要預測的目標資料點。 您的 endTime 將會大於 。 startTime 這類案例中的推斷是以「移動視窗」的方式執行。 例如,MVAD 會使用從 2021-01-01T00:00:00Z2021-01-01T23:59:00Z (含) 的資料來判斷位於 2021-01-02T00:00:00Z 的資料是否異常。 然後,它會向前移動,並使用資料從 2021-01-01T00:01:00Z2021-01-02T00:00:00Z (內含) 來判斷位於 2021-01-02T00:01:00Z 的資料是否異常。 它會以相同的方式移動(採用 1,440 個要比較的資料點),直到指定的最後一個時間戳記 endTime (或實際的最新時間戳記)。 因此,您的推斷資料來源必須包含從 startTime - slidingWindow 開始的資料,而且最好包含大小 slidingWindow 總計 + ( endTime - startTime ) 的資料。

score 之間的差異 severity 為何?

一般而言,我們建議您使用 severity 做為篩選準則,以篩選對企業而言並不重要的「異常」。 視您的案例和資料模式而定,較不重要的異常通常會有相對較低的 severity 值或獨立的(不連續)高 severity 值,例如隨機尖峰。

如果您發現所需的規則比連續高 severity 值的臨界 severity 值或持續時間更複雜,您可能想要用來 score 建置更強大的篩選。 瞭解 MVAD 如何用來 score 判斷異常可能會有説明:

我們考慮資料點是否來自全域和本機的觀點異常。 如果 score 時間戳記高於特定閾值,則時間戳記會標示為異常。 如果 score 低於臨界值,但在區段中相對較高,它也會標示為異常。

下一步