Limitare i valori previsti per un modello di serie temporale `ARIMA_PLUS`

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

Utilizzi i dati 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 una singola serie temporale. Completa il tutorial Previsione di una singola serie temporale dai dati di Google Analytics per un'introduzione a questo argomento.

Autorizzazioni richieste

  • Per creare il set di dati, devi disporre dell'autorizzazione IAM bigquery.datasets.create.

  • Per creare il modello, devi disporre delle seguenti autorizzazioni:

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

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

Per saperne di più sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Introduzione a IAM.

Obiettivi

In questo tutorial utilizzi:

  • L'istruzione CREATE MODEL per creare un modello di serie temporali.
  • La funzione ML.FORECAST: per prevedere il totale delle visite 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 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. Enable the BigQuery API.

    Enable the API

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

    Go to project selector

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

  7. Enable the BigQuery API.

    Enable the API

  8. Crea un set di dati

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

    Console

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

      Vai alla pagina BigQuery

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

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

      L'opzione di menu Crea 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).

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

    bq

    Per creare un nuovo set di dati, utilizza il comando bq mk con il flag --location. Per un elenco completo dei possibili parametri, consulta la documentazione di riferimento del comando bq mk --dataset.

    1. Crea un set di dati denominato bqml_tutorial con la località dei dati impostata su US e una descrizione di BigQuery ML tutorial dataset:

      bq --location=US mk -d \
       --description "BigQuery ML tutorial dataset." \
       bqml_tutorial

      Anziché utilizzare il flag --dataset, il comando utilizza la scorciatoia -d. Se ometti -d e --dataset, il comando crea un set di dati per impostazione predefinita.

    2. Verifica che il set di dati sia stato creato:

      bq ls

    API

    Chiama il metodo datasets.insert con una risorsa dataset definita.

    {
      "datasetReference": {
         "datasetId": "bqml_tutorial"
      }
    }

    BigQuery DataFrames

    Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

    import google.cloud.bigquery
    
    bqclient = google.cloud.bigquery.Client()
    bqclient.create_dataset("bqml_tutorial", exists_ok=True)

    Visualizza la serie temporale di cui vuoi eseguire la previsione

    Prima di creare il modello, è utile vedere l'aspetto della serie temporale di input.

    SQL

    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 sulla data dalla colonna starttime. La query utilizza la clausola COUNT(*) per ottenere il numero totale giornaliero di viaggi in 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:

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

    2. Inserisci la seguente query GoogleSQL nell'editor di 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 saranno simili ai seguenti.

      Output della query.

    4. Utilizza la console Google Cloud per rappresentare graficamente i dati delle serie temporali. Nel riquadro Risultati delle query, fai clic sulla scheda Grafico. Nel riquadro Configurazione grafico, scegli A barre per Tipo di grafico:

      Result_visualization.

    BigQuery DataFrames

    Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

    Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

    Nel seguente esempio, bigquery-public-data.new_york.citibike_trips indica che stai eseguendo una query sulla tabella citibike_trips nel set di dati new_york.

    import bigframes.pandas as bpd
    
    df = bpd.read_gbq("bigquery-public-data.new_york.citibike_trips")
    
    features = bpd.DataFrame(
        {
            "num_trips": df.starttime,
            "date": df["starttime"].dt.date,
        }
    )
    num_trips = features.groupby(["date"]).count()
    
    num_trips.plot.line()

    Il risultato è simile al seguente: Result_visualization

    Crea un modello di serie temporale

    Crea un modello di serie temporale utilizzando i dati dei viaggi di NYC Citi Bike.

    La seguente query GoogleSQL crea un modello che prevede il totale giornaliero dei viaggi in bicicletta. L'istruzione 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;

    La clausola OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...) indica che stai creando un modello di serie temporali basato su ARIMA. Per impostazione predefinita, auto_arima=TRUE, in modo che l'algoritmo auto.ARIMA ottimizzi automaticamente gli iperparametri nei modelli ARIMA_PLUS. L'algoritmo adatta decine di modelli candidati e sceglie il migliore con il criterio informativo di Akaike (AIC) più basso. Inoltre, poiché il valore predefinito è data_frequency='AUTO_FREQUENCY', la procedura 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 la cronologia che la 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 separati della serie temporale, 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 di 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 tuo modello (nyc_citibike_arima_model) viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzione CREATE MODEL per creare un modello, non sono presenti risultati della query.

    Prevedi la serie temporale e visualizza i risultati

    Per spiegare come viene prevista la serie temporale, visualizza tutti i componenti delle sottoserie temporali, come la stagionalità e la tendenza, utilizzando la funzione ML.FORECAST.

    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 di 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:

      BQUI_chart.

    4. Utilizza la console Google Cloud per rappresentare graficamente i dati delle serie temporali. Nel riquadro Risultati query, fai clic sulla scheda Grafico:

      Result_visualization.

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

    Crea un modello di serie temporali con limiti

    Crea un modello di serie temporale con limiti, utilizzando i dati dei viaggi di NYC Citi Bike.

    La seguente query GoogleSQL crea un modello che prevede il totale giornaliero dei viaggi in bicicletta. L'istruzione CREATE MODEL crea e addestra un modello denominato bqml_tutorial.nyc_citibike_arima_model_with_limits. La differenza principale tra questo modello e il modello che hai creato in precedenza è l'aggiunta dell'opzione forecast_limit_lower_bound=0. Questa opzione fa sì che il modello preveda solo valori maggiori di 0, in base ai valori della 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 di 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é la query utilizza un'istruzione CREATE MODEL per creare un modello, non sono presenti risultati della query.

    Prevedi la serie temporale 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 di 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.

      BQUI_chart.

    4. Utilizza la console Google Cloud per rappresentare graficamente i dati delle serie temporali. Nel riquadro Risultati query, fai clic sulla scheda Grafico:

      Result_visualization.

    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 daranno numeri di previsione relativamente più piccoli man mano che ci si sposta nel futuro. Il grafico mostra che i valori previsti per il numero totale giornaliero di viaggi in Citi Bike in cui start_station_id=79 sono numeri positivi, il che è più utile. Il modello con limiti rileva che il numero totale giornaliero di corse di 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 quando prevedi i prezzi delle azioni o i numeri di vendita futuri.

    Eliminare il set di dati

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

    1. Se necessario, apri la pagina BigQuery nella consoleGoogle Cloud .

      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 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, 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