Rilevamento anomalie e previsioni

I servizi cloud e i dispositivi IoT generano dati di telemetria che possono essere usati per ottenere informazioni dettagliate, ad esempio il monitoraggio dell'integrità dei servizi, i processi di produzione fisici e le tendenze di utilizzo. L'esecuzione dell'analisi delle serie temporali è un modo per identificare le deviazioni nel modello di queste metriche rispetto al modello di base tipico.

Linguaggio di query Kusto (KQL) contiene il supporto nativo per la creazione, la manipolazione e l'analisi di più serie temporali. Con KQL è possibile creare e analizzare migliaia di serie temporali in secondi, consentendo soluzioni e flussi di lavoro di monitoraggio quasi in tempo reale.

Questo articolo illustra in dettaglio le funzionalità di rilevamento anomalie e previsione delle serie temporali di KQL. Le funzioni delle serie temporali applicabili si basano su un solido modello di scomposizione noto, in cui ogni serie temporale originale viene scomposta in componenti stagionali, di tendenza e residui. Le anomalie vengono rilevate da outlier nel componente residuo, mentre la previsione viene eseguita estrapolando i componenti stagionali e di tendenza. L'implementazione KQL migliora significativamente il modello di scomposizione di base mediante il rilevamento automatico della stagionalità, l'analisi outlier affidabile e l'implementazione vettorializzata per elaborare migliaia di serie temporali in secondi.

Prerequisiti

  • Un account Microsoft o un'identità utente di Microsoft Entra. Non è necessaria una sottoscrizione di Azure.
  • Per una panoramica delle funzionalità delle serie temporali, vedere Analisi delle serie temporali.

Modello di scomposizione delle serie temporali

L'implementazione nativa KQL per la stima delle serie temporali e il rilevamento delle anomalie usa un modello di scomposizione noto. Questo modello viene applicato alla serie temporale di metriche previste per manifestare il comportamento periodico e di tendenza, ad esempio il traffico del servizio, gli heartbeat dei componenti e le misurazioni periodiche IoT per prevedere i valori delle metriche future e rilevare quelli anomali. Il presupposto di questo processo di regressione è che, diversamente dal comportamento stagionale e di tendenza precedentemente noto, la serie temporale viene distribuita in modo casuale. È quindi possibile prevedere i valori delle metriche future dai componenti stagionali e di tendenza, collettivamente denominati baseline e ignorare la parte residua. È anche possibile rilevare valori anomali in base all'analisi outlier usando solo la parte residua. Per creare un modello di scomposizione, usare la funzione series_decompose(). La series_decompose() funzione accetta un set di serie temporali e scompone automaticamente ogni serie temporale nei relativi componenti stagionali, di tendenza, residui e di base.

Ad esempio, è possibile scomporre il traffico di un servizio Web interno usando la query seguente:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (baseline, seasonal, trend, residual) = series_decompose(num, -1, 'linefit')  //  decomposition of a set of time series to seasonal, trend, residual, and baseline (seasonal+trend)
| render timechart with(title='Web app. traffic of a month, decomposition', ysplit=panels)

Scomposizione delle serie temporali.

  • La serie temporale originale è etichettata come num (in rosso).
  • Il processo inizia dal rilevamento automatico della stagionalità usando la funzione series_periods_detect() ed estrae il modello stagionale (in viola).
  • Il modello stagionale viene sottratto dalla serie temporale originale e viene eseguita una regressione lineare usando la funzione series_fit_line() per trovare il componente di tendenza (in blu chiaro).
  • La funzione sottrae la tendenza e il resto è il componente residuo (in verde).
  • Infine, la funzione aggiunge i componenti stagionali e di tendenza per generare la baseline (in blu).

Rilevamento delle anomalie delle serie temporali

La funzione series_decompose_anomalies() trova punti anomali in un set di serie temporali. Questa funzione chiama series_decompose() per compilare il modello di scomposizione e quindi viene eseguito series_outliers() sul componente residuo. series_outliers() calcola i punteggi delle anomalie per ogni punto del componente residuo usando il test di isolamento di Tukey. I punteggi di anomalia superiori a 1,5 o inferiori a -1,5 indicano rispettivamente un lieve aumento o una diminuzione delle anomalie. I punteggi di anomalia superiori a 3,0 o inferiori a -3.0 indicano un'anomalia forte.

La query seguente consente di rilevare anomalie nel traffico del servizio Web interno:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| render anomalychart with(anomalycolumns=anomalies, title='Web app. traffic of a month, anomalies') //use "| render anomalychart with anomalycolumns=anomalies" to render the anomalies as bold points on the series charts.

Rilevamento anomalie delle serie temporali.

  • Serie temporale originale (in rosso).
  • Componente baseline (stagionale + tendenza) (in blu).
  • Punti anomali (in viola) sopra la serie temporale originale. I punti anomali deviano significativamente dai valori di base previsti.

Previsione di una serie temporale

La funzione series_decompose_forecast() stima i valori futuri di un set di serie temporali. Questa funzione chiama series_decompose() per compilare il modello di scomposizione e quindi, per ogni serie temporale, estrapola il componente di base in futuro.

La query seguente consente di prevedere il traffico del servizio Web della settimana successiva:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week by Time Series Decomposition')

Previsione delle serie temporali.

  • Metrica originale (in rosso). I valori futuri sono mancanti e impostati su 0, per impostazione predefinita.
  • Estrapolare il componente di base (in blu) per stimare i valori della settimana successiva.

Scalabilità

Linguaggio di query Kusto sintassi consente a una singola chiamata di elaborare più serie temporali. L'implementazione ottimizzata unica consente prestazioni veloci, fondamentali per il rilevamento e la previsione di anomalie efficaci durante il monitoraggio di migliaia di contatori in scenari quasi in tempo reale.

La query seguente illustra l'elaborazione di tre serie temporali contemporaneamente:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid
| extend offset=case(sid=='TS3', 4000000, sid=='TS2', 2000000, 0)   //  add artificial offset for easy visualization of multiple time series
| extend num=series_add(num, offset)
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week for 3 time series')

Scalabilità delle serie temporali.

Riepilogo

Questo documento illustra in dettaglio le funzioni KQL native per il rilevamento e la previsione delle anomalie delle serie temporali. Ogni serie temporale originale viene scomposta in componenti stagionali, di tendenza e residui per rilevare anomalie e/o previsioni. Queste funzionalità possono essere usate per scenari di monitoraggio quasi in tempo reale, ad esempio rilevamento degli errori, manutenzione predittiva e previsione della domanda e del carico.