Predizione di serie temporali multivariate con BQML

Predizione serie temporali multivariate BQML

 

Lo scorso inverno, ho tenuto una presentazione su ‘Modello di serie temporali più prevedibile con BQML‘ al GDG DevFest Tashkent 2022 a Tashkent, la capitale dell’Uzbekistan.

Stavo per condividere parte del materiale e del codice dopo il DevFest che ho utilizzato nella presentazione, ma il tempo è passato e sono state rilasciate nuove funzionalità in BQML che sovrappongono parte del contenuto.

Quindi, invece, menzionerò brevemente le nuove funzionalità e alcune cose che sono ancora valide.

 

Modello di serie temporali e BQML

 

I dati delle serie temporali vengono utilizzati da molte organizzazioni per vari scopi ed è importante notare che l’analisi predittiva delle serie temporali riguarda il “futuro” nel tempo. L’analisi predittiva delle serie temporali è stata utilizzata nel breve termine, nel VoAGI e nel lungo termine e, sebbene presenti molte imprecisioni e rischi, è migliorata costantemente.

Dal momento che la “previsione” sembra essere così utile, potresti essere tentato di applicare un modello di previsione delle serie temporali se hai dati di serie temporali. Ma i modelli di previsione delle serie temporali sono di solito intensivi dal punto di vista computazionale e, se hai molti dati, lo saranno ancora di più. Quindi è complicato e difficile elaborarli, caricarli nell’ambiente di analisi e analizzarli.

Se stai utilizzando Google BigQuery per la gestione dei dati, puoi utilizzare BQML (BigQuery ML) per applicare algoritmi di apprendimento automatico ai tuoi dati in modo semplice, facile e veloce. Molte persone utilizzano BigQuery per elaborare molti dati e gran parte di questi dati sono spesso dati di serie temporali. E BQML supporta anche modelli di serie temporali.

La base del modello di serie temporali attualmente supportato da BQML è il modello AutoRegressive Integrated Moving Average (ARIMA). Il modello ARIMA prevede utilizzando solo i dati esistenti delle serie temporali ed è noto per avere una buona performance di previsione a breve termine, e poiché combina AR e MA, è un modello popolare che può coprire una vasta gamma di modelli di serie temporali.

Tuttavia, questo modello è in generale intensivo dal punto di vista computazionale e, poiché utilizza solo dati di serie temporali con normalità, è difficile utilizzarlo nei casi in cui sono presenti tendenze o stagionalità. Pertanto, ARIMA_PLUS in BQML include diverse funzionalità aggiuntive come opzioni. Puoi aggiungere scomposizione delle serie temporali, fattori di stagionalità, picchi e cali, cambiamenti di coefficienti e altro al tuo modello, oppure puoi passarli separatamente e regolare manualmente il modello. Mi piace anche personalmente il fatto che puoi regolare la periodicità incorporando automaticamente opzioni per le festività, che è uno dei vantaggi dell’utilizzo di una piattaforma che non richiede di aggiungere manualmente informazioni relative alle date.

   

Puoi fare riferimento a questa pagina per ulteriori informazioni.

Tuttavia, quando si tratta di applicazioni reali, la previsione delle serie temporali non è così semplice. Naturalmente, siamo stati in grado di identificare più cicli e aggiungere interventi a più serie temporali con ARIMA_PLUS, ma ci sono molti fattori esterni legati ai dati delle serie temporali e solo pochi eventi accadono in isolamento. La stazionarietà può essere difficile da trovare nei dati delle serie temporali.

Nella presentazione originale, ho analizzato come gestire questi dati reali delle serie temporali per creare un modello di previsione: decomporre queste serie temporali, pulire i dati scomposti, importare tutto in Python e poi intrecciarli con altre variabili per creare una funzione di serie temporali multivariata, stimare la causalità e incorporarla in un modello di previsione, e stimare il grado in cui l’effetto varia con i cambiamenti negli eventi.

 

Nuova funzionalità: ARIMA_PLUS_XREG

 

E solo negli ultimi mesi, una nuova funzionalità per creare funzioni di serie temporali multivariate con variabili esterne (ARIMA_PLUS_XREG, XREG di seguito) è diventata una funzionalità completa in BQML.

Puoi leggere tutto a riguardo qui (è in anteprima a partire da luglio 2023, ma immagino che sarà disponibile più avanti quest’anno).

Applico il tutorial ufficiale per vedere come si confronta con un modello tradizionale di serie temporali univariate e possiamo vedere come funziona.

I passaggi sono gli stessi del tutorial, quindi non li duplicherò, ma qui ci sono i due modelli che ho creato. Prima ho creato un modello tradizionale ARIMA_PLUS e poi un modello XREG utilizzando gli stessi dati ma aggiungendo la temperatura e la velocità del vento al tempo.

# ARIMA_PLUS

# ARIMA_PLUS
CREATE OR REPLACE MODEL test_dt_us.seattle_pm25_plus_model
OPTIONS (
 MODEL_TYPE = 'ARIMA_PLUS',
 time_series_timestamp_col = 'date',
 time_series_data_col = 'pm25') AS
SELECT date, pm25
FROM test_dt_us.seattle_air_quality_daily
WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31')
#ARIMA_PLUS_XREG
CREATE OR REPLACE  MODEL test_dt_us.seattle_pm25_xreg_model
 OPTIONS (
   MODEL_TYPE = 'ARIMA_PLUS_XREG',
   time_series_timestamp_col = 'date',
   time_series_data_col = 'pm25') AS
SELECT  date, pm25, temperature, wind_speed
FROM test_dt_us.seattle_air_quality_daily
WHERE  date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31')

Un modello che utilizza questi dati multipli avrebbe un aspetto simile a questo

I due modelli vengono confrontati con ML.Evaluate.

SELECT  * 
FROM  ML.EVALUATE
         (  MODEL test_dt_us.seattle_pm25_plus_model, 
         (  SELECT  date,  pm25
           FROM  test_dt_us.seattle_air_quality_daily 
           WHERE  date > DATE('2020-12-31')  ))
SELECT  * 
FROM  ML.EVALUATE
          (  MODEL test_dt_us.seattle_pm25_xreg_model, 
          (  SELECT  date,  pm25,  temperature,  wind_speed 
             FROM  test_dt_us.seattle_air_quality_daily 
             WHERE  date > DATE('2020-12-31')  ),
          STRUCT(  TRUE AS perform_aggregation,  30 AS horizon))

I risultati sono di seguito.

ARIMA_PLUS

ARIMA_PLUS_XREG

Puoi vedere che il modello XREG è migliore in termini di metriche di prestazione di base come MAE, MSE e MAPE. (Ovviamente, questa non è una soluzione perfetta, dipende dai dati, e possiamo solo dire che abbiamo ottenuto un altro strumento utile.)

L’analisi delle serie temporali multivariate è un’opzione molto necessaria in molti casi, ma spesso è difficile da applicare per vari motivi. Ora possiamo utilizzarla se i motivi sono nei dati e nelle fasi di analisi. Sembra che abbiamo una buona opzione per questo, quindi è bello saperlo e speriamo che sia utile in molti casi. JeongMin Kwon è un Data Scientist senior freelance con oltre 10 anni di esperienza pratica nell’utilizzo di modelli di apprendimento automatico e data mining.