series_decompose_anomalies()

Il rilevamento anomalie si basa sulla scomposizione delle serie. Per altre informazioni, vedere series_decompose().

La funzione accetta un'espressione contenente una serie (matrice numerica dinamica) come input ed estrae punti anomali con punteggi.

Sintassi

series_decompose_anomalies (Serie, [ Soglia,Stagionalità,Tendenza,, Test_points, AD_methodSeasonality_threshold ])

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
Serie dynamic ✔️ Matrice di valori numerici, in genere l'output risultante degli operatori make-series o make_list .
Soglia real Soglia anomalie. Il valore predefinito è 1,5 k per rilevare anomalie lievi o più forti.
Stagionalità int Controlla l'analisi stagionale. I valori possibili sono:

- -1: stagionalità della correzione automatica tramite series_periods_detect. Si tratta del valore predefinito.
- Periodo di tempo intero: numero intero positivo che specifica il periodo previsto in numero di bin. Ad esempio, se la serie è in 1h contenitori, un periodo settimanale è di 168 bin.
- 0: nessuna stagionalità, quindi ignorare l'estrazione di questo componente.
Tendenza string Controlla l'analisi delle tendenze. I valori possibili sono:

- avg: definire il componente di tendenza come average(x). Questo è il valore predefinito.
- linefit: estrarre il componente di tendenza usando la regressione lineare.
- none: nessuna tendenza, quindi ignorare l'estrazione di questo componente.
Test_points int Intero positivo che specifica il numero di punti alla fine della serie da escludere dal processo di apprendimento o regressione. Questo parametro deve essere impostato a scopo di previsione. Il valore predefinito è 0.
AD_method string Controlla il metodo di rilevamento anomalie nella serie temporale residua, contenente uno dei valori seguenti:

- ctukey: test di isolamento di Tukey con intervallo personalizzato del 10°-90° percentile. Questo è il valore predefinito.
- tukey: test di isolamento di Tukey con intervallo standard del 25°-75° percentile.

Per altre informazioni sulle serie temporali residui, vedere series_outliers.
Seasonality_threshold real Soglia per il punteggio di stagionalità quando la stagionalità è impostata su autodetect. La soglia del punteggio predefinito è 0,6.

Per altre informazioni, vedere series_periods_detect.

Restituisce

La funzione restituisce la rispettiva serie:

  • ad_flag: serie ternaria contenente (+1, -1, 0) contrassegnando rispettivamente l'up/down/nessuna anomalia
  • ad_score: punteggio anomalie
  • baseline: valore stimato della serie, in base alla scomposizione

Algoritmo

Questa funzione segue questi passaggi:

  1. Chiama series_decompose() con i rispettivi parametri per creare la serie di baseline e residui.
  2. Calcola ad_score serie applicando series_outliers() con il metodo di rilevamento anomalie scelto nella serie dei residui.
  3. Calcola la serie di ad_flag applicando la soglia nella ad_score per contrassegnare rispettivamente l'anomalia verso l'alto o verso il basso o nessuna anomalia.

Esempio

Rilevare le anomalie nella stagionalità settimanale

Nell'esempio seguente generare una serie con stagionalità settimanale e quindi aggiungervi alcuni outlier. series_decompose_anomalies rileva automaticamente la stagionalità e genera una linea di base che acquisisce il modello ripetitivo. Gli outlier aggiunti possono essere chiaramente individuati nel componente 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  

Stagionalità settimanale con baseline e outlier.

Rilevare anomalie nella stagionalità settimanale con tendenza

In questo esempio aggiungere una tendenza alla serie dell'esempio precedente. series_decompose_anomalies Eseguire prima di tutto con i parametri predefiniti in cui il valore predefinito della tendenza avg accetta solo la media e non calcola la tendenza. La baseline generata non contiene la tendenza ed è meno esatta rispetto all'esempio precedente. Di conseguenza, alcuni degli outlier inseriti nei dati non vengono rilevati a causa della varianza più elevata.

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

Outlier di stagionalità settimanale con tendenza.

Eseguire quindi lo stesso esempio, ma poiché si prevede una tendenza nella serie, specificare linefit nel parametro di tendenza. Si può notare che la linea di base è molto più vicina alla serie di input. Vengono rilevati tutti gli outlier inseriti e anche alcuni falsi positivi. Vedere l'esempio successivo per modificare la soglia.

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  

Anomalie della stagionalità settimanale con trend linefit.

Modificare la soglia di rilevamento anomalie

Alcuni punti rumorosi sono stati rilevati come anomalie nell'esempio precedente. Aumentare ora la soglia di rilevamento anomalie da un valore predefinito da 1,5 a 2,5. Usare questo intervallo interpercentile, in modo che vengano rilevate solo anomalie più forti. Verranno ora rilevati solo gli outlier inseriti nei dati.

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  

Anomalie delle serie settimanali con soglia di anomalie superiore.