series_decompose_anomalies()

Anomali Algılama, seri ayrıştırma temelindedir. Daha fazla bilgi için bkz. series_decompose().

işlevi giriş olarak bir 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_method Seasonality_threshold])

Bağımsız değişkenler

  • Seri: Sayısal değerler dizisi olan dinamik dizi hücresi, genellikle make-series veya make_list işleçlerinin elde edilen çıkışıdır
  • Eşik: Anomali eşiği, hafif veya daha güçlü anomalileri algılamak için varsayılan 1,5 (k değeri)
  • Mevsimsellik: Mevsimsel analizi denetleen ve iki durumdan birini içeren bir tamsayı
    • -1: Mevsimselliği otomatik olarak algılama ( series_periods_detect kullanarak) [varsayılan]
    • 0: Mevsimsellik yok (yani bu bileşeni ayıklamayı atlayın)
    • period: Pozitif tamsayı, bölme sayısı birimi cinsinden beklenen dönemi belirtir. Örneğin, seri bir saatlik bölmelerdeyse haftalık dönem 168 bölmedir
  • Eğilim: Eğilim analizini denetleen ve herhangi birini içeren bir dize
    • "ort": Eğilim bileşenini serinin ortalaması olarak tanımlama [varsayılan]
    • "none": Eğilim yok, bu bileşeni ayıklamayı atlayın
    • "linefit": Doğrusal regresyon kullanarak eğilim bileşenini ayıklama
  • Test_points: Öğrenme (regresyon) işleminin dışında tutulacak serinin sonundaki nokta sayısını belirten 0 [varsayılan] veya pozitif bir tamsayı. Bu parametre tahmin amacıyla ayarlanmalıdır
  • AD_method: Artık zaman serisinde anomali algılama yöntemini denetleen ve aşağıdakilerden birini içeren bir dize:
    • "ctukey": Tukey'in özel 10.-90. yüzdebirlik aralığına sahip çit testi [varsayılan]
    • "tukey": Tukey'in standart 25.-75. yüzdebirlik aralıkta çit testi Artık zaman serisi hakkında daha fazla bilgi için bkz. series_outliers
  • Seasonality_threshold: Mevsimsellik otomatik algılamaya ayarlandığında mevsimsellik puanı eşiği. Varsayılan puan eşiğidir 0.6. 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 bir üçü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_flag serisini hesaplamak için ad_score üzerindeki eşiği uygulayarak anomaliyi yukarı/aşağı/hiç işaretlemez.

Ö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 belirler 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  

Weekly seasonality showing baseline and outliers.

Haftalık mevsimsellikteki anomalileri eğilimle 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 çalıştırınseries_decompose_anomalies. Oluşturulan taban çizgisi eğilimi içermez ve önceki örne kıyasla daha az kesindir. Sonuç olarak, verilere eklediğiniz aykırı değerlerin bazıları yüksek varyans nedeniyle algılanmaz.

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

Weekly seasonality outliers with trend.

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 ve bazı hatalı pozitifler algılanır. Eşiği ayarlamayla ilgili bir sonraki örne 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  

Weekly seasonality anomalies with linefit trend.

Anomali algılama eşiğini ayarlama

Önceki örnekte anomali olarak birkaç gürültülü nokta 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ü anomalilerin algıılabilmesi için 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  

Weekly series anomalies with higher anomaly threshold.