Prevedi più serie temporali con un modello multivariato TimesFM

Questo tutorial ti insegna a eseguire previsioni multivariate su più serie temporali utilizzando la funzione AI.FORECAST con il TimesFM 3.0 modello integrato in BigQuery ML. La previsione multivariata ti aiuta a migliorare l'accuratezza delle previsioni incorporando altre variabili (covariate) che influenzano il target.

Se specifichi le colonne identificatore, puoi generare previsioni per più entità distinte contemporaneamente. Questo tutorial mostra come prevedere le corse e le tariffe dei taxi di New York per diverse zone di partenza incorporando i dati storici sulla distanza delle corse, che sono una covariata passata.

Obiettivi

  • Prepara un set di dati unificato per più serie temporali.
  • Genera previsioni per i dati dei taxi di New York utilizzando la funzione AI.FORECAST con il modello TimesFM 3.0.

Costi

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

  • BigQuery
  • BigQuery ML

Per saperne di più, consulta le pagine relative ai prezzi di BigQuery e ai 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 senza costi 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Abilita l'API BigQuery, se non è già abilitata.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    Abilitare l'API

    Per i nuovi progetti, l'API BigQuery viene abilitata automaticamente.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per completare le attività di questo tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per completare le attività di questo tutorial. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:

Autorizzazioni obbligatorie

Per completare le attività di questo tutorial sono richieste le seguenti autorizzazioni:

  • Crea il set di dati: bigquery.datasets.create
  • Crea il modello:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Esegui l'inferenza:
    • bigquery.models.getData
    • bigquery.jobs.create

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

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

Preparare i dati di input

A differenza di altri modelli multivariati che potrebbero richiedere tabelle separate per le covariate storiche e future, la funzione AI.FORECAST con TimesFM 3.0 prevede una singola tabella o query di input.

Per una previsione di più serie temporali, i dati devono includere una o più colonne identificatore per separare i dati in serie temporali distinte. In questo esempio, una serie temporale contiene i dati per la località di ritiro 132 (aeroporto JFK) e l'altra serie temporale contiene i dati per la località di ritiro 138 (aeroporto LaGuardia). Assicurati che i dati soddisfino i seguenti requisiti per ogni singola serie temporale:

  • Righe storiche: contengono valori non nulli per timestamp, target e covariate passate.

Poiché questo esempio non utilizza covariate future, la query di input deve fornire solo dati storici. La tabella di input deve contenere colonne con i seguenti dati:

  • La data della corsa in taxi.
  • La posizione di ritiro: 132 o 138.
  • Il numero di viaggi in quella data. Questa è una colonna target.
  • L'importo medio della tariffa in quella data. Questa è una colonna target.
  • La distanza media dei viaggi in quella data. Questa è una colonna di covariata passata utilizzata nella previsione.

Prevedi le serie temporali multivariate multiple

La seguente query prevede il numero di corse e la tariffa media al giorno per i prossimi 14 giorni per le zone di partenza JFK e LaGuardia. Definisce past_cov_avg_distance come una funzionalità nota solo storicamente. Devi fornire l'argomento id_cols in modo che il modello sappia come separare le diverse serie temporali.

Segui questi passaggi per prevedere i dati con il modello TimesFM 3.0:

  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
      pickup_location_id,
      FORMAT_DATE("%Y-%m-%d", pickup_date) AS pickup_date,
      # Extract the forecast value and prediction intervals for the number of trips target
      target_num_trips.value AS forecasted_num_trips,
      target_num_trips.prediction_interval_lower_bound AS num_trips_lower,
      target_num_trips.prediction_interval_upper_bound AS num_trips_upper,
      # Extract the forecast value and prediction intervals for the average fare target
      target_avg_fare.value AS forecasted_avg_fare,
      target_avg_fare.prediction_interval_lower_bound AS avg_fare_lower,
      target_avg_fare.prediction_interval_upper_bound AS avg_fare_upper
    FROM AI.FORECAST(
      (
        SELECT
          DATE(pickup_datetime) AS pickup_date,
          pickup_location_id,
          COUNT(*) AS target_num_trips,
          AVG(fare_amount) AS target_avg_fare,
          AVG(trip_distance) AS past_cov_avg_distance
        FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2022`
        WHERE pickup_datetime >= "2022-01-01" AND pickup_datetime < "2022-04-01"
          AND pickup_location_id IN ("132", "138") -- JFK and LaGuardia Airports
        GROUP BY 1, 2
      ),
      model => "TimesFM 3.0",
      target_cols => ["target_num_trips", "target_avg_fare"],
      past_covariate_cols => ["past_cov_avg_distance"],
      timestamp_col => "pickup_date",
      id_cols => ["pickup_location_id"],
      horizon => 14
    )
    ORDER BY pickup_date;
    

Il risultato è simile al seguente, con i valori arrotondati per chiarezza:

+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+
| pickup_location_id | pickup_date | forecasted_num_trips | num_trips_lower | num_trips_upper | forecasted_avg_fare | avg_fare_lower | avg_fare_upper |
+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+
| 132                | 2022-04-01  | 5240                 | 4633            | 5842            | 47                  | 46             | 48             |
| 138                | 2022-04-01  | 3451                 | 2848            | 4008            | 32                  | 31             | 34             |
| ...                | ...         | ...                  | ...             | ...             | ...                 | ...            | ...            |
+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+

I risultati mostrano il numero previsto di corse e l'importo medio della tariffa per i prossimi 14 giorni nelle zone di partenza di JFK e LaGuardia. I risultati includono anche i limiti inferiore e superiore di un intervallo di previsione del 95% per ogni valore previsto.

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.

Elimina il progetto

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

    Vai a Gestisci risorse

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

Passaggi successivi