共用方式為


series_decompose()

適用於:✅Microsoft網狀架構Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel

在數列上套用分解轉換。

接受包含數位(動態數值數位)的運算式做為輸入,並將其分解為季節性、趨勢和剩餘元件。

語法

series_decompose(數列 [ 季節性,趨勢,Test_points Seasonality_threshold ], ,)

深入瞭解 語法慣例

參數

姓名 類型​​ 必要 描述
系列 dynamic ✔️ 數值陣列,通常是make-seriesmake_list運算子所產生的輸出。
季節性 int 控制季節性分析。 可能的值是:

- -1:使用 series_periods_detect 自動偵測季節性。 這是預設值。
- 期間:正整數,指定間隔數目的預期期間。例如,如果數列在量化中 1 - h ,則每周期間為168個間隔。
- 0:沒有季節性,因此請略過擷取此元件。
趨勢 string 控制趨勢分析。 可能的值是:

- avg:將趨勢元件定義為 average(x)。 這是預設值。
- linefit:使用線性回歸擷取趨勢元件。
- none:沒有趨勢,因此請略過擷取此元件。
Test_points int 正整數,指定要從學習或回歸進程排除的數列結尾點數。 此參數應針對預測目的進行設定。 預設值為 0。
Seasonality_threshold real 當季節性設定為自動偵測時 ,季節性 分數的臨界值。 默認分數閾值為 0.6。

如需詳細資訊,請參閱 series_periods_detect

傳回

函式會傳回下列個別數列:

  • baseline:數列的預測值(季節性和趨勢元件的總和,請參閱下文)。
  • seasonal:季節性元件的數列:
    • 如果未偵測到句點或明確設定為 0:常數 0,則為 。
    • 如果偵測到或設定為正整數,則為 :相同階段中數點的中位數
  • trend:趨勢元件的數列。
  • residual:剩餘元件的數列(也就是 x - 基準)。

注意

  • 元件執行順序:
  1. 擷取季節性數列
  2. 從 x 減去它, 產生季後系列
  3. 從季後系列擷取趨勢元件
  4. 建立基準 = 季節性 + 趨勢
  5. 建立殘差 = x - 基準
  • 應啟用季節性和 或趨勢。 否則,函式是多餘的,而只會傳回比較基準 = 0 且剩餘 = x。

深入了解數列分解

這個方法通常會套用至預期要顯示定期和/或趨勢行為的計量時間序列。 您可以使用 方法來預測未來的計量值和/或偵測異常值。 此回歸程式的隱含假設是,除了季節性和趨勢行為之外,時間序列是隨機分配的。 從季節性和趨勢元件預測未來的計量值,同時忽略剩餘部分。 僅根據極端值偵測,只偵測殘差部分的異常值。 如需進一步的詳細數據,請參閱 時間序列分解章節

範例

每周季節性

在下列範例中,我們會產生具有每周季節性且沒有趨勢的數列,然後將一些極端值新增至其中。 series_decompose 會尋找並自動偵測季節性,併產生與季節性元件幾乎完全相同的基準。 我們在殘差元件中可以清楚地看到我們新增的極端值。

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(y)
| render timechart  

數列分解 1。

具有趨勢的每周季節性

在此範例中,我們會將趨勢新增至上一個範例中的數列。 首先,我們會使用預設參數執行 series_decompose 。 趨勢 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(y)
| render timechart  

數列分解 2。

接下來,我們會重新執行相同的範例。 由於我們預期數列中的趨勢,因此我們會在 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(y, -1, 'linefit')
| render timechart  

數列分解 3。