series_decompose_anomalies()

Anomali Algılama, seri ayrıştırmayı temel alır. Daha fazla bilgi için bkz. series_decompose().

işlevi giriş olarak seri (dinamik sayısal dizi) içeren bir ifade alır ve puanlarla anormal noktaları ayıklar.

Syntax

series_decompose_anomalies (Serisi, [ Eşik,Seasonality,Eğilim,, Test_points, AD_methodSeasonality_threshold ])

Söz dizimi kuralları hakkında daha fazla bilgi edinin.

Parametreler

Ad Tür Gerekli Açıklama
Seriler dynamic ✔️ Sayısal değerler dizisi, genellikle seri yapma veya make_list işleçlerinin elde edilen çıkışıdır.
Eşik real Anomali eşiği. Hafif veya daha güçlü anomalileri algılamak için varsayılan değer 1,5, k değeridir.
Seasonality int Mevsimsel analizi denetler. Olası değerler şunlardır:

- -1: series_periods_detect kullanarak mevsimselliği otomatik olarak algıla. Varsayılan değer budur.
- Tamsayı süresi: Bölme sayısı cinsinden beklenen dönemi belirten pozitif bir tamsayı. Örneğin, seri bölmeler içindeyse 1h haftalık dönem 168 bölmedir.
- 0: Mevsimsellik yok, bu nedenle bu bileşeni ayıklamayı atlayın.
Eğilim string Eğilim analizini denetler. Olası değerler şunlardır:

- avg: Eğilim bileşenini olarak average(x)tanımlayın. Bu varsayılan seçenektir.
- linefit: Doğrusal regresyon kullanarak eğilim bileşenini ayıklayın.
- none: Eğilim yok, bu nedenle bu bileşeni ayıklamayı atlayın.
Test_points int Öğrenme veya regresyon sürecinin dışında tutulacak serinin sonundaki nokta sayısını belirten pozitif bir tamsayı. Bu parametre tahmin amacıyla ayarlanmalıdır. Varsayılan değer 0’dır.
AD_method string Artık zaman serisindeki anomali algılama yöntemini denetler ve aşağıdaki değerlerden birini içerir:

- ctukey: Tukey'in özel 10.-90. yüzdebirlik aralığına sahip çit testi. Bu varsayılan seçenektir.
- tukey: Tukey'in standart 25.-75. yüzdebirlik aralığına sahip çit testi.

Artık zaman serisi hakkında daha fazla bilgi için bkz. series_outliers.
Seasonality_threshold real Mevsimsellik otomatik algıla olarak ayarlandığında mevsimsellik puanı eşiği. Varsayılan puan eşiği 0,6'dır.

Daha fazla bilgi için bkz. series_periods_detect.

Döndürülenler

işlevi aşağıdaki ilgili seriyi döndürür:

  • ad_flag: Sırasıyla yukarı/aşağı/anomali yok olarak işaretlenen (+1, -1, 0) içeren üçüncül seri
  • ad_score: Anomali puanı
  • baseline: Ayrıştırmaya göre serinin tahmin edilen değeri

Algoritma

Bu işlev şu adımları izler:

  1. Taban çizgisi ve artıklar serisini oluşturmak için ilgili parametrelerle series_decompose() çağırır.
  2. Artıklar serisinde seçilen anomali algılama yöntemiyle series_outliers() uygulayarak ad_score serisini hesaplar.
  3. Ad_score sırasıyla anomaliyi yukarı/aşağı/hiç işaretlemek için eşiği uygulayarak ad_flag serisini hesaplar.

Örnekler

Haftalık mevsimsellik anomalilerini algılama

Aşağıdaki örnekte, haftalık mevsimsellik düzeyine sahip bir seri oluşturun ve ardından buna bazı aykırı değerler ekleyin. series_decompose_anomalies mevsimselliği otomatik olarak algılar ve yinelenen deseni yakalayan bir taban çizgisi oluşturur. Eklediğiniz aykırı değerler, ad_score bileşeninde açıkça tespit edilebilir.

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  

Temel ve aykırı değerleri gösteren haftalık mevsimsellik.

Eğilimle haftalık mevsimsellik anomalilerini algılama

Bu örnekte, önceki örnekteki seriye bir eğilim ekleyin. İlk olarak, eğilim varsayılan değerinin yalnızca ortalamayı aldığı ve eğilimi avg hesaplamadığı varsayılan parametrelerle komutunu çalıştırınseries_decompose_anomalies. Oluşturulan taban çizgisi eğilimi içermez ve önceki örne göre daha az kesindir. Sonuç olarak, yüksek varyans nedeniyle verilere eklediğiniz aykırı değerlerden bazıları algılanmamıştır.

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

Haftalık mevsimsellik aykırı değerleri eğilime göre değişir.

Ardından aynı örneği çalıştırın, ancak seride bir eğilim beklediğiniz için eğilim parametresinde belirtin linefit . Temelin giriş serisine çok daha yakın olduğunu görebilirsiniz. Eklenen tüm aykırı değerler algılanır ve bazı hatalı pozitif sonuçlar da bulunur. Eşiği ayarlamayla ilgili bir sonraki örniğe bakın.

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  

Linefit eğilimine sahip haftalık mevsimsellik anomalileri.

Anomali algılama eşiğini ayarlama

Önceki örnekte birkaç gürültülü nokta anomali olarak algılandı. Şimdi anomali algılama eşiğini varsayılan değer olan 1,5'ten 2,5'e yükseltin. Yalnızca daha güçlü anomaliler algılandığından, bu birlikte çalışma aralığını kullanın. Artık yalnızca verilere eklediğiniz aykırı değerler algılanır.

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  

Anomali eşiği daha yüksek olan haftalık seri anomalileri.