series_decompose_anomalies()
異常偵測是以序列分解為基礎。 如需詳細資訊,請參閱 series_decompose()。
此函數會採用包含序列 (動態數值陣列) 的運算式作為輸入,並使用分數來擷取異常點。
語法
series_decompose_anomalies (
系列,
[ 臨界值,
季節性,
趨勢,
,
Test_pointsAD_method,
Seasonality_threshold ])
深入瞭解 語法慣例。
參數
名稱 | 類型 | 必要 | Description |
---|---|---|---|
數列 | dynamic |
✔️ | 數值的陣列,通常是 make-series 或 make_list 運算子所產生的輸出。 |
閾值 | real |
異常臨界值。 默認值為 1.5 k 值,用於偵測異常或更強的異常。 | |
季節性 | int |
控制季節性分析。 可能的值包括: - -1 :使用 series_periods_detect自動偵測季節性。 這是預設值。- 整數時間週期:正整數,指定間隔數目的預期期間。例如,如果數列位於 1h 量化中,則每周期間為168個間隔。- 0 :沒有季節性,因此請略過擷取此元件。 |
|
趨勢 | string |
控制趨勢分析。 可能的值包括: - avg :將趨勢元件 average(x) 定義為 。 此為預設值。- linefit :使用線性回歸擷取趨勢元件。- none :沒有趨勢,因此請略過擷取此元件。 |
|
Test_points | int |
正整數,指定要從學習或回歸程式排除之數列結尾的點數。 此參數應針對預測用途進行設定。 預設值為 0。 | |
AD_method | string |
控制剩餘時間序列上的異常偵測方法,其中包含下列其中一個值: - ctukey :具有自定義 10-90 個百分位數範圍的 Tukey 柵欄測試 。 此為預設值。- tukey :具有標準 25-75 百分位數範圍的 Tukey 柵欄測試 。如需剩餘時間序列的詳細資訊,請參閱 series_outliers。 |
|
Seasonality_threshold | real |
當季節性設定為自動偵測時, 季節性 分數的臨界值。 默認分數閾值為 0.6。 如需詳細資訊,請參閱 series_periods_detect。 |
傳回
函數會傳回下列個別序列:
ad_flag
:三元系列,包含分別標示向上/向下/無異常的 (+1, -1, 0)ad_score
:異常分數baseline
:根據分解的序列預測值
演算法
此函數會遵循下列步驟:
- 使用各自的參數呼叫 series_decompose(),以建立基準和殘差序列。
- 在殘差序列上套用具有所選擇異常偵測方法的 series_outliers(),以計算 ad_score 系列。
- 在 ad_score 上套用閾值來計算 ad_flag 系列,以分別標示向上/向下/無異常。
範例
偵測每週季節性的異常
在下列範例中,會產生包含每週季節性的序列,然後在其中新增一些極端值。 series_decompose_anomalies
自動偵測季節性,並產生可擷取重複模式的基準。 您已新增的極端值可以清楚地在 ad_score 元件中找到。
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y)
| render timechart
使用趨勢偵測每週季節性異常
在此範例中,會將趨勢新增至上述範例的序列中。 首先,使用預設參數來執行 series_decompose_anomalies
,其中趨勢 avg
預設值只會採用平均值,而不會計算趨勢。 與上一個範例相較之下,產生的基準未包含趨勢,而且較不精確。 因此,因為變異數較高,所以偵測不到您在資料中插入的某些極端值。
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y)
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
接下來,執行相同的範例,但因為您預期序列中會有趨勢,所以請在 trend 參數中指定 linefit
。 您可以看到基準較接近輸入序列。 會偵測到所有插入的極端值,還會有一些誤判為真。 請參閱下一個調整閾值的範例。
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y, 1.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
調整異常偵測閾值
在上一個範例中,將一些噪點偵測為異常。 現在,請將異常偵測閾值從預設值 1.5 增加至 2.5。 使用此四分位數範圍,只偵測較強的異常。 現在,只會偵測到您在資料中插入的極端值。
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and onlgoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y, 2.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應