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


In questo tutorial imparerai a creare un set di modelli di serie temporali Eseguire più previsioni di serie temporali con una singola query. Imparerai inoltre applicare diverse strategie di addestramento rapido per velocizzare significativamente della query e come valutare la precisione delle previsioni. Utilizzerai il Dati di new_york.citibike_trips. Questi dati contengono informazioni sui viaggi in Citi bike a New York.

Prima di leggere questo tutorial, ti consigliamo vivamente di leggere Previsione di un'unica serie temporale dai dati di Google Analytics.

Obiettivi

In questo tutorial utilizzerai quanto segue:

  • La CREATE MODEL per creare un modello di serie temporali o un insieme di modelli di serie temporali.
  • La ML.ARIMA_EVALUATE funzione: per valutare il modello.
  • La ML.ARIMA_COEFFICIENTS funzione: per esaminare i coefficienti del modello.
  • La ML.EXPLAIN_FORECAST funzione: per recuperare vari componenti delle serie temporali (come la stagionalità e tendenza) che possono essere utilizzate per spiegare i risultati della previsione.
  • Looker Studio: per visualizzare i risultati della previsione.
  • (Facoltativo) La ML.FORECAST funzione: 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 Prezzi di BigQuery.

Per ulteriori informazioni sui costi di BigQuery ML, consulta 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

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

    Go to project selector

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  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

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

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

    Vai alla pagina di 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, segui questi passaggi:

    • 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 vengono archiviati nell'US più regioni. 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.

(Facoltativo) Passaggio due: visualizza le serie temporali da prevedere

Prima di creare il modello, è utile vedere come le serie temporali di input aspetto. Puoi farlo utilizzando Looker Studio.

Nella query seguente, FROM bigquery-public-data.new_york.citibike_trips indica che viene eseguita una query sulla tabella citibike_trips nel new_yorkset di dati.

Nell'istruzione SELECT, la query utilizza la classe 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.

#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. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query GoogleSQL 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 puoi vedere che questa serie temporale contiene 1184 dati giornalieri. che durano più di 4 anni. Fai clic sul pulsante Esplora i dati e e poi Esplora con Looker Studio. Looker Studio si apre in una nuova scheda. Completa i seguenti passaggi nella nuova scheda.

    Output della query.

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

    Grafico_serie_temporali.

  5. Nel riquadro Dati, sotto il riquadro Grafico, vai a Metrica. . Aggiungi il campo num_trips e rimuovi la metrica predefinita Conteggio record:

    Time_series_data_fields.

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

    Visualizzazione_risultati.

Passaggio 3. Crea il modello delle serie temporali per eseguire la previsione di singole serie temporali

Successivamente, crea un modello di serie temporali utilizzando i dati relativi alle corse della Citi bike a New York.

La seguente query GoogleSQL crea un modello utilizzato per prevedere il totale giornaliero gite in bici. La 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

OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica che viene creata Basato su ARIMA un modello di serie temporale. Per impostazione predefinita, auto_arima=TRUE, quindi l'algoritmo auto.ARIMA regola automaticamente gli iperparametri in ARIMA_PLUS modelli. L'algoritmo si adatta a decine di modelli candidati e sceglie il migliore con il minimo Criterio delle informazioni Akaike (AIC). Inoltre, poiché il valore predefinito è data_frequency='AUTO_FREQUENCY', il processo di addestramento deduce automaticamente la frequenza dei dati della serie temporale di input. Infine, CREATE MODEL la dichiarazione utilizza decompose_time_series=TRUE per impostazione predefinita e gli utenti possono comprendere meglio come viene prevista la serie temporale recuperando i componenti separati delle serie temporali, come i periodi stagionali e l'effetto festivo.

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

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query GoogleSQL 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.

    Il completamento della query richiede circa 17 secondi, dopodiché il modello (nyc_citibike_arima_model) viene visualizzato nel pannello di navigazione. Poiché usa un'istruzione CREATE MODEL per creare un modello, non vedrai i risultati della query.

Passaggio 4. Prevedi le serie temporali e visualizza i risultati

Per spiegare come vengono previste le serie temporali, visualizza tutte le serie temporali secondarie quali la stagionalità e le tendenze, utilizzando ML.EXPLAIN_FORECAST personalizzata.

Per farlo, segui questi passaggi:

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query GoogleSQL 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 fai clic su Esplora con Looker Studio. Nel browser si apre una nuova scheda. Quindi, nel Nel riquadro Grafico, fai clic sull'icona Grafico delle serie temporali, come mostrato nel seguente screenshot.

    Grafico_serie_temporali.

  5. Nel riquadro Dati, segui questi passaggi:

    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

    Grafico_serie_temporali.

  6. Nel riquadro Stile, scorri verso il basso fino all'opzione Dati mancanti. Utilizzare Interruzioni di riga anziché Interruzioni di riga a zero.

    Stile_sezione.

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

    Visualizzazione_risultati.

Passaggio cinque: prevedi più serie temporali contemporaneamente

Potresti anche voler prevedere il numero totale giornaliero di viaggi a partire da diverse stazioni Citi bike. Per farlo, devi prevedere molte serie temporali. Puoi scrivere più query CREATE MODEL ma può essere un processo noioso e dispendioso in termini di tempo, soprattutto hai un numero elevato di serie temporali.

Per migliorare questo processo, BigQuery ML ti consente di creare per prevedere più serie temporali utilizzando una singola query. Inoltre, tutti i modelli delle serie temporali vengono montati contemporaneamente.

Nella seguente query GoogleSQL, CREATE MODEL di questa clausola crea e addestra un insieme di modelli denominati 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

OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica che viene creato un insieme Basato su ARIMA i modelli ARIMA_PLUS delle serie temporali. Oltre a time_series_timestamp_col e time_series_data_col, devi specificare time_series_id_col, che viene utilizzato per annota diverse serie temporali di input. L'opzione auto_arima_max_order consente di controllare 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 viene analizzata la serie temporale la pipeline di addestramento recuperando i risultati della decomposizione.

La clausola SELECT ... FROM ... GROUP BY ... indica che devi formare più serie temporali; ognuna di esse è associata a un diverso start_station_name. Per semplicità, utilizza la clausola WHERE ... LIKE ... limita le stazioni di partenza a quelle il cui nome include Central Park.

Per eseguire la query CREATE MODEL al fine di creare e addestrare il modello, utilizza seguenti passaggi:

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query GoogleSQL 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.

    Il completamento della query richiede circa 24 secondi, dopodiché il modello (nyc_citibike_arima_model_group) viene visualizzato nel pannello di navigazione. Poiché utilizza un'istruzione CREATE MODEL, i risultati della query non vengono visualizzati.

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

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

Nella seguente query GoogleSQL, la clausola FROM utilizza la classe ML.ARIMA_EVALUATE rispetto al tuo modello, bqml_tutorial.nyc_citibike_arima_model_group. La le metriche di valutazione dipendono solo dall'input di addestramento, quindi il modello solo input.

Per eseguire ML.ARIMA_EVALUATE usa questi passaggi:

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query GoogleSQL 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. Il completamento della query richiede meno di un secondo. Quando la query viene completa, fai clic sulla scheda Risultati sotto l'area di testo della query. I risultati dovrebbe avere il seguente aspetto:

    Output 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

    start_station_name, la prima colonna, annota le serie temporali che ogni modello di serie temporale. È uguale a quello specificato time_series_id_col.

    Le quattro colonne seguenti (non_seasonal_p, non_seasonal_d, non_seasonal_q e has_drift) definiscono un modello ARIMA nell'addestramento una pipeline o un blocco note personalizzato. Le tre metriche successive (log_likelihood, AIC e variance) sono pertinenti al processo di adattamento del modello ARIMA. La soluzione determina il miglior modello ARIMA utilizzando l'algoritmo auto.ARIMA, uno per ogni serie temporale.

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

    La colonna seasonal_periods è il pattern stagionale all'interno dell'ora di input Google Cloud. Ogni serie temporale può avere diversi schemi stagionali. Ad esempio: dalla figura, puoi vedere che una serie temporale ha un modello annuale, mentre altri no.

.

Passaggio 7: esamina i coefficienti dei tuoi modelli

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

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

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query GoogleSQL 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.

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

    Output ML.ARIMA_COEFFICIENTS.

    I risultati includono le seguenti colonne:

    • start_station_name
    • ar_coefficients
    • ma_coefficients
    • intercept_or_drift

    start_station_name, la prima colonna, annota le serie temporali che ogni modello di serie temporale.

    ar_coefficients mostra i coefficienti del modello dell'autoregressivo (AR) parte del modello ARIMA. Analogamente, ma_coefficients mostra il modello coefficienti della parte della media mobile (MA). Sono entrambi array, la cui lunghezza sono rispettivamente pari a non_seasonal_p e non_seasonal_q. La intercept_or_drift è il termine costante nel modello ARIMA.

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

La ML.EXPLAIN_FORECAST funzione prevede i valori di serie temporali future con un intervallo di previsione utilizzando il tuo modello, bqml_tutorial.nyc_citibike_arima_model_group, e contemporaneamente 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 di tempo futuri e genera un intervallo di previsione con una confidenza del 90%. La funzione ML.EXPLAIN_FORECAST prende il modello come coppia di argomenti facoltativi.

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

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query GoogleSQL 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.

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

    Output1 di ML.EXPLAIN_FORECAST. Output2 di ML.EXPLAIN_FORECAST.

    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
    • residual

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

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

La ML.FORECAST può essere utilizzata anche per prevedere valori di serie temporali future con un l'intervallo di previsione utilizzando il tuo modello, bqml_tutorial.nyc_citibike_arima_model_group.

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

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

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

  1. Nella console Google Cloud, fai clic sul pulsante Crea nuova query.

  2. Inserisci la seguente query GoogleSQL 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.

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

    Output 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 deprecato)
    • confidence_interval_upper_bound (a breve deprecato)

    La prima colonna, start_station_name, annota le serie temporali che ogni modello di serie temporale. Ogni start_station_name ha un horizon di righe per i risultati di previsione.

    Per ogni start_station_name, le righe di output sono ordinate in ordine cronologico nell'ordine di forecast_timestamp. Nella previsione di serie temporali, la previsione l'intervallo, acquisito dai limiti inferiore e superiore, è altrettanto importante come forecast_value. forecast_value è il punto centrale di l'intervallo di previsione. L'intervallo di previsione dipende dal valore 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 che hai creato.
  • In alternativa, puoi mantenere 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 nel nella console Google Cloud.

    Vai alla pagina di BigQuery

  2. Nel menu 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, digita per confermare il comando di eliminazione il nome del set di dati (bqml_tutorial), quindi fai clic su Elimina.

Elimina il progetto

Per eliminare il progetto:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi 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