Previsione di più serie temporali con una singola query per i viaggi di NYC Citi Bike

In questo tutorial imparerai a creare un insieme di modelli di serie temporali per eseguire più previsioni di serie temporali con una singola query. Imparerai anche ad applicare diverse strategie di addestramento rapido per velocizzare notevolmente la query e come valutare l'accuratezza della previsione. Utilizzerai i dati di new_york.citibike_trips. Questi dati contengono informazioni sui viaggi di Citi Bike a New York.

Prima di leggere questo tutorial, ti consigliamo vivamente di leggere la sezione Previsione di una singola serie temporale dai dati di Google Analytics.

Obiettivi

Questo tutorial è composto dai seguenti strumenti:

  • L'istruzione CREATE MODEL: per creare un modello di serie temporale o un insieme di modelli di serie temporali.
  • La funzione ML.ARIMA_EVALUATE: per valutare il modello.
  • La funzione ML.ARIMA_COEFFICIENTS: per esaminare i coefficienti del modello.
  • La funzione ML.EXPLAIN_FORECAST: per recuperare diversi componenti della serie temporale (come stagionalità e tendenza), che possono essere utilizzati per spiegare i risultati della previsione.
  • Google Data Studio: per visualizzare i risultati della previsione.
  • (Facoltativo) La funzione ML.FORECAST: per prevedere le visite totali giornaliere.

Costi

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

  • BigQuery
  • BigQuery ML

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

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

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

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

    Attiva l'API BigQuery.

    Abilita l'API

Passaggio 1: crea il set di dati

Il primo passaggio consiste nel creare un set di dati BigQuery per archiviare il tuo modello di machine learning. Per creare il tuo set di dati:

  1. In Cloud Console, vai alla pagina BigQuery.

    Vai alla pagina BigQuery

  2. Nella sezione Risorse, fai clic sul nome del tuo progetto.

  3. Nel riquadro dei dettagli, fai clic su Crea set di dati.

    Crea il set di dati.

  4. Nella pagina Crea set di dati:

    • In ID set di dati, inserisci bqml_tutorial.
    • In Località dei dati, scegli Stati Uniti (US). Attualmente, i set di dati pubblici sono archiviati nella località con più aree geografiche US. Per semplicità, il set di dati deve essere nella stessa posizione.

      Crea la pagina del set di dati.

  5. Lascia invariate tutte le altre impostazioni predefinite e fai clic su Crea set di dati.

(Facoltativo) Passaggio 2: visualizza le serie temporali in cui eseguire la previsione

Prima di creare il modello, è utile verificare l'aspetto della serie temporale di input. Puoi farlo utilizzando Google Data Studio.

Nella query seguente, la clausola FROM bigquery-public-data.new_york.citibike_trips indica che stai eseguendo query sulla tabella citibike_trips nel set di dati new_york.

Nell'istruzione SELECT, la query utilizza la funzione EXTRACT per estrarre le informazioni sulle date dalla colonna starttime. La query utilizza la clausola COUNT(*) per ricevere il numero totale giornaliero di corse di Citi Bike.

#standardSQL
SELECT
   EXTRACT(DATE from starttime) AS date,
   COUNT(*) AS num_trips
FROM
  `bigquery-public-data`.new_york.citibike_trips
GROUP BY date

Per eseguire la query, segui questi passaggi:

  1. In Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    #standardSQL
    SELECT
       EXTRACT(DATE from starttime) AS date,
       COUNT(*) AS num_trips
    FROM
      `bigquery-public-data`.new_york.citibike_trips
    GROUP BY date
    
  3. Fai clic su Esegui.

    Dopo l'esecuzione della query, l'output è simile allo screenshot seguente. Nello screenshot, si può notare che questa serie temporale ha 1184 punti dati giornalieri, che si estendono per più di quattro anni. Fai clic sul pulsante Esplora i dati e poi su Esplora con Data Studio. Google Data Studio si apre in una nuova scheda. Completa i seguenti passaggi nella nuova scheda.

    Output delle query.

  4. Nel riquadro Grafico, scegli Grafico delle serie temporali:

    Time_series_chart.

  5. Nel riquadro Dati, sotto il riquadro Grafico, vai alla sezione Metrica. Aggiungi il campo num_trips e rimuovi la metrica predefinita Record Count:

    Time_series_data_fields.

    Dopo aver completato il passaggio precedente, viene visualizzato il seguente grafico. Il grafico mostra che la serie temporale di input ha pattern sia settimanali che annuali. Anche le serie temporali sono in aumento.

    Result_visualization.

Passaggio 3: crea il modello della serie temporale per eseguire una singola previsione di serie temporali

