使用 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。 如果slidingWindow
是k
用於模型定型,則推斷期間至少k
應該可從來源檔案存取點,以取得有效的結果。MVAD 會採用資料點區段來決定下一個資料點是否為異常。 線段的長度為
slidingWindow
。 選擇slidingWindow
值時,請記住兩件事:- 資料的屬性:其是否為定期和取樣率。 當您的資料是定期時,您可以將 1 - 3 個週期的長度設定為
slidingWindow
。 當您的資料處於高頻率(小細微性)時,例如分鐘層級或第二層,您可以設定相對較高的值slidingWindow
。 - 定型/推斷時間和潛在效能影響之間的取捨。 較大的
slidingWindow
可能會造成較長的定型/推斷時間。 不保證 較大的slidingWindow
會導致精確度提升。 小型slidingWindow
可能會導致模型難以交集到最佳解決方案。 例如,當只有兩個點時slidingWindow
,很難偵測異常。
- 資料的屬性:其是否為定期和取樣率。 當您的資料是定期時,您可以將 1 - 3 個週期的長度設定為
alignMode
- 如何在時間戳記上對齊多個變數(時間序列)。 此參數有兩個選項,Inner
而Outer
預設值為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
入合併的資料表。 合併資料表中可能有遺漏的值,而且應該正確處理這些值。 我們提供數種方法來填滿它們。 選項為Linear
、Previous
、Subsequent
、Zero
和Fixed
,而預設值為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
當 為Fixed
時fillNAMethod
,而且必須在該案例中提供。 在其他情況下,這是選擇性的。displayName
- 這是用來識別模型的選擇性參數。 例如,您可以使用它來標記有關模型及其輸入資料的參數、資料來源和任何其他中繼資料。 預設值為空字串。
輸入資料架構
MVAD 會從一組計量偵測異常,而我們會呼叫每個計量變數 或時間序列。
您可以從 Microsoft 下載範例資料檔案,以檢查接受的架構: https://aka.ms/AnomalyDetector/MVADSampleData
每個變數都必須有兩個且只有兩個欄位,
timestamp
而且value
應該儲存在逗號分隔值 (CSV) 檔案中。CSV 檔案的資料行名稱應該精確
timestamp
且value
區分大小寫。這些
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_2
、series_3
series_4
和series_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 的時間戳記必須在對齊之前正確「四捨五入」到其頻率。
讓我們看看如果沒有預先處理,會發生什麼事。 如果我們設定 alignMode
為 Outer
(這表示兩組的聯集),合併的資料表為:
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 模型無法擷取它們之間相互關聯的相關資訊。 如果設定 alignMode
為 Inner
,則合併的資料表是空的,因為變數 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 異常 |
太多誤判 | 您應該同時使用 isAnomaly 和 severity (或 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 資料點是否異常。 您的
startTime
和endTime
將會是相同的值 (「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:00Z
到2021-01-01T23:59:00Z
(含) 的資料來判斷位於2021-01-02T00:00:00Z
的資料是否異常。 然後,它會向前移動,並使用資料從2021-01-01T00:01:00Z
到2021-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
低於臨界值,但在區段中相對較高,它也會標示為異常。