Condividi tramite


series_decompose_anomalies()

Il rilevamento anomalie si basa sulla scomposizione di 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, [ Tendenza , stagionalità, soglia, Test_points , AD_method Seasonality_threshold ], )

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio Descrizione
Serie dynamic ✔️ Matrice di valori numerici, in genere l'output risultante di operatori make-series o make_list .
Threshold 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: correzione automatica della stagionalità tramite series_periods_detect. Questo è il 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). Si tratta dell'impostazione predefinita.
- 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 recinzione di Tukey con intervallo di 10-90° percentile personalizzato. Si tratta dell'impostazione predefinita.
- tukey: test di recinzione 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.

Valori restituiti

La funzione restituisce la rispettiva serie seguente:

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

Algoritmo

Questa funzione segue questa procedura:

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

Esempi

Rilevare anomalie nella stagionalità settimanale

Nell'esempio seguente generare una serie con stagionalità settimanale e quindi aggiungervi alcuni outlier. series_decompose_anomalies autodetecta 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 che mostra le linee di base e gli 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 linea di base 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. È possibile 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 su come 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 settimanali della stagionalità 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 una soglia di anomalie superiore.