series_decompose_anomalies()
Deteksi Anomali didasarkan pada dekomposisi seri. Untuk informasi selengkapnya, lihat series_decompose().
Fungsi ini mengambil ekspresi yang berisi seri (array numerik dinamis) sebagai input, dan mengekstrak titik anomali dengan skor.
Sintaks
series_decompose_anomalies (
Seri,
[ Ambang batas,
Musiman,
Tren,
,
Test_points,
AD_methodSeasonality_threshold ])
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Jenis | Diperlukan | Deskripsi |
---|---|---|---|
Seri | dynamic |
✔️ | Array nilai numerik, biasanya output yang dihasilkan dari operator make-series atau make_list . |
Ambang | real |
Ambang anomali. Defaultnya adalah 1,5, nilai k, untuk mendeteksi anomali ringan atau lebih kuat. | |
Musiman | int |
Mengontrol analisis musiman. Nilai yang mungkin adalah: - -1 : Musiman otomatis terdeteksi menggunakan series_periods_detect. Ini adalah nilai default.- Periode waktu bilangan bulat: Bilangan bulat positif yang menentukan periode yang diharapkan dalam jumlah bin. Misalnya, jika seri berada dalam 1h bin, periode mingguan adalah 168 bin.- 0 : Tidak ada musiman, jadi lewati mengekstrak 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 mengekstrak 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. | |
AD_method | string |
Mengontrol metode deteksi anomali pada rangkaian waktu residu, yang berisi salah satu nilai berikut: - ctukey : Uji pagar Tukey dengan rentang persentil ke-10-90 kustom. Ini adalah default.- tukey : Uji pagar Tukey dengan rentang persentil standar ke-25-75.Untuk informasi selengkapnya tentang rangkaian waktu residual, lihat series_outliers. |
|
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:
ad_flag
: Seri ternar yang berisi (+1, -1, 0) menandai atas/bawah/tidak ada anomali masing-masingad_score
: Skor anomalibaseline
: Nilai yang diprediksi dari seri, menurut dekomposisi
Algoritme
Fungsi ini mengikuti langkah-langkah berikut:
- Panggilan series_decompose() dengan parameter masing-masing, untuk membuat seri garis besar dan residual.
- Menghitung seri ad_score dengan menerapkan series_outliers() dengan metode deteksi anomali yang dipilih pada seri residu.
- Menghitung seri ad_flag dengan menerapkan ambang batas pada ad_score untuk menandai atas/turun/tidak ada anomali masing-masing.
Contoh
Mendeteksi anomali dalam musim mingguan
Dalam contoh berikut, buat seri dengan musiman mingguan, lalu tambahkan beberapa outlier ke dalamnya. series_decompose_anomalies
mendeteksi otomatis musim dan menghasilkan garis dasar yang menangkap pola berulang. Outlier yang Anda tambahkan dapat terlihat jelas di komponen 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
Mendeteksi anomali dalam musim mingguan dengan tren
Dalam contoh ini, tambahkan tren ke seri dari contoh sebelumnya. Pertama, jalankan series_decompose_anomalies
dengan parameter default yang mana nilai default avg
tren hanya mengambil rata-rata dan tidak menghitung tren. Garis besar yang dihasilkan tidak berisi tren dan kurang tepat, dibandingkan dengan contoh sebelumnya. Akibatnya, beberapa outlier yang Anda masukkan ke dalam data tidak terdeteksi karena varians yang lebih tinggi.
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
Selanjutnya, jalankan contoh yang sama, tetapi karena Anda mengharapkan tren dalam seri, tentukan linefit
dalam parameter tren. Anda dapat melihat bahwa garis besar jauh lebih dekat dengan seri input. Semua outlier yang dimasukkan terdeteksi, dan juga beberapa positif palsu. Lihat contoh berikutnya tentang mengutak-atik ambang batas.
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
Mengutak-atik ambang deteksi anomali
Beberapa titik bising terdeteksi sebagai anomali dalam contoh sebelumnya. Sekarang tingkatkan ambang deteksi anomali dari default 1,5 menjadi 2,5. Gunakan rentang interpersentil ini, sehingga hanya anomali yang lebih kuat yang terdeteksi. Sekarang, hanya outlier yang Anda masukkan ke dalam data, yang akan terdeteksi.
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk