Prevedi una singola serie temporale con un modello multivariato TimesFM

Questo tutorial ti insegna a eseguire previsioni multivariate in una singola serie temporale utilizzando la AI.FORECAST funzione con il TimesFM 3.0 modello integrato in BigQuery ML. La previsione multivariata ti aiuta a migliorare l'accuratezza delle previsioni incorporando altre variabili che influenzano il target.

Questo tutorial mostra come prevedere le vendite di vodka e whisky incorporando i valori storici delle transazioni (una covariata passata) e se la data è un fine settimana (una covariata futura).

Obiettivi

  • Prepara un unico set di dati unificato per la previsione multivariata.
  • Utilizza la funzione AI.FORECAST con il modello TimesFM 3.0 per generare previsioni.

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.

Prima di eseguire una previsione, assicurati che i tuoi dati soddisfino i seguenti requisiti:

  • Righe storiche: contengono valori non nulli per timestamp, target e covariate passate.
  • Righe future: contengono valori non nulli solo per i timestamp e le covariate future. Le colonne target e le colonne delle covariate passate devono essere impostate su NULL per queste righe future.

La tabella di input deve contenere colonne con i seguenti dati:

  • La data delle vendite.
  • Il numero di bottiglie di vodka vendute in quella data. Questa è una colonna target.
  • Il numero di bottiglie di whisky vendute in quella data. Questa è una colonna target.
  • Il valore medio delle transazioni in quella data. Questa è una covariata passata utilizzata nella previsione.
  • Se la data è un fine settimana. Si tratta di una covariata futura utilizzata nella previsione.

Prevedi la singola serie temporale multivariata

La seguente query prevede il numero di bottiglie di vodka e whisky vendute per le prime due settimane di luglio 2023 nel negozio numero 2633. Utilizza il valore medio della transazione come covariata passata e se la data è un fine settimana come covariata futura.

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:

    WITH historical_sales AS (
      SELECT
        date AS sales_date,
        store_number,
        SUM(CASE WHEN category_name LIKE '%VODKA%' THEN bottles_sold ELSE 0 END) AS vodka_bottles,
        SUM(CASE WHEN category_name LIKE '%WHISKEY%' THEN bottles_sold ELSE 0 END) AS whiskey_bottles,
        AVG(sale_dollars) AS avg_transaction_value,                          -- Past covariate
        IF(EXTRACT(DAYOFWEEK FROM date) IN (1, 7), 1.0, 0.0) AS is_weekend   -- Future covariate
      FROM `bigquery-public-data.iowa_liquor_sales.sales`
      WHERE date BETWEEN '2023-01-01' AND '2023-06-30'
        AND store_number = '2633'
      GROUP BY sales_date, store_number
    ),
    future_horizon AS (
      SELECT
        future_date AS sales_date,
        store_number,
        CAST(NULL AS INT64) AS vodka_bottles,
        CAST(NULL AS INT64) AS whiskey_bottles,
        CAST(NULL AS FLOAT64) AS avg_transaction_value,
        IF(EXTRACT(DAYOFWEEK FROM future_date) IN (1, 7), 1.0, 0.0) AS is_weekend
      FROM UNNEST(GENERATE_DATE_ARRAY('2023-07-01', '2023-07-14')) AS future_date
      CROSS JOIN (SELECT DISTINCT store_number FROM historical_sales)
    ),
    combined_sales AS (
      SELECT * FROM historical_sales
      UNION ALL
      SELECT * FROM future_horizon
    )
    SELECT
      FORMAT_DATE('%Y-%m-%d', sales_date) AS sales_date,
      vodka_bottles.value AS vodka_value,
      vodka_bottles.prediction_interval_lower_bound AS vodka_lower,
      vodka_bottles.prediction_interval_upper_bound AS vodka_upper,
      whiskey_bottles.value AS whiskey_value,
      whiskey_bottles.prediction_interval_lower_bound AS whiskey_lower,
      whiskey_bottles.prediction_interval_upper_bound AS whiskey_upper
    FROM AI.FORECAST(
      TABLE combined_sales,
      model => 'TimesFM 3.0',
      timestamp_col => 'sales_date',
      target_cols => ['vodka_bottles', 'whiskey_bottles'],
      past_covariate_cols => ['avg_transaction_value'],
      future_covariate_cols => ['is_weekend'],
      id_cols => ['store_number'],
      horizon => 14,
      confidence_level => 0.90
    );
    

L'output è simile al seguente, con valori arrotondati per chiarezza:

+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| sales_date | vodka_value | vodka_lower | vodka_upper | whiskey_value | whiskey_lower | whiskey_upper |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 2023-07-01 | 408         | -334        | 1977        | 21            | -34           | 113           |
| 2023-07-02 | 806         | -281        | 2992        | 29            | -23           | 149           |
| ...        | ...         | ...         | ...         | ...           | ...           | ...           |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+

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