Prévoir plusieurs séries temporelles avec un modèle multivarié


Ce tutoriel vous explique comment utiliser un modèle de séries temporelles multivariées pour prévoir la valeur future d'une colonne donnée, en fonction de la valeur historique de plusieurs éléments d'entrée.

Ce tutoriel présente des prévisions pour plusieurs séries temporelles. Les valeurs prévues sont calculées pour chaque point temporel, pour chaque valeur d'une ou de plusieurs colonnes spécifiées. Par exemple, si vous souhaitez prévoir la météo et que vous spécifiez une colonne contenant des données d'état, les données de prévision contiennent des prévisions pour tous les points temporels de l'État A, puis les valeurs prévues pour tous les points temporels de l'État B, et ainsi de suite. Si vous souhaitez prévoir la météo et spécifier des colonnes contenant des données sur les États et les villes, les données de prévision contiendront des prévisions pour tous les points de temps pour l'État A et la ville A, puis les valeurs de prévision pour tous les points de temps pour l'État A et la ville B, et ainsi de suite.

Ce tutoriel utilise les données des tables publiques bigquery-public-data.iowa_liquor_sales.sales et bigquery-public-data.covid19_weathersource_com.postal_code_day_history. La table bigquery-public-data.iowa_liquor_sales.sales contient des données sur les ventes d'alcool collectées dans plusieurs villes de l'Iowa. Le tableau bigquery-public-data.covid19_weathersource_com.postal_code_day_history contient des données météorologiques historiques, telles que la température et l'humidité, provenant du monde entier.

Avant de lire ce tutoriel, nous vous recommandons vivement de lire Prévoir une seule série temporelle avec un modèle multivarié.

Objectifs

Ce tutoriel vous guide à travers les tâches suivantes:

  • Créer un modèle de série temporelle pour prévoir les commandes d'un magasin d'alcools à l'aide de l'instruction CREATE MODEL.
  • Récupération des valeurs de commande prévues à partir du modèle à l'aide de la fonction ML.FORECAST.
  • Récupérer des composants de la série temporelle, tels que la saisonnalité, la tendance et les attributions de caractéristiques, à l'aide de la fonction ML.EXPLAIN_FORECAST. Vous pouvez inspecter ces composants de série temporelle afin d'expliquer les valeurs prévues.
  • Évaluez la précision du modèle à l'aide de la fonction ML.EVALUATE.
  • Détectez les anomalies à l'aide du modèle avec la fonction ML.DETECT_ANOMALIES.

Coûts

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

  • BigQuery
  • BigQuery ML

Pour plus d'informations sur les coûts de BigQuery, consultez la page Tarifs de BigQuery.

Pour en savoir plus sur les coûts associés à BigQuery ML, consultez la page Tarifs de BigQuery ML.

Avant de commencer

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  6. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet préexistant, accédez à .

    Enable the BigQuery API.

    Enable the API

Créer un ensemble de données

Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :

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

    Accéder à la page "BigQuery"

  2. Dans le volet Explorateur, cliquez sur le nom de votre projet.

  3. Cliquez sur Afficher les actions > Créer un ensemble de données.

    Créer l'ensemble de données

  4. Sur la page Créer un ensemble de données, procédez comme suit :

    • Dans le champ ID de l'ensemble de données, saisissez bqml_tutorial.

    • Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).

      Les ensembles de données publics sont stockés dans l'emplacement multirégional US. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.

    • Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.

      Créer une page d'ensemble de données

Créer une table de données d'entrée

Créez un tableau de données que vous pourrez utiliser pour entraîner et évaluer le modèle. Ce tableau combine les colonnes des tables bigquery-public-data.iowa_liquor_sales.sales et bigquery-public-data.covid19_weathersource_com.postal_code_day_history pour analyser l'impact de la météo sur le type et le nombre d'articles commandés par les magasins d'alcool. Vous créez également les colonnes supplémentaires suivantes, que vous pouvez utiliser comme variables d'entrée pour le modèle:

  • date: date de la commande
  • store_number: numéro unique du magasin ayant passé la commande
  • item_number: numéro unique de l'article commandé
  • bottles_sold: nombre de bouteilles commandées pour l'article associé
  • temperature: température moyenne au magasin à la date de la commande
  • humidity: humidité moyenne au magasin à la date de la commande

Pour créer le tableau de données d'entrée, procédez comme suit:

  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:

    CREATE OR REPLACE TABLE
      `bqml_tutorial.iowa_liquor_sales_with_weather` AS
    WITH
      sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          bottles_sold,
          SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code
        FROM
          `bigquery-public-data.iowa_liquor_sales.sales` AS sales
        WHERE
          SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL
      ),
      aggregated_sales AS (
        SELECT
          DATE,
          store_number,
          item_number,
          ANY_VALUE(zip_code) AS zip_code,
          SUM(bottles_sold) AS bottles_sold,
        FROM
          sales
        GROUP BY
          DATE,
          store_number,
          item_number
      ),
      weather AS (
        SELECT
          DATE,
          SAFE_CAST(postal_code AS INT64) AS zip_code,
          avg_temperature_air_2m_f AS temperature,
          avg_humidity_specific_2m_gpkg AS humidity,
        FROM
          `bigquery-public-data.covid19_weathersource_com.postal_code_day_history`
        WHERE
          SAFE_CAST(postal_code AS INT64) IS NOT NULL
      ),
      avg_weather AS (
        SELECT
          DATE,
          zip_code,
          AVG(temperature) AS temperature,
          AVG(humidity) AS humidity,
        FROM
          weather
        GROUP BY
          DATE,
          zip_code
      )
    SELECT
      aggregated_sales.date,
      aggregated_sales.store_number,
      aggregated_sales.item_number,
      aggregated_sales.bottles_sold,
      avg_weather.temperature AS temperature,
      avg_weather.humidity AS humidity
    FROM
      aggregated_sales
      LEFT JOIN avg_weather ON aggregated_sales.zip_code=avg_weather.zip_code
      AND aggregated_sales.DATE=avg_weather.DATE;

Créer le modèle de série temporelle

Créez un modèle de série temporelle pour prévoir le nombre de bouteilles vendues pour chaque combinaison d'ID de magasin et d'article, pour chaque date du tableau bqml_tutorial.iowa_liquor_sales_with_weather avant le 1er septembre 2022. Utilisez la température et l'humidité moyennes du magasin pour chaque date comme caractéristiques à évaluer lors des prévisions. La table bqml_tutorial.iowa_liquor_sales_with_weather contient environ un million de combinaisons distinctes de numéro d'article et de numéro de magasin, ce qui signifie qu'il existe un million de séries temporelles différentes à prévoir.

Pour créer le modèle, procédez comme suit:

  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:

    CREATE
    OR REPLACE MODEL `bqml_tutorial.multi_time_series_arimax_model`
    OPTIONS(
      model_type = 'ARIMA_PLUS_XREG',
      time_series_id_col = ['store_number', 'item_number'],
      time_series_data_col = 'bottles_sold',
      time_series_timestamp_col = 'date'
    )
    AS SELECT
      *
    FROM
      `bqml_tutorial.iowa_liquor_sales_with_weather`
    WHERE
      DATE < DATE('2022-09-01');

    L'exécution de la requête prend environ 38 minutes, puis le modèle multi_time_series_arimax_model s'affiche dans le volet Explorer. Étant donné que la requête utilise une instruction CREATE MODEL pour créer un modèle, les résultats de la requête ne sont pas affichés.

Utiliser le modèle pour prévoir des données

Prévoyez les valeurs futures de la série temporelle à l'aide de la fonction ML.FORECAST.

Dans la requête GoogleSQL suivante, la clause STRUCT(5 AS horizon, 0.8 AS confidence_level) indique que la requête prévoit cinq points temporels futurs et génère un intervalle de prédiction avec un niveau de confiance de 80 %.

La signature des données des données d'entrée pour la fonction ML.FORECAST est la même que celle des données d'entraînement que vous avez utilisées pour créer le modèle. La colonne bottles_sold n'est pas incluse dans l'entrée, car il s'agit des données que le modèle tente de prévoir.

Pour prévoir des données avec le modèle, procédez comme suit:

  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:

    SELECT
      *
    FROM
      ML.FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE>=DATE('2022-09-01')
        )
      );

    Le résultat doit ressembler à ce qui suit :

    Données de prévision du nombre de bouteilles vendues.

    Les lignes de sortie sont triées par valeur store_number, puis par valeur item_ID, puis par ordre chronologique par valeur de la colonne forecast_timestamp. Dans les prévisions de séries temporelles, l'intervalle de prédiction, représenté par les valeurs des colonnes prediction_interval_lower_bound et prediction_interval_upper_bound, est aussi important que la valeur de la colonne forecast_value. La valeur forecast_value correspond au point central de l'intervalle de prédiction. L'intervalle de prédiction dépend des valeurs des colonnes standard_error et confidence_level.

    Pour en savoir plus sur les colonnes de sortie, consultez la section ML.FORECAST.

Expliquer les résultats des prévisions

Vous pouvez obtenir des métriques d'explicabilité en plus des données de prévision à l'aide de la fonction ML.EXPLAIN_FORECAST. La fonction ML.EXPLAIN_FORECAST prédit les valeurs futures des séries temporelles et renvoie également tous les composants distincts de la série temporelle.

Comme la fonction ML.FORECAST, la clause STRUCT(5 AS horizon, 0.8 AS confidence_level) utilisée dans la fonction ML.EXPLAIN_FORECAST indique que la requête prévoit 30 points temporels futurs et génère un intervalle de prédiction avec un indice de confiance de 80 %.

La fonction ML.EXPLAIN_FORECAST fournit à la fois des données historiques et des données de prévision. Pour n'afficher que les données de prévision, ajoutez l'option time_series_type à la requête et spécifiez forecast comme valeur de l'option.

Pour expliquer les résultats du modèle, procédez comme suit:

  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:

    SELECT
      *
    FROM
      ML.EXPLAIN_FORECAST (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (5 AS horizon, 0.8 AS confidence_level),
        (
          SELECT
            * EXCEPT (bottles_sold)
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Le résultat doit ressembler à ce qui suit :

    Les neuf premières colonnes de sortie des données et des explications de prévision. Colonnes de sortie 10 à 17 des données et des explications de prévision. Les six dernières colonnes de sortie des données et des explications de prévision.

    Les lignes de sortie sont triées chronologiquement par la valeur de la colonne time_series_timestamp.

    Pour en savoir plus sur les colonnes de sortie, consultez la section ML.EXPLAIN_FORECAST.

Évaluer la précision des prévisions

Évaluez la justesse des prévisions du modèle en l'exécutant sur des données sur lesquelles il n'a pas été entraîné. Pour ce faire, utilisez la fonction ML.EVALUATE. La fonction ML.EVALUATE évalue chaque série temporelle indépendamment.

Dans la requête GoogleSQL suivante, la deuxième instruction SELECT fournit les données avec les caractéristiques futures, qui sont utilisées pour prévoir les valeurs futures à comparer aux données réelles.

Pour évaluer la justesse du modèle, procédez comme suit:

  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:

    SELECT
      *
    FROM
      ML.EVALUATE (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        (
          SELECT
            *
          FROM
           `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Les résultats doivent ressembler à ce qui suit:

    Métriques d&#39;évaluation du modèle.

    Pour en savoir plus sur les colonnes de sortie, consultez la section ML.EVALUATE.

Utiliser le modèle pour détecter les anomalies

Détectez les anomalies dans les données d'entraînement à l'aide de la fonction ML.DETECT_ANOMALIES.

Dans la requête suivante, la clause STRUCT(0.95 AS anomaly_prob_threshold) permet à la fonction ML.DETECT_ANOMALIES d'identifier les points de données anormaux avec un niveau de confiance de 95 %.

Pour détecter des anomalies dans les données d'entraînement, procédez comme suit:

  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:

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold)
      );

    Les résultats doivent ressembler à ce qui suit:

    Informations sur la détection d&#39;anomalies pour les données d&#39;entraînement.

    La colonne anomaly_probability des résultats identifie la probabilité qu'une valeur de colonne bottles_sold donnée soit anormale.

    Pour en savoir plus sur les colonnes de sortie, consultez la section ML.DETECT_ANOMALIES.

Détecter les anomalies dans les nouvelles données

Détectez les anomalies dans les nouvelles données en fournissant des données d'entrée à la fonction ML.DETECT_ANOMALIES. Les nouvelles données doivent avoir la même signature de données que les données d'entraînement.

Pour détecter les anomalies dans les nouvelles données, procédez comme suit:

  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:

    SELECT
      *
    FROM
      ML.DETECT_ANOMALIES (
        model `bqml_tutorial.multi_time_series_arimax_model`,
        STRUCT (0.95 AS anomaly_prob_threshold),
        (
          SELECT
            *
          FROM
            `bqml_tutorial.iowa_liquor_sales_with_weather`
          WHERE
            DATE >= DATE('2022-09-01')
        )
      );

    Les résultats doivent ressembler à ce qui suit:

    Informations sur la détection d&#39;anomalies pour les nouvelles données.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

  • Supprimez le projet que vous avez créé.
  • Ou conservez le projet et supprimez l'ensemble de données.

Supprimer l'ensemble de données

Si vous supprimez votre projet, tous les ensembles de données et toutes les tables qui lui sont associés sont également supprimés. Si vous préférez réutiliser le projet, vous pouvez supprimer l'ensemble de données que vous avez créé dans ce tutoriel :

  1. Si nécessaire, ouvrez la page BigQuery dans la consoleGoogle Cloud .

    Accéder à la page "BigQuery"

  2. Dans le panneau de navigation, cliquez sur l'ensemble de données bqml_tutorial que vous avez créé.

  3. Cliquez sur Delete dataset (Supprimer l'ensemble de données) dans la partie droite de la fenêtre. Cette action supprime l'ensemble de données, la table et toutes les données.

  4. Dans la boîte de dialogue Supprimer l'ensemble de données, confirmez la commande de suppression en saisissant le nom de votre ensemble de données (bqml_tutorial), puis cliquez sur Supprimer.

Supprimer votre projet

Pour supprimer le projet :

  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.

Étape suivante