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
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery est automatiquement activé dans les nouveaux projets.
Pour activer BigQuery dans un projet préexistant, accédez à .
Enable the BigQuery 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 :
Dans la console Google Cloud , accédez à la page BigQuery.
Dans le volet Explorateur, cliquez sur le nom de votre projet.
Cliquez sur
Afficher les actions > Créer un ensemble de données.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 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 commandestore_number
: numéro unique du magasin ayant passé la commandeitem_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 commandehumidity
: humidité moyenne au magasin à la date de la commande
Pour créer le tableau de données d'entrée, procédez comme suit:
Dans la console Google Cloud , accédez à la page BigQuery.
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:
Dans la console Google Cloud , accédez à la page BigQuery.
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 instructionCREATE 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:
Dans la console Google Cloud , accédez à la page BigQuery.
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 :
Les lignes de sortie sont triées par valeur
store_number
, puis par valeuritem_ID
, puis par ordre chronologique par valeur de la colonneforecast_timestamp
. Dans les prévisions de séries temporelles, l'intervalle de prédiction, représenté par les valeurs des colonnesprediction_interval_lower_bound
etprediction_interval_upper_bound
, est aussi important que la valeur de la colonneforecast_value
. La valeurforecast_value
correspond au point central de l'intervalle de prédiction. L'intervalle de prédiction dépend des valeurs des colonnesstandard_error
etconfidence_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:
Dans la console Google Cloud , accédez à la page BigQuery.
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 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:
Dans la console Google Cloud , accédez à la page BigQuery.
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:
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:
Dans la console Google Cloud , accédez à la page BigQuery.
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:
La colonne
anomaly_probability
des résultats identifie la probabilité qu'une valeur de colonnebottles_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:
Dans la console Google Cloud , accédez à la page BigQuery.
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:
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 :
Si nécessaire, ouvrez la page BigQuery dans la consoleGoogle Cloud .
Dans le panneau de navigation, cliquez sur l'ensemble de données bqml_tutorial que vous avez créé.
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.
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 :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Étape suivante
- Découvrez comment prévoir une seule série temporelle avec un modèle univarié.
- Découvrez comment prévoir plusieurs séries temporelles avec un modèle univarié.
- Découvrez comment mettre à l'échelle un modèle univarié lors de la prévision de plusieurs séries temporelles sur plusieurs lignes.
- Découvrez comment prévoir plusieurs séries temporelles hiérarchiquement à l'aide d'un modèle univarié.
- Pour obtenir une présentation de BigQuery ML, consultez la page Présentation de l'IA et du ML dans BigQuery.