A questo punto, crea un modello di serie temporale utilizzando i dati delle corse di Citi NYC.

La seguente query SQL standard crea un modello utilizzato per prevedere le corse giornaliere in bici totali. La clausola CREATE MODEL crea e addestra un modello denominato bqml_tutorial.nyc_citibike_arima_model.

#standardSQL
CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
OPTIONS
  (model_type = 'ARIMA_PLUS',
   time_series_timestamp_col = 'date',
   time_series_data_col = 'num_trips'
  ) AS
SELECT
   EXTRACT(DATE from starttime) AS date,
   COUNT(*) AS num_trips
FROM
  `bigquery-public-data`.new_york.citibike_trips
GROUP BY date

La clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica che stai creando un modello della serie temporale basato su ARIMA. Per impostazione predefinita, auto_arima=TRUE, quindi l'algoritmo auto.ARIMA regola automaticamente gli iperparametri nei modelli ARIMA_PLUS. L'algoritmo include decine di modelli di candidati e sceglie quello migliore con il criterio di informazione Akaike (AIC) più basso. Inoltre, poiché l'impostazione predefinita è data_frequency='AUTO_FREQUENCY', il processo di addestramento dedurrà automaticamente la frequenza dei dati della serie temporale di input. Infine, l'istruzione CREATE MODEL utilizza decompose_time_series=TRUE per impostazione predefinita e gli utenti possono comprendere meglio come si prevede la serie temporale recuperando i componenti separati delle serie temporali come i periodi stagionali e l'effetto festività.

Esegui la query CREATE MODEL per creare e addestrare il modello:

  1. In Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    #standardSQL
    CREATE OR REPLACE MODEL bqml_tutorial.nyc_citibike_arima_model
    OPTIONS
      (model_type = 'ARIMA_PLUS',
       time_series_timestamp_col = 'date',
       time_series_data_col = 'num_trips'
      ) AS
    SELECT
       EXTRACT(DATE from starttime) AS date,
       COUNT(*) AS num_trips
    FROM
      `bigquery-public-data`.new_york.citibike_trips
    GROUP BY date
    
  3. Fai clic su Esegui.

    La query richiede circa 17 secondi, dopodiché il tuo modello (nyc_citibike_arima_model) viene visualizzato nel pannello di navigazione. Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non vengono visualizzati i risultati delle query.

Passaggio 4: fai previsioni sulle serie temporali e visualizza i risultati

Per spiegare come è prevista la serie temporale, visualizza tutti i componenti della serie secondaria, ad esempio stagionalità e tendenza, utilizzando la funzione ML.EXPLAIN_FORECAST.

Per farlo, segui questi passaggi:

  1. In Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    #standardSQL
    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST(MODEL bqml_tutorial.nyc_citibike_arima_model,
                          STRUCT(365 AS horizon, 0.9 AS confidence_level))
    
  3. Fai clic su Esegui.

  4. Al termine della query, fai clic sul pulsante Esplora i dati e poi su Esplora con Data Studio. Nel browser si apre una nuova scheda. Quindi, nel riquadro Grafico, trova l'icona Grafico della serie temporale e fai clic sull'icona, come mostrato nel seguente screenshot.

    Time_series_chart.

  5. Nel riquadro Dati, esegui le seguenti operazioni:

    1. Nella sezione Dimensione intervallo di date, seleziona time_series_timestamp (Date).
    2. Nella sezione Dimensione, seleziona time_series_timestamp (Date).
    3. Nella sezione Metrica, rimuovi la metrica predefinita Record Count e aggiungi quanto segue:
      • time_series_data
      • prediction_interval_lower_bound
      • prediction_interval_upper_bound
      • trend
      • seasonal_period_yearly
      • seasonal_period_weekly
      • spikes_and_dips
      • step_changes

    Time_series_chart.

  6. Nel riquadro Stile, scorri verso il basso fino all'opzione Dati mancanti e utilizza Interruzioni riga invece di Linea a zero.

    Style_section.

    Dopo aver completato questi passaggi, il riquadro seguente viene visualizzato nel riquadro a sinistra.

    Result_visualization.

Passaggio 5: prevedi più serie temporali contemporaneamente

Successivamente, puoi prevedere il numero totale di corse giornaliere a partire da diverse stazioni Citi Bike. Per farlo, devi prevedere molte serie temporali. Puoi scrivere più query CREATE MODEL, ma questo può essere noioso e dispendioso in termini di tempo, soprattutto se le serie temporali sono molte.

Per migliorare questo processo, BigQuery ML consente di creare un set di modelli di serie temporali per prevedere più serie temporali con un'unica query. Inoltre, vengono montati contemporaneamente tutti i modelli delle serie temporali.

Nella seguente query SQL standard, la clausola CREATE MODEL crea e addestra un insieme di modelli denominato bqml_tutorial.nyc_citibike_arima_model_group.

 #standardSQL
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

La clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica che stai creando un insieme di modelli ARIMA_PLUS della serie temporale basati su ARIMA. Oltre a time_series_timestamp_col e time_series_data_col, devi specificare time_series_id_col, che viene utilizzato per annotare diverse serie temporali di input. L'opzione auto_arima_max_order controlla lo spazio di ricerca per l'ottimizzazione degli iperparametri nell'algoritmo auto.ARIMA. Infine, l'istruzione CREATE MODEL utilizza decompose_time_series=TRUE per impostazione predefinita e gli utenti possono comprendere meglio come vengono analizzate le serie temporali nella pipeline di addestramento recuperando i risultati della scomposizione.

La clausola SELECT ... FROM ... GROUP BY ... indica che crei più serie temporali e ognuna è associata a una start_station_name diversa. Per semplicità, utilizza la clausola WHERE ... LIKE ... per limitare le stazioni di partenza a quelle con Central Park nei loro nomi.

Per eseguire la query CREATE MODEL per creare e addestrare il modello, procedi nel seguente modo:

  1. In Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    #standardSQL
    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
    
  3. Fai clic su Esegui.

    La query richiede circa 24 secondi, dopodiché il tuo modello (nyc_citibike_arima_model_group) viene visualizzato nel pannello di navigazione. Poiché la query utilizza un'istruzione CREATE MODEL, non vede i risultati della query.

Passaggio 6: esamina le metriche di valutazione dell'insieme di modelli delle serie temporali

Dopo aver creato i modelli, puoi utilizzare la funzione ML.ARIMA_EVALUATE per visualizzare le metriche di valutazione di tutti i modelli creati.

Nella seguente query SQL standard, la clausola FROM utilizza la funzione ML.ARIMA_EVALUATE per il tuo modello bqml_tutorial.nyc_citibike_arima_model_group. Le metriche di valutazione dipendono solo dall'input dell'addestramento, quindi il tuo modello è l'unico input.

Per eseguire la query ML.ARIMA_EVALUATE, segui questi passaggi:

  1. In Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_EVALUATE(MODEL bqml_tutorial.nyc_citibike_arima_model_group)
    
  3. Fai clic su Esegui.

  4. La query richiede meno di un secondo. Una volta completata la query, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbero avere il seguente aspetto:

    ML.EVALUATE.

    I risultati includono le seguenti colonne:

    • start_station_name
    • non_seasonal_p
    • non_seasonal_d
    • non_seasonal_q
    • has_drift
    • log_likelihood
    • AIC
    • variance
    • seasonal_periods
    • has_holiday_effect
    • has_spikes_and_dips
    • has_step_changes
    • error_message

    La prima colonna start_station_name riporta la serie temporale in base alla quale viene adattato ogni modello della serie temporale. È uguale a quello specificato da time_series_id_col.

    Le quattro colonne seguenti (non_seasonal_p, non_seasonal_d, non_seasonal_q e has_drift) definiscono un modello ARIMA nella pipeline di addestramento. Le tre metriche successive (log_likelihood, AIC e variance) sono pertinenti al processo di adattamento del modello ARIMA. Il processo di adattamento determina il modello ARIMA migliore utilizzando l'algoritmo auto.ARIMA, uno per ogni serie temporale.

    Le colonne has_holiday_effect, has_spikes_and_dips e has_step_changes vengono compilate solo quando decompose_time_series=TRUE.

    La colonna seasonal_periods rappresenta il pattern stagionale nella serie temporale di input. Ogni serie temporale può avere modelli stagionali diversi. Ad esempio, dalla figura puoi vedere che una serie temporale ha un modello annuale, mentre altre no.

Passaggio 7: controlla i coefficienti dei tuoi modelli

La funzione ML.ARIMA_COEFFICIENTS viene utilizzata per recuperare i coefficienti del modello del tuo modello ARIMA_PLUS, bqml_tutorial.nyc_citibike_arima_model_group. ML.ARIMA_COEFFICIENTS utilizza il modello come unico input.

Per eseguire la query ML.ARIMA_COEFFICIENTS, segui questi passaggi:

  1. In Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    #standardSQL
    SELECT
     *
    FROM
     ML.ARIMA_COEFFICIENTS(MODEL bqml_tutorial.nyc_citibike_arima_model_group)
    
  3. Fai clic su Esegui.

    La query richiede meno di un secondo. I risultati dovrebbero essere simili a quelli del seguente screenshot:

    ML.ARIMA_COEFFICIENTS.

    I risultati includono le seguenti colonne:

    • start_station_name
    • ar_coefficients
    • ma_coefficients
    • intercept_or_drift

    La prima colonna start_station_name riporta la serie temporale in base alla quale viene adattato ogni modello della serie temporale.

    ar_coefficients mostra i coefficienti del modello della parte autoresponsiva (AR) del modello ARIMA. Analogamente, ma_coefficients mostra il coefficiente di modello della parte della media mobile (MA). Sono entrambi array che hanno rispettivamente non_seasonal_p e non_seasonal_q. intercept_or_drift è il termine costante nel modello ARIMA.

Passaggio 8: utilizza il modello per prevedere più serie temporali contemporaneamente con le spiegazioni

La funzione ML.EXPLAIN_FORECAST prevede i valori delle serie temporali future con un intervallo di previsione utilizzando il modello, bqml_tutorial.nyc_citibike_arima_model_group e, allo stesso tempo, restituisce tutti i componenti separati della serie temporale.

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 una confidenza del 90%. La funzione ML.EXPLAIN_FORECAST prende il modello, insieme a un paio di argomenti facoltativi.

Per eseguire la query ML.EXPLAIN_FORECAST, segui questi passaggi:

  1. In Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

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

    La query richiede meno di un secondo. I risultati dovrebbero avere il seguente aspetto:

    ML.EXPLAIN_FORECAST output1. ML.EXPLAIN_FORECAST output2.

    I risultati includono le seguenti colonne:

    • start_station_name
    • time_series_timestamp
    • time_series_type
    • time_series_data
    • time_series_adjusted_data
    • standard_error
    • confidence_level
    • prediction_interval_lower_bound
    • prediction_interval_lower_bound
    • trend
    • seasonal_period_yearly
    • seasonal_period_quarterly
    • seasonal_period_monthly
    • seasonal_period_weekly
    • seasonal_period_daily
    • holiday_effect
    • spikes_and_dips
    • step_changes

    Le righe di output sono ordinate per start_station_name e, per ogni elemento start_station_name, le righe di output sono nell'ordine cronologico di time_series_timestamp. I diversi componenti sono elencati come colonne dell'output. Per ulteriori informazioni, consulta la definizione di ML.EXPLAIN_FORECAST.

(Facoltativo) Passaggio 9: utilizza il modello per prevedere più serie temporali contemporaneamente

La funzione ML.FORECAST può essere utilizzata anche per prevedere i valori delle serie temporali future con un intervallo di previsione utilizzando il tuo modello: bqml_tutorial.nyc_citibike_arima_model_group.

Come ML.EXPLAIN_FORECAST, la clausola STRUCT(3 AS horizon, 0.9 AS confidence_level) indica che per ogni serie temporale la query prevede tre punti temporali futuri e genera un intervallo di previsione con una confidenza del 90%.

La funzione ML.FORECAST prende il modello, oltre a un paio di argomenti facoltativi.

Per eseguire la query ML.FORECAST, segui questi passaggi:

  1. In Cloud Console, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query SQL standard nell'area di testo Editor query.

    #standardSQL
    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.

    La query richiede meno di un secondo. I risultati dovrebbero avere il seguente aspetto:

    ML.FORECAST.

    I risultati includono le seguenti colonne:

    • start_station_name
    • forecast_timestamp
    • forecast_value
    • standard_error
    • confidence_level
    • prediction_interval_lower_bound
    • prediction_interval_upper_bound
    • confidence_interval_lower_bound (a breve da ritirare)
    • confidence_interval_upper_bound (a breve da ritirare)

    La prima colonna, start_station_name, indica la serie temporale in base alla quale viene adattato ogni modello della serie temporale. Ogni start_station_name ha un orizzonte numero di righe per i risultati di previsione.

    Per ogni elemento start_station_name, le righe di output vengono ordinate in ordine cronologico di forecast_timestamp. Nelle previsioni di serie temporali, l'intervallo di previsione, acquisito dai limiti inferiore e superiore, è importante quanto il forecast_value. forecast_value è il punto centrale dell'intervallo di previsione. L'intervallo di previsione dipende da standard_error e confidence_level.

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 creato.
  • In alternativa, puoi mantenere il progetto ed eliminare il set di dati.

Eliminazione del set di dati

L'eliminazione del progetto comporta la rimozione di tutti i set di dati e di tutte le tabelle al suo interno. Se preferisci riutilizzare il progetto, puoi eliminare il set di dati che hai creato in questo tutorial:

  1. Se necessario, apri la pagina BigQuery in Cloud Console.

    Vai alla pagina BigQuery

  2. Nella 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.

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

Eliminazione del progetto

Per eliminare il progetto:

  1. In Cloud Console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto da eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi