Limitare i valori previsti per un modello di serie temporali

Questo tutorial insegna a utilizzare i limiti per restringere i risultati previsti restituiti da un modello di serie temporali. In questo tutorial, creerai due modelli di serie temporali sugli stessi dati: un modello che utilizza i limiti e un modello che non utilizza limiti. Questo ti consente di confrontare i risultati restituiti dai modelli e capire la differenza che fa la specifica dei limiti.

Puoi utilizzare new_york.citibike_trips per addestrare i modelli in questo tutorial. Questo set di dati contiene informazioni sui viaggi in Citi bike a New York.

Prima di seguire questo tutorial, dovresti avere familiarità con la previsione di serie temporali singole. Completa la Tutorial: previsione di serie temporali singole dai dati di Google Analytics per un'introduzione a questo argomento.

Autorizzazioni richieste

  • Per creare il set di dati, è necessario il bigquery.datasets.create Autorizzazione IAM.
  • Per creare la risorsa di connessione, devi disporre delle seguenti autorizzazioni:

    • bigquery.connections.create
    • bigquery.connections.get
  • Per creare il modello, devi disporre delle seguenti autorizzazioni:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Per eseguire l'inferenza, devi disporre delle seguenti autorizzazioni:

    • bigquery.models.getData
    • bigquery.jobs.create

Per ulteriori informazioni su ruoli e autorizzazioni IAM in per BigQuery, consulta Introduzione a IAM.

Obiettivi

In questo tutorial utilizzerai quanto segue:

  • La CREATE MODEL per creare un modello di serie temporali.
  • La ML.FORECAST funzione: per prevedere le visite totali giornaliere.

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. 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. Attiva l'API BigQuery.

    Abilita l'API

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

    Go to project selector

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

  7. Attiva l'API BigQuery.

    Abilita l'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 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.

Visualizza le serie temporali per cui vuoi eseguire la previsione

Prima di creare il modello, è utile vedere quale serie temporale di input .

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'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. I risultati della query sono simili ai seguenti.

    Output della query.

  4. Utilizzare la console Google Cloud per creare un grafico per i dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico. Nel riquadro Configurazione grafico, scegli Barra per Tipo di grafico:

    Visualizzazione_risultati.

crea un modello di serie temporali

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

La seguente query GoogleSQL crea un modello che prevede 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',
    time_series_id_col = 'start_station_id')
AS
SELECT
  EXTRACT(DATE FROM starttime) AS date,
  COUNT(*) AS num_trips,
  start_station_id
FROM
  `bigquery-public-data`.new_york.citibike_trips
WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
GROUP BY date, start_station_id;

OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica che viene creata Basato su ARIMA 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. L'istruzione CREATE MODEL utilizza decompose_time_series=TRUE per impostazione predefinita, quindi sia le parti della cronologia sia quelle di previsione della serie temporale vengono salvate nel modello. L'impostazione del parametro time_series_id_col = 'start_station_id' fa sì che il modello si adatti e preveda più serie temporali utilizzando una singola query basata su start_station_id. Puoi utilizzare queste informazioni per comprendere meglio come viene prevista la serie temporale recuperando i componenti delle serie temporali separate, come i periodi stagionali.

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'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',
      time_series_id_col = 'start_station_id')
    AS
    SELECT
    EXTRACT(DATE FROM starttime) AS date,
    COUNT(*) AS num_trips,
    start_station_id
    FROM
    `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date, start_station_id;
    
  3. Fai clic su Esegui.

    Il completamento della query richiede circa 80 secondi, dopodiché il modello (nyc_citibike_arima_model) viene visualizzato nel riquadro Explorer. Poiché usa un'istruzione CREATE MODEL per creare un modello, non sono presenti i risultati della query.

Prevedere le serie temporali e visualizzare i risultati

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

A tale scopo, procedi nel seguente modo:

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

  2. Inserisci la seguente query GoogleSQL nell'editor query.

    
    #standardSQL
    SELECT
    forecast_timestamp AS forecast_timestamp,
    start_station_id AS start_station_id,
    history_value AS history_value,
    forecast_value AS forecast_value
    FROM
    (
      (
         SELECT
         DATE(forecast_timestamp) AS forecast_timestamp,
         NULL AS history_value,
         forecast_value AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         ML.FORECAST(
            MODEL bqml_tutorial.`nyc_citibike_arima_model`,
            STRUCT(
               365 AS horizon,
               0.9 AS confidence_level))
      )
      UNION ALL
      (
         SELECT
         DATE(date_name) AS forecast_timestamp,
         num_trips AS history_value,
         NULL AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         (
            SELECT
               EXTRACT(DATE FROM starttime) AS date_name,
               COUNT(*) AS num_trips,
               start_station_id AS start_station_id
            FROM
               `bigquery-public-data`.new_york.citibike_trips
            WHERE
               starttime > '2014-07-11'
               AND starttime < '2015-02-11'
            GROUP BY
               date_name, start_station_id
         )
      )
    )
    WHERE start_station_id = 79
    ORDER BY
    forecast_timestamp, start_station_id
    
  3. Fai clic su Esegui. I risultati della query sono simili ai seguenti:

    grafico BQUI.

  4. Utilizzare la console Google Cloud per creare un grafico per i dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico:

    Visualizzazione_risultati.

Il grafico mostra che i valori previsti per il numero totale giornaliero di Citi Corse in bicicletta in cui start_station_id=79 sono numeri negativi, il che non è utile. L'utilizzo di un modello con limiti migliora i dati previsti.

Creare un modello di serie temporali con limiti

Creare un modello di serie temporali con dei limiti, utilizzando i dati sulle corse della Citi bike a New York.

La seguente query GoogleSQL crea un modello che prevede il totale giornaliero gite in bici. La CREATE MODEL crea e addestra un modello denominato bqml_tutorial.nyc_citibike_arima_model_with_limits. La differenza fondamentale tra questo modello e quello creato in precedenza è l'aggiunta dell'opzione forecast_limit_lower_bound=0. Questa opzione fa sì che il modello preveda solo valori superiori a 0, in base ai valori nella colonna specificata dall'argomento time_series_data_col, in questo caso num_trips.

#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',
      time_series_id_col = 'start_station_id',
      forecast_limit_lower_bound = 0)
   AS
   SELECT
   EXTRACT(DATE FROM starttime) AS date,
   COUNT(*) AS num_trips,
   start_station_id
   FROM
   `bigquery-public-data`.new_york.citibike_trips
   WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
   GROUP BY date, start_station_id;

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'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',
      time_series_id_col = 'start_station_id',
      forecast_limit_lower_bound = 0)
    AS
    SELECT
    EXTRACT(DATE FROM starttime) AS date,
    COUNT(*) AS num_trips,
    start_station_id
    FROM
    `bigquery-public-data`.new_york.citibike_trips
    WHERE starttime > '2014-07-11' AND starttime < '2015-02-11'
    GROUP BY date, start_station_id;
    
  3. Fai clic su Esegui.

    Il completamento della query richiede circa 100 secondi, dopodiché il modello (nyc_citibike_arima_model_with_limits) viene visualizzato nel riquadro Explorer. Poiché usa un'istruzione CREATE MODEL per creare un modello, non sono presenti i risultati della query.

Prevedere le serie temporali utilizzando il modello con limiti

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

  2. Inserisci la seguente query GoogleSQL nell'editor query.

    #standardSQL
    SELECT
    forecast_timestamp AS forecast_timestamp,
    start_station_id AS start_station_id,
    history_value AS history_value,
    forecast_value AS forecast_value
    FROM
    (
      (
         SELECT
         DATE(forecast_timestamp) AS forecast_timestamp,
         NULL AS history_value,
         forecast_value AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         ML.FORECAST(
            MODEL bqml_tutorial.`nyc_citibike_arima_model`,
            STRUCT(
               365 AS horizon,
               0.9 AS confidence_level))
      )
      UNION ALL
      (
         SELECT
         DATE(date_name) AS forecast_timestamp,
         num_trips AS history_value,
         NULL AS forecast_value,
         start_station_id AS start_station_id,
         FROM
         (
            SELECT
               EXTRACT(DATE FROM starttime) AS date_name,
               COUNT(*) AS num_trips,
               start_station_id AS start_station_id
            FROM
               `bigquery-public-data`.new_york.citibike_trips
            WHERE
               starttime > '2014-07-11'
               AND starttime < '2015-02-11'
            GROUP BY
               date_name, start_station_id
         )
      )
    )
    WHERE start_station_id = 79
    ORDER BY
    forecast_timestamp, start_station_id
    ORDER BY
    forecast_timestamp,start_station_id
    
  3. Fai clic su Esegui.

    grafico BQUI.

  4. Utilizzare la console Google Cloud per creare un grafico per i dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico:

    Visualizzazione_risultati.

Il modello ARIMA PLUS rileva che il numero totale giornaliero di viaggi in Citi bike in cui start_station_id=79 è in diminuzione. I valori di previsione futuri seguiranno questa tendenza e restituiranno numeri di previsione relativamente minori più a lungo nel futuro. Il grafico mostra che i valori previsti per il numero totale giornaliero di Citi Gite in bicicletta in cui i start_station_id=79 sono numeri positivi, il che è più utile. Il modello con limiti rileva che il numero totale giornaliero di viaggi in Citi bike in cui start_station_id=79 è in diminuzione, ma fornisce comunque valori di previsione significativi.

Come mostrato in questo tutorial, le opzioni forecast_limit_lower_bound e forecast_limit_upper_bound possono aiutarti a ottenere valori di previsione più significativi in scenari simili a quello mostrato qui, ad esempio durante la previsione dei prezzi delle azioni o dei numeri di vendita futuri.

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 sul lato destro della finestra. Questa azione elimina il set di dati, la tabella e tutti i dati.

  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.

Whatsnext