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 anomaliaad_score
: punteggio anomaliebaseline
: valore stimato della serie, in base alla scomposizione
Algoritmo
Questa funzione segue questi passaggi:
- Chiama series_decompose() con i rispettivi parametri per creare la serie di baseline e residui.
- Calcola ad_score serie applicando series_outliers() con il metodo di rilevamento anomalie scelto nella serie dei residui.
- 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
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
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
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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per