Prévoir une seule série temporelle avec un modèle TimesFM multivarié

Ce tutoriel vous explique comment effectuer des prévisions multivariées sur une seule série temporelle à l'aide de la fonction AI.FORECAST avec le modèle TimesFM 3.0 intégré à BigQuery ML. La prévision multivariée vous aide à améliorer la précision des prévisions en intégrant d'autres variables qui influencent la cible.

Ce tutoriel explique comment prévoir les ventes de vodka et de whisky en intégrant les valeurs de transactions historiques (une covariable passée) et en indiquant si la date est un week-end (une covariable future).

Objectifs

  • Préparez un ensemble de données unifié unique pour les prévisions multivariées.
  • Utilisez la fonction AI.FORECAST avec le modèle TimesFM 3.0 pour générer des prédictions.

Coûts

Ce tutoriel utilise des composants facturables de Google Cloud, y compris les suivants :

  • BigQuery
  • BigQuery ML

Pour en savoir plus, consultez les pages Tarifs de BigQuery et Tarifs de BigQuery ML.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  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. Activez l'API BigQuery si elle ne l'est pas déjà.

    Rôles requis pour activer les API

    Pour activer les API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation grâce au rôle Propriétaire (roles/owner). Sinon, vous pouvez obtenir cette autorisation grâce au rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.

    Activer l'API

    Pour les nouveaux projets, l'API BigQuery est automatiquement activée.

Rôles requis

Pour obtenir les autorisations nécessaires pour effectuer les tâches de ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ces rôles prédéfinis contiennent les autorisations requises pour effectuer les tâches décrites dans ce tutoriel. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Vous devez disposer des autorisations suivantes pour effectuer les tâches décrites dans ce tutoriel :

  • Créez l'ensemble de données : bigquery.datasets.create
  • Créez le modèle :
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Exécutez l'inférence :
    • bigquery.models.getData
    • bigquery.jobs.create

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Pour plus d'informations sur les rôles et les autorisations IAM dans BigQuery, consultez la page Présentation d'IAM.

Préparer les données d'entrée

Contrairement à d'autres modèles multivariés qui peuvent nécessiter des tables distinctes pour les covariables historiques et futures, la fonction AI.FORECAST avec TimesFM 3.0 attend une seule table ou requête d'entrée.

Avant d'exécuter une prévision, assurez-vous que vos données répondent aux exigences suivantes :

  • Lignes historiques : contiennent des valeurs non nulles pour les codes temporels, les cibles et les covariables passées.
  • Lignes futures : ne contiennent que des valeurs non nulles pour les codes temporels et les covariables futures. Les colonnes cibles et les colonnes de covariables passées doivent être définies sur NULL pour ces futures lignes.

Votre tableau d'entrée doit contenir des colonnes avec les données suivantes :

  • Date des ventes.
  • Nombre de bouteilles de vodka vendues à cette date. Il s'agit d'une colonne cible.
  • Nombre de bouteilles de whisky vendues à cette date. Il s'agit d'une colonne cible.
  • Valeur moyenne des transactions à cette date. Il s'agit d'une covariable passée utilisée dans la prévision.
  • Si la date est un week-end. Il s'agit d'une covariable future utilisée dans la prévision.

Prévoir la série temporelle multivariée unique

La requête suivante prévoit le nombre de bouteilles de vodka et de whisky vendues au cours des deux premières semaines de juillet 2023 dans le magasin n° 2633. Il utilise la valeur moyenne des transactions comme covariable passée et le fait que la date soit un week-end comme covariable future.

Pour prévoir des données avec le modèle TimesFM 3.0 :

  1. Dans la console Google Cloud , accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, collez la requête suivante, puis cliquez sur Exécuter :

    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
    );
    

Le résultat ressemble à ce qui suit, avec des valeurs arrondies pour plus de clarté :

+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 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           |
| ...        | ...         | ...         | ...         | ...           | ...           | ...           |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.

Supprimer votre projet

  1. Dans la console Google Cloud , accédez à la page Gérer les ressources.

    Accéder à la page "Gérer les ressources"

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étapes suivantes