Prevedere più serie temporali con un modello univariabile


Questo tutorial insegna a utilizzare un modello di serie temporale univariata per prevedere il valore futuro di una determinata colonna in base ai valori storici. per quella colonna.

Questo tutorial prevede più serie temporali. I valori previsti vengono calcolati per ogni punto temporale, per ogni valore in una o più colonne specificate. Ad esempio, se volessi fare previsioni meteo e specificare una colonna contenente città, i dati previsti conterranno previsioni per tutti i punti di tempo Città A, quindi i valori previsti per tutti i punti temporali per la città B e così via.

Questo tutorial utilizza i dati del pubblico bigquery-public-data.new_york.citibike_trips tabella. Questa tabella contiene informazioni sui viaggi in Citi bike a New York.

Prima di leggere questo tutorial, ti consigliamo vivamente di leggere Prevedere una singola serie temporale con un modello univariato.

Obiettivi

Questo tutorial ti guida nel completamento delle seguenti attività:

  • Crea un modello di serie temporali per prevedere il numero di corse in bicicletta utilizzando il metodo CREATE MODEL.
  • Valutazione delle informazioni sulla media mobile integrata autoregressiva (ARIMA) nel modello utilizzando Funzione ML.ARIMA_EVALUATE.
  • Controlla i coefficienti del modello utilizzando Funzione ML.ARIMA_COEFFICIENTS.
  • Recupero delle informazioni sulla corsa in bici previste dal modello utilizzando Funzione ML.FORECAST.
  • Recuperare i componenti della serie temporale, come la stagionalità e la tendenza, utilizzando la funzione ML.EXPLAIN_FORECAST. Puoi esaminare i componenti di queste serie temporali per spiegare i valori previsti.

Costi

Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:

  • BigQuery
  • BigQuery ML

Per ulteriori informazioni sui costi di BigQuery, consulta Prezzi di BigQuery.

Per ulteriori informazioni sui costi di BigQuery ML, consulta Prezzi di BigQuery ML.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. BigQuery viene attivato automaticamente nei nuovi progetti. Per attivare BigQuery in un progetto preesistente, vai a

    Enable the BigQuery API.

    Enable the API

Crea un set di dati

Crea un set di dati BigQuery per archiviare il tuo modello ML:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nel riquadro Explorer, fai clic sul nome del tuo progetto.

  3. Fai clic su Visualizza azioni > Crea il set di dati.

    Crea il set di dati.

  4. Nella pagina Crea set di dati:

    • In ID set di dati, inserisci bqml_tutorial.

    • Per Tipo di località, seleziona Più regioni e poi Stati Uniti (più regioni negli Stati Uniti).

      I set di dati pubblici sono archiviati nella US multiregione. Per semplicità, per archiviare il set di dati nella stessa posizione.

    • Lascia invariate le restanti impostazioni predefinite e fai clic su Crea il set di dati.

      Pagina Crea set di dati.

Visualizza i dati di input

Prima di creare il modello, puoi facoltativamente visualizzare l'input i dati delle serie temporali per avere un'idea della distribuzione. Puoi farlo utilizzando Looker Studio.

L'istruzione SELECT della seguente query utilizza la funzione EXTRACT per estrarre le informazioni sulla data dalla colonna starttime. La query utilizza la clausola COUNT(*) per ottenere il numero totale giornaliero di viaggi in bici Citi.

Per visualizzare i dati delle serie temporali:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, incolla la query seguente e fai clic su Esegui:

    SELECT
      EXTRACT(DATE from starttime) AS date,
      COUNT(*) AS num_trips
    FROM
    `bigquery-public-data.new_york.citibike_trips`
    GROUP BY date;
  3. Al termine della query, fai clic su Esplora i dati > Esplora con Looker Studio. Looker Studio si apre in una nuova scheda. Nella nuova scheda, completa i seguenti passaggi.

  4. In Looker Studio, fai clic su Inserisci > Grafico delle serie temporali:

  5. Nel riquadro Grafico, scegli la scheda Configurazione.

  6. Nella sezione Metrica, aggiungi il campo num_trips e rimuovi la metrica predefinita Conteggio record. Il grafico risultante è simile al seguente:

    Grafico che mostra i dati dei viaggi in bicicletta nel tempo.

crea il modello di serie temporali

Vuoi prevedere il numero di corse in bicicletta per ogni stazione Citi Bike, il che richiede molti modelli di serie temporali, uno per ogni stazione Citi Bike inclusa nei dati di input. Per farlo, puoi scrivere più CREATE MODEL query, ma questa può essere una procedura tediosa e lunga, soprattutto se hai un numero elevato di serie temporali. Puoi utilizzare invece un singola query per creare e adattare un set di modelli di serie temporali al fine di eseguire previsioni più serie temporali contemporaneamente.

Nella seguente query, la clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica che stai creando un modello di serie temporali basato su ARIMA. Utilizza l'opzione time_series_id_col dell'istruzione CREATE MODEL per specificare una o più colonne nei dati di input per le quali vuoi ottenere le previsioni, in questo caso la stazione Citi Bike, come rappresentata dalla colonna start_station_name. Puoi usare la clausola WHERE per limita le stazioni di partenza a quelle il cui nome include Central Park. La Opzione auto_arima_max_order dell'istruzione CREATE MODEL controlla spazio di ricerca per l'ottimizzazione degli iperparametri nell'algoritmo auto.ARIMA. La Opzione decompose_time_series dell'istruzione CREATE MODEL per impostazione predefinita è TRUE, quindi le informazioni su i dati delle serie temporali vengono restituiti quando valuti il modello nel passaggio successivo.

Per creare il modello:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, incolla la query seguente e fai clic su Esegui:

    CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group`
    OPTIONS
    (model_type = 'ARIMA_PLUS',
      time_series_timestamp_col = 'date',
      time_series_data_col = 'num_trips',
      time_series_id_col = 'start_station_name',
      auto_arima_max_order = 5
    ) AS
    SELECT
      start_station_name,
      EXTRACT(DATE from starttime) AS date,
      COUNT(*) AS num_trips
    FROM
    `bigquery-public-data.new_york.citibike_trips`
    WHERE start_station_name LIKE '%Central Park%'
    GROUP BY start_station_name, date;

    Il completamento della query richiede circa 24 secondi, dopodiché Il modello nyc_citibike_arima_model_group viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzione CREATE MODEL, non vedi la query che consentono di analizzare i dati e visualizzare i risultati.

Questa query crea dodici modelli di serie temporali, uno per ciascuna delle dodici stazione di partenza di Citi Bike nei dati di input. Il costo in termini di tempo, circa 24 secondi è solo 1, 4 volte superiore rispetto alla creazione di una singola serie temporale a causa del parallelismo. Tuttavia, se rimuovi la clausolaWHERE ... LIKE ..., ci sarebbero più di 600 serie temporali da prevedere e non verrebbero previste completamente in parallelo a causa delle limitazioni della capacità degli slot. In questo caso, la query impiegherebbe circa 15 minuti l'operazione. ridurre il runtime delle query con la compromissione di un potenziale un calo della qualità del modello, potresti diminuire il valore Opzione auto_arima_max_order su 3 o 4 dal valore predefinito di 5. In questo modo, lo spazio di ricerca dell'ottimizzazione degli iperparametri nell'algoritmo auto.ARIMA viene ridotto. Per ulteriori informazioni, vedi Large-scale time series forecasting best practices

Valuta il modello

Valuta il modello di serie temporali utilizzando ML.ARIMA_EVALUATE personalizzata. La funzione ML.ARIMA_EVALUATE mostra le metriche di valutazione generate per il modello durante il processo di ottimizzazione automatica degli iperparametri.

Per valutare il modello, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);

    I risultati dovrebbero essere simili ai seguenti:

    Metriche di valutazione per il modello di serie temporali.

    La colonna start_station_name identifica la colonna di dati di input per la quale serie temporali. Si tratta della colonna specificata nell'opzione time_series_id_col dell'istruzione CREATE MODEL.

    non_seasonal_p, non_seasonal_d, non_seasonal_q e has_drift le colonne di output definiscono un modello ARIMA nella pipeline di addestramento. La log_likelihood, AIC e variancele colonne di output sono pertinenti per ARIMA processo di adattamento del modello.Il processo di adattamento determina il miglior modello ARIMA utilizzando l'algoritmo auto.ARIMA, uno per ogni serie temporale.

    L'algoritmo auto.ARIMA utilizza Test KPSS per determinare il valore migliore per non_seasonal_d, che in questo caso è 1. Quando il valore del campo non_seasonal_d è 1, l'algoritmo auto.ARIMA addestra 42 diversi modelli ARIMA candidati in parallelo. In questo esempio, tutti e 42 i modelli candidati sono validi, pertanto l'output contiene 42 righe, una per ogni modello ARIMA candidato. Se alcuni modelli non sono validi, vengono esclusi dall'output. Questi modelli candidati sono restituiti in ordine crescente dall'AIC. Il modello nella prima riga ha il valore AIC ed è considerato il modello migliore. Questo modello migliore viene salvato come modello finale e viene utilizzato quando chiami ML.FORECAST, ML.EVALUATE e ML.ARIMA_COEFFICIENTS come mostrato nei passaggi che seguono.

    La colonna seasonal_periods contiene informazioni sul pattern stagionale identificato nei dati delle serie temporali. Ogni serie temporale può avere pattern. Ad esempio, dalla figura puoi vedere che una serie temporale ha un andamento annuale, mentre altre no.

    Le colonne has_holiday_effect, has_spikes_and_dips e has_step_changes vengono compilate solo quando decompose_time_series=TRUE. Queste colonne riflettono anche informazioni sui dati delle serie temporali di input e non sono correlate alla definizione del modello ARIMA. Queste colonne hanno anche gli stessi valori in tutte le righe di output.

    Per ulteriori informazioni sulle colonne di output, consulta Funzione ML.ARIMA_EVALUATE.

Mentre auto.ARIMA valuta decine di modelli ARIMA candidati per ogni serie temporale, ML.ARIMA_EVALUATE per impostazione predefinita restituisce solo le informazioni relative per rendere compatta la tabella di output. Per visualizzare tutti i modelli candidati, puoi impostare la funzione ML.ARIMA_EVALUATE Argomento show_all_candidate_model a TRUE.

Ispeziona i coefficienti del modello

Controlla i coefficienti del modello di serie temporali utilizzando la funzione ML.ARIMA_COEFFICIENTS.

Segui questi passaggi per recuperare i coefficienti del modello:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, incolla la query seguente e fai clic su Esegui:

    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);

    Il completamento della query richiede meno di un secondo. I risultati dovrebbero apparire simile al seguente:

    Coefficienti per il modello di serie temporali.

    La colonna start_station_name identifica la colonna di dati di input per la quale serie temporali. Si tratta della colonna specificata nell'opzione time_series_id_col dell'istruzione CREATE MODEL.

    La colonna di output ar_coefficients mostra i coefficienti del modello della parte autoregressiva (AR) del modello ARIMA. Analogamente, ma_coefficients colonna di output mostra i coefficienti del modello della parte della media mobile (MA) di il modello ARIMA. Entrambe le colonne contengono valori di array, le cui lunghezze sono uguali rispettivamente a non_seasonal_p e non_seasonal_q. La Il valore intercept_or_drift è il termine costante nel modello ARIMA.

    Per ulteriori informazioni sulle colonne di output, consulta la funzione ML.ARIMA_COEFFICIENTS.

Utilizza il modello per prevedere i dati

Prevedere i valori delle serie temporali future utilizzando ML.FORECAST personalizzata.

Nella seguente query GoogleSQL, la clausola STRUCT(3 AS horizon, 0.9 AS confidence_level) indica che la query prevede tre punti temporali futuri e genera un intervallo di previsione con un livello di confidenza del 90%.

Per prevedere i dati con il modello:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor di query, incolla la seguente query e fai clic su Esegui:

    SELECT
     *
    FROM
     ML.FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`,
       STRUCT(3 AS horizon, 0.9 AS confidence_level))
  3. Fai clic su Esegui.

    Il completamento della query richiede meno di un secondo. I risultati dovrebbero apparire ad esempio:

    Output ML.FORECAST.

    La prima colonna, start_station_name, annota la serie temporale a cui è adattato ogni modello di serie temporale. Ogni start_station_name ha tre righe di risultati previsti, come specificato dal valore horizon.

    Per ogni start_station_name, le righe di output sono in ordine cronologico in base al Valore della colonna forecast_timestamp. Nella previsione di serie temporali, la previsione dell'intervallo, come rappresentato da prediction_interval_lower_bound e prediction_interval_upper_bound, è importante quanto i valori Valore della colonna forecast_value. Il valore forecast_value è il punto medio dell'intervallo di previsione. L'intervallo di previsione dipende dai valori delle colonne standard_error e confidence_level.

    Per ulteriori informazioni sulle colonne di output, consulta la funzione ML.FORECAST.

Spiega i risultati della previsione

Puoi ottenere metriche di spiegabilità oltre ai dati di previsione utilizzando il metodo Funzione ML.EXPLAIN_FORECAST. La funzione ML.EXPLAIN_FORECAST effettua le previsioni i valori delle serie temporali future e restituisce anche tutti i componenti separati del serie temporali. Se vuoi solo restituire i dati di previsione, utilizza la funzione ML.FORECAST come mostrato in Utilizzare il modello per prevedere i dati.

La clausola STRUCT(3 AS horizon, 0.9 AS confidence_level) utilizzata in La funzione ML.EXPLAIN_FORECAST indica che la query prevede 3 previsioni punti temporali e genera un intervallo di previsione con un'affidabilità del 90%.

Segui questi passaggi per spiegare i risultati del modello:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, incolla la query seguente e fai clic su Esegui:

    SELECT
     *
    FROM
     ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`,
       STRUCT(3 AS horizon, 0.9 AS confidence_level));

    Il completamento della query richiede meno di un secondo. I risultati dovrebbero apparire ad esempio:

    Le prime nove colonne di output dei dati e delle spiegazioni delle previsioni. Dalla decima alla diciassettesima colonne di output dei dati previsti e delle spiegazioni della previsione. Le ultime sei colonne di output dei dati e le spiegazioni delle previsioni.

    Le prime migliaia di righe restituite sono tutti dati della cronologia. Devi scorrere i risultati per vedere i dati di previsione.

    Le righe di output vengono ordinate prima per start_station_name, poi in ordine cronologico in base al valore della colonna time_series_timestamp. Nella serie temporale previsione, la previsione dell'intervallo, come rappresentato da prediction_interval_lower_bound e prediction_interval_upper_bound, è importante quanto i valori Valore della colonna forecast_value. Il valore forecast_value è il punto medio dell'intervallo di previsione. L'intervallo di previsione dipende dai valori delle colonne standard_error e confidence_level.

    Per ulteriori informazioni sulle colonne di output, consulta ML.EXPLAIN_FORECAST

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  • Puoi eliminare il progetto che hai creato.
  • In alternativa, puoi conservare il progetto ed eliminare il set di dati.

Elimina il set di dati

L'eliminazione del progetto rimuove tutti i set di dati e tutte le tabelle nel progetto. Se se preferisci riutilizzare il progetto, puoi eliminare il set di dati creato tutorial:

  1. Se necessario, apri la pagina BigQuery nella console Google Cloud.

    Vai alla pagina di BigQuery

  2. Nella barra di navigazione, fai clic sul set di dati bqml_tutorial che hai creato.

  3. Fai clic su Elimina set di dati per eliminare il set di dati, la tabella e tutti i dati e i dati di Google Cloud.

  4. Nella finestra di dialogo Elimina set di dati, conferma il comando di eliminazione digitando il nome del set di dati (bqml_tutorial) e poi fai clic su Elimina.

Elimina il progetto

Per eliminare il progetto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi