series_decompose()
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft Sentinel
Applica una trasformazione di scomposizione in una serie.
Accetta un'espressione contenente una serie (matrice numerica dinamica) come input e la scompone in componenti stagionali, di tendenza e residui.
Sintassi
series_decompose(
Serie ,
[ Tendenza,
stagionalità ,
Test_points,
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 . |
Stagionalità | int |
Controlla l'analisi stagionale. I valori possibili sono: - -1 : correzione automatica della stagionalità tramite series_periods_detect. Questo è il valore predefinito.- Periodo: numero intero positivo che specifica il periodo previsto in numero di contenitori. Ad esempio, se la serie è in 1 - h 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. | |
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:
baseline
: valore stimato della serie (somma dei componenti stagionali e di tendenza, vedere di seguito).seasonal
: la serie del componente stagionale:- se il periodo non viene rilevato o viene impostato in modo esplicito su 0: costante 0.
- se rilevato o impostato su numero intero positivo: mediano dei punti della serie nella stessa fase
trend
: la serie del componente di tendenza.residual
: serie del componente residuo ( ovvero x - baseline).
Nota
- Ordine di esecuzione dei componenti:
- Estrarre la serie stagionale
- Sottrarlo da x, generando la serie deseasonal
- Estrarre il componente di tendenza dalla serie deseasonal
- Creare la linea di base = stagionale + tendenza
- Creare il residuo = x - baseline
- La stagionalità e la tendenza devono essere abilitate. In caso contrario, la funzione è ridondante e restituisce solo baseline = 0 e residual = x.
Altre informazioni sulla scomposizione di serie
Questo metodo viene in genere applicato a serie temporali di metriche previste per manifestare il comportamento periodico e/o della tendenza. È possibile usare il metodo per prevedere i valori futuri delle metriche e/o rilevare valori anomali. Il presupposto implicito di questo processo di regressione è che, a parte il comportamento stagionale e di tendenza, la serie temporale è stocastica e distribuita in modo casuale. Prevedere i valori delle metriche future dai componenti stagionali e di tendenza ignorando la parte residua. Rilevare valori anomali in base al rilevamento outlier solo sulla parte residua. Altri dettagli sono disponibili nel capitolo Scomposizione serie temporale.
Esempi
Stagionalità settimanale
Nell'esempio seguente viene generata una serie con stagionalità settimanale e senza tendenza, quindi si aggiungono alcuni outlier. series_decompose
trova e rileva automaticamente la stagionalità e genera una linea di base quasi identica al componente stagionale. Gli outlier aggiunti possono essere chiaramente visualizzati nel componente residui.
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(y)
| render timechart
Stagionalità settimanale con tendenza
In questo esempio viene aggiunta una tendenza alla serie dell'esempio precedente. series_decompose
Eseguire prima di tutto con i parametri predefiniti. Il valore predefinito della tendenza avg
accetta solo la media e non calcola la tendenza. La linea di base generata non contiene la tendenza. Quando si osserva la tendenza nei residui, risulta evidente che questo esempio è meno accurato rispetto all'esempio precedente.
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(y)
| render timechart
Successivamente, viene rieseguito lo stesso esempio. Poiché si prevede una tendenza nella serie, è necessario specificare linefit
nel parametro di tendenza. È possibile notare che viene rilevata la tendenza positiva e che la linea di base è molto più vicina alla serie di input. I residui sono vicini a zero e solo gli outlier si distinguono. È possibile visualizzare tutti i componenti della serie nel grafico.
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(y, -1, 'linefit')
| render timechart
Contenuto correlato
- Visualizzare i risultati con un diagramma anomalie