series_decompose_anomalies()
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft Sentinel
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 anomalyad_score
: punteggio anomaliebaseline
: valore stimato della serie, in base alla scomposizione
Algoritmo
Questa funzione segue questa procedura:
- Chiama series_decompose() con i rispettivi parametri per creare la serie di baseline e i residui.
- Calcola ad_score serie applicando series_outliers() con il metodo di rilevamento anomalie scelto nella serie di residui.
- 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
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
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
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