Bagikan melalui


series_decompose()

Menerapkan transformasi dekomposisi pada seri.

Mengasumsikan ekspresi yang berisi seri (larik numerik dinamis) sebagai input dan menguraikannya menjadi komponen musiman, tren, dan residu.

Sintaks

series_decompose(Seri [ Tren, Musiman, Test_points, Seasonality_threshold ] ,)

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Tipe Wajib Deskripsi
Seri dynamic ✔️ Array nilai numerik, biasanya output yang dihasilkan dari operator seri make atau make_list .
Musiman int Mengontrol analisis musiman. Nilai yang mungkin adalah:

- -1: Autodetect seasonality menggunakan series_periods_detect. Ini adalah nilai default.
- Periode: Bilangan bulat positif yang menentukan periode yang diharapkan dalam jumlah bin. Misalnya, jika seri berada dalam 1 - h bin, periode mingguan adalah 168 bin.
- 0: Tidak ada musiman, jadi lewati ekstraksi komponen ini.
Tren string Mengontrol analisis tren. Nilai yang mungkin adalah:

- avg: Tentukan komponen tren sebagai average(x). Ini adalah default.
- linefit: Ekstrak komponen tren menggunakan regresi linier.
- none: Tidak ada tren, jadi lewati ekstraksi komponen ini.
Test_points int Bilangan bulat positif yang menentukan jumlah titik di akhir seri untuk dikecualikan dari proses pembelajaran, atau regresi. Parameter ini harus ditetapkan untuk tujuan prakiraan. Nilai default adalah 0.
Seasonality_threshold real Ambang batas untuk skor musiman saat Musiman diatur ke autodetect. Ambang skor default adalah 0,6.

Untuk informasi selengkapnya, lihat series_periods_detect.

Mengembalikan

Fungsi ini mengembalikan format berikut:

  • baseline: prediksi nilai dari seri (jumlah komponen tren dan musiman, lihat di bawah).
  • seasonal: rangkaian komponen musiman:
    • jika periode tidak terdeteksi atau secara eksplisit diatur ke 0: konstanta 0.
    • jika terdeteksi atau diatur ke bilangan bulat positif: median dari titik seri dalam fase yang sama
  • trend: seri dari komponen tren.
  • residual: seri dari komponen residu (yaitu, x - garis besar).

Catatan

  • Urutan eksekusi komponen:
  1. Ekstrak seri musiman
  2. Kurangi dari x, yang menghasilkan seri tidak musiman
  3. Ekstrak komponen tren dari seri tidak musiman
  4. Buat garis besar = musiman +tren
  5. Buat residu = x - garis besar
  • Baik musiman dan, atau tren harus diaktifkan. Jika tidak, fungsi tersebut berlebihan, dan hanya menampilkan garis besar = 0 dan residu= x.

Selengkapnya tentang dekomposisi seri

Metode ini biasanya diterapkan pada deret waktu metrik yang diharapkan untuk memanifestasikan perilaku periodik dan/atau tren. Anda dapat menggunakan metode untuk memperkirakan nilai metrik di masa mendatang dan/atau mendeteksi nilai anomali. Asumsi implisit dari proses regresi ini adalah bahwa deret waktu bersifat stokastik dan didistribusikan secara acak terlepas dari perilaku musiman dan tren. Perkirakan nilai metrik masa mendatang dari komponen musiman dan tren sembari mengabaikan bagian residu. Hanya deteksi nilai anomali berdasarkan deteksi outlier pada bagian residu. Detail selengkapnya dapat ditemukan di bab Dekomposisi Deret Waktu.

Contoh

Musiman mingguan

Dalam contoh berikut, buat seri dengan musiman mingguan, lalu tambahkan beberapa outlier ke dalamnya. series_decompose menemukan dan otomatis mendeteksi musiman, serta membuat garis besar yang hampir identik dengan komponen musiman. Outlier yang kami tambahkan dapat dilihat dengan jelas di komponen residu.

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  

Seri diurai 1.

Musiman mingguan dengan tren

Dalam contoh ini, kami menambahkan tren ke seri dari contoh sebelumnya. Pertama, kita menjalankan series_decompose dengan parameter default. Nilai default avg tren hanya mengambil rata-rata dan tidak menghitung tren. Garis besar yang dihasilkan tidak berisi tren. Saat mengamati tren dalam residu, sudah jelas bahwa contoh ini kurang akurat daripada contoh sebelumnya.

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  

Seri terurai 2.

Selanjutnya, kita menjalankan kembali contoh yang sama. Karena mengharapkan tren dalam seri ini, kami menentukan linefit dalam parameter tren. Kita dapat melihat bahwa tren positif terdeteksi dan garis dasar jauh lebih mendekati seri input. Residu mendekati nol, dan hanya outlier yang tampil berbeda. Kita dapat melihat semua komponen pada seri dalam grafik.

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  

Seri terurai 3.

  • Memvisualisasikan hasil dengan bagan anomali