Dans ce tutoriel, vous allez apprendre à créer un modèle de série temporelle multivariée (ARIMA_PLUS_XREG
) pour effectuer des prévisions de séries temporelles à l'aide des exemples de tables suivants, issus de l'ensemble de données epa_historical_air_quality
:
- Exemple de table
epa_historical_air_quality.pm25_nonfrm_daily_summary
. - Exemple de table
epa_historical_air_quality.wind_daily_summary
. - Exemple de table
epa_historical_air_quality.temperature_daily_summary
.
L'ensemble de données epa_historical_air_quality
contient des informations quotidiennes sur la concentration de particules fines PM2,5, la température et la vitesse du vent, collectées par plusieurs villes américaines.
Objectifs
Dans ce tutoriel, vous allez utiliser :
- l'instruction
CREATE MODEL
, pour créer un modèle de série temporelle ; - la fonction
ML.ARIMA_EVALUATE
, pour inspecter les informations d'évaluation associées à la modélisation ARIMA dans le modèle ; - la fonction
ML.ARIMA_COEFFICIENTS
, pour inspecter les coefficients du modèle ; - la fonction
ML.FORECAST
, pour prévoir la concentration quotidienne de particules fines PM2,5 ; - la fonction
ML.EVALUATE
, pour évaluer le modèle avec des données réelles. - la fonction
ML.EXPLAIN_FORECAST
, pour récupérer divers composants de la série temporelle (par exemple, la saisonnalité, l'attribution de tendances et les caractéristiques) que vous pouvez utiliser pour expliquer les résultats des prévisions.
Coûts
Ce tutoriel utilise des composants facturables de Google Cloud, y compris :
- 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.
Étape 1 : 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.
Étape 2 : Créer une table de série temporelle avec des fonctionnalités supplémentaires
Les données de concentration de particules fines PM2.5, de température et de vitesse du vent sont situées dans des tables distinctes.
Pour simplifier les requêtes suivantes, vous pouvez créer une table bqml_tutorial.seattle_air_quality_daily
en vue de combiner ces tables, qui va contenir les colonnes suivantes :
- date : date de l'observation
- PM2.5 : concentration moyenne de particules fines PM2,5 enregistrée chaque jour
- wind_speed : vitesse moyenne du vent enregistrée chaque jour
- temperature : température la plus élevée enregistrée chaque jour
La nouvelle table contient des données quotidiennes enregistrées le 11-08-2009 et le 31-01-2022.
Dans la requête GoogleSQL suivante, la clause FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary
indique que vous interrogez les tables *_daily_summary
de l'ensemble de données epa_historical_air_quality
. Ces tables sont des tables partitionnées.
#standardSQL CREATE TABLE `bqml_tutorial.seattle_air_quality_daily` AS WITH pm25_daily AS ( SELECT avg(arithmetic_mean) AS pm25, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass' GROUP BY date_local ), wind_speed_daily AS ( SELECT avg(arithmetic_mean) AS wind_speed, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.wind_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant' GROUP BY date_local ), temperature_daily AS ( SELECT avg(first_max_value) AS temperature, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature' GROUP BY date_local ) SELECT pm25_daily.date AS date, pm25, wind_speed, temperature FROM pm25_daily JOIN wind_speed_daily USING (date) JOIN temperature_daily USING (date)
Pour exécuter la requête, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
Cliquez sur Exécuter.
Étape 3 (facultative) : Visualiser la série temporelle pour laquelle vous souhaitez effectuer des prévisions
Avant de créer le modèle, il est utile de voir à quoi ressemble votre série temporelle d'entrée. Pour ce faire, utilisez Looker Studio.
Dans la requête GoogleSQL suivante, la clause FROM bqml_tutorial.seattle_air_quality_daily
indique que vous interrogez la table seattle_air_quality_daily
dans l'ensemble de données bqml_tutorial
que vous venez de créer.
#standardSQL SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`
Pour exécuter la requête, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`
Cliquez sur Exécuter.
Une fois cette requête exécutée, la sortie ressemble à la capture d'écran suivante. Elle montre que cette série temporelle comporte 3 960 points de données. Cliquez sur le bouton Explorer les données, puis sur Explorer avec Looker Studio. Looker Studio s'ouvre dans un nouvel onglet. Procédez comme suit dans le nouvel onglet.
Dans le panneau Chart (Graphique), sélectionnez Time series chart (Graphique de séries temporelles) :
Dans le panneau CONFIGURATION situé sous le panneau Graphique, accédez à la section Métrique. Ajoutez les champs pm25, temperature et wind_speed, puis supprimez la métrique par défaut Nombre d'enregistrements. Vous pouvez également définir une plage de dates personnalisée, par exemple du 1er janvier 2019 au 31 décembre 2021, afin de raccourcir la série temporelle. Ce processus est illustré dans la figure suivante.
Une fois ces étapes terminées, le graphique suivant s'affiche. Il montre que la série temporelle d'entrée présente une tendance saisonnière hebdomadaire.
Étape 4 : Créer un modèle de série temporelle
Vous allez ensuite créer un modèle de série temporelle à l'aide des données sur la qualité de l'air présentées ci-dessus.
La requête GoogleSQL suivante crée un modèle permettant d'effectuer des prévisions sur la concentration moyenne de particules fines PM2,5 (pm25
).
La clause CREATE MODEL
crée et entraîne un modèle nommé bqml_tutorial.seattle_pm25_xreg_model
.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.seattle_pm25_xreg_model` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS_XREG', time_series_timestamp_col = 'date', time_series_data_col = 'pm25') AS SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31')
La clause OPTIONS(model_type='ARIMA_PLUS_XREG', time_series_timestamp_col='date', ...)
indique que vous créez un modèle ARIMA avec des régresseurs externes. Le paramètre auto_arima=TRUE
est défini par défaut ; l'algorithme auto.ARIMA
va donc régler automatiquement les hyperparamètres dans les modèles ARIMA_PLUS_XREG
. L'algorithme s'adapte à des dizaines de modèles candidats et choisit le meilleur d'entre eux, qui présente l'AIC (Akaike information criterion) le plus faible.
De plus, comme la valeur par défaut est data_frequency='AUTO_FREQUENCY'
, le processus d'entraînement déduit automatiquement la fréquence des données de la série temporelle d'entrée.
Exécutez la requête CREATE MODEL
pour créer et entraîner votre modèle :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
Cliquez sur Exécuter.
L'exécution de la requête prend environ 20 secondes, puis votre modèle (
seattle_pm25_xreg_model
) s'affiche dans le panneau de navigation. É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.
Étape 5 : Inspecter les métriques d'évaluation de tous les modèles évalués
Après avoir créé votre modèle, vous pouvez utiliser la fonction ML.ARIMA_EVALUATE
pour afficher les métriques d'évaluation de tous les modèles candidats évalués lors du processus de réglage automatique des hyperparamètres.
Dans la requête GoogleSQL suivante, la clause FROM
utilise la fonction ML.ARIMA_EVALUATE
sur votre modèle bqml_tutorial.seattle_pm25_xreg_model
. Par défaut, cette requête renvoie les métriques d'évaluation de tous les modèles candidats.
Pour exécuter la requête ML.ARIMA_EVALUATE
, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`)
Cliquez sur Exécuter.
Lorsque la requête est terminée, cliquez sur l'onglet Résultats sous la zone de texte de la requête. Les résultats doivent ressembler à la capture d'écran suivante :
Les résultats incluent les colonnes suivantes :
non_seasonal_p
non_seasonal_d
non_seasonal_q
has_drift
log_likelihood
AIC
variance
seasonal_periods
has_holiday_effect
has_spikes_and_dips
has_step_changes
error_message
Les quatre colonnes suivantes (
non_seasonal_{p,d,q}
ethas_drift
) définissent un modèle ARIMA dans le pipeline d'entraînement. Les trois métriques qui les suivent (log_likelihood
,AIC
etvariance
) sont pertinentes pour le processus d'ajustement du modèle ARIMA.L'algorithme
auto.ARIMA
utilise d'abord le test KPSS pour déterminer que la meilleure valeur pournon_seasonal_d
est 1. Lorsque la valeur denon_seasonal_d
est égale à 1, auto.ARIMA entraîne 42 modèles ARIMA candidats différents en parallèle. Notez que lorsquenon_seasonal_d
n'est pas égal à 1, auto.ARIMA entraîne 21 modèles candidats différents. Dans cet exemple, les 42 modèles candidats sont valides. Par conséquent, la sortie contient 42 lignes, chaque ligne étant associée à un modèle ARIMA candidat. Notez que pour certaines séries temporelles, certains modèles candidats ne sont pas valides, car ils sont soit non inversibles, soit non stationnaires. Ces modèles non valides sont exclus de la sortie, ce qui signifie qu'elle comporte moins de 42 lignes. Ces modèles candidats sont triés par ordre croissant de l'AIC. Le modèle de la première ligne présente l'AIC le plus bas, et il est considéré comme le meilleur modèle. Ce meilleur modèle est enregistré en tant que modèle final. Il est utilisé lorsque vous appelezML.FORECAST
,ML.EVALUATE
etML.ARIMA_COEFFICIENTS
comme indiqué dans les étapes suivantes.La colonne
seasonal_periods
concerne la tendance saisonnière dans la série temporelle d'entrée. Il n'a rien à voir avec la modélisation ARIMA. Par conséquent, il présente la même valeur sur toutes les lignes de sortie. Il signale un motif hebdomadaire, ce qui est conforme à nos attentes, comme décrit à l'étape 2 ci-dessus.Les colonnes
has_holiday_effect
,has_spikes_and_dips
ethas_step_changes
ne sont renseignées que lorsquedecompose_time_series=TRUE
. Elles concernent l'effet des jours fériés, les pics et baisses, ainsi que les modifications graduelles dans les séries temporelles d'entrée, qui ne sont pas liées à la modélisation ARIMA. Par conséquent, elles sont toutes identiques sur toutes les lignes de sortie, à l'exception de ces modèles défaillants.La colonne
error_message
indique que l'erreur possible est survenue lors du processus d'ajustementauto.ARIMA
. Cela peut s'expliquer par le fait que les colonnesnon_seasonal_p
,non_seasonal_d
,non_seasonal_q
ethas_drift
sélectionnées ne peuvent pas stabiliser la série temporelle. Pour récupérer le message d'erreur possible de tous les modèles candidats, définissezshow_all_candidate_models=true
.
Étape 6 : Inspecter les coefficients de votre modèle
La fonction ML.ARIMA_COEFFICIENTS
récupère les coefficients de votre modèle ARIMA_PLUS (bqml_tutorial.seattle_pm25_xreg_model
). ML.ARIMA_COEFFICIENTS
utilise le modèle comme seule entrée.
Exécutez la requête ML.ARIMA_COEFFICIENTS
:
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`)
Cliquez sur Exécuter.
Les résultats doivent se présenter sous la forme suivante :
Les résultats incluent les colonnes suivantes :
ar_coefficients
ma_coefficients
intercept_or_drift
processed_input
weight
category_weights.category
category_weights.weight
ar_coefficients
affiche les coefficients de modèle de la partie autorégressive (AR) du modèle ARIMA. De la même manière,ma_coefficients
affiche les coefficients de modèle de la partie moyenne mobile (MA, moving-average). Il s'agit de deux tableaux, dont la longueur est respectivement égale ànon_seasonal_p
etnon_seasonal_q
. D'après la sortie deML.ARIMA_EVALUATE
, le meilleur modèle de la ligne supérieure a une valeurnon_seasonal_p
de 0 et une valeurnon_seasonal_q
de 5. Par conséquent,ar_coefficients
est un tableau vide etma_coefficients
est un tableau de longueur 5.intercept_or_drift
est le terme constant dans le modèle ARIMA.processed_input
et les colonnesweight
etcategory_weights
correspondantes indiquent la pondération de chaque caractéristique et l'interception dans le modèle de régression linéaire. Si la caractéristique est une caractéristique numérique, la pondération se trouve dans la colonneweight
. Si la caractéristique est une caractéristique catégorielle,category_weights
est un tableau (ARRAY
) de typeSTRUCT
, oùSTRUCT
contient les noms et les pondérations des catégories.
Étape 7 : Utiliser votre modèle pour prévoir la série temporelle
La fonction ML.FORECAST
prévoit les valeurs futures de la série temporelle selon un intervalle de prédiction, à l'aide de votre modèle bqml_tutorial.seattle_pm25_xreg_model
et des valeurs futures des caractéristiques.
Dans la requête GoogleSQL suivante, la clause STRUCT(30 AS horizon, 0.8 AS confidence_level)
indique que la requête prévoit 30 points temporels futurs et génère un intervalle de prédiction avec un niveau de confiance de 80 %. La fonction ML.FORECAST
utilise le modèle, les valeurs futures des caractéristiques, ainsi que quelques arguments facultatifs.
Pour exécuter la requête ML.FORECAST
, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ))
Cliquez sur Exécuter.
Les résultats doivent se présenter sous la forme suivante :
Les résultats incluent les colonnes suivantes :
forecast_timestamp
forecast_value
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_upper_bound
Les lignes de sortie sont triées dans l'ordre chronologique de
forecast_timestamp
. Dans les prévisions de séries temporelles, l'intervalle de prédiction, délimité par les limites inférieure et supérieure, est aussi important queforecast_value
.forecast_value
est le point central de l'intervalle de prédiction. L'intervalle de prédiction dépend destandard_error
et deconfidence_level
.
Étape 8 : Évaluer la précision des prévisions avec des données réelles
Pour évaluer la précision des prévisions avec les données réelles, vous pouvez utiliser la fonction ML.EVALUATE
avec votre modèle, bqml_tutorial.seattle_pm25_xreg_model
, et la table contenant les données réelles.
Pour exécuter la requête ML.EVALUATE
, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, ( SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ), STRUCT( TRUE AS perform_aggregation, 30 AS horizon))
Le deuxième paramètre correspond aux données réelles pour les caractéristiques futures, qui permettent de prévoir les valeurs futures à comparer aux données réelles. Le troisième paramètre est un objet struct regroupant des paramètres pour cette fonction.
Cliquez sur Exécuter.
Les résultats doivent se présenter sous la forme suivante :
Étape 9 : Expliquer les résultats des prévisions
Pour comprendre comment les séries temporelles sont prévues, la fonction ML.EXPLAIN_FORECAST
prédit les valeurs futures des séries temporelles avec un intervalle de prédiction à l'aide de votre modèle, bqml_tutorial.seattle_pm25_xreg_model
, et renvoie dans le même temps tous les composants distincts de la série temporelle.
Comme la fonction ML.FORECAST
, la clause STRUCT(30 AS horizon, 0.8 AS confidence_level)
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
utilise le modèle, les valeurs futures des caractéristiques et quelques arguments facultatifs comme entrée.
Pour exécuter la requête ML.EXPLAIN_FORECAST
, procédez comme suit :
Dans la console Google Cloud, cliquez sur le bouton Saisir une nouvelle requête.
Saisissez la requête GoogleSQL suivante dans la zone de texte Éditeur de requête.
#standardSQL SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ))
Cliquez sur Exécuter.
L'exécution de la requête prend moins d'une seconde. Les résultats doivent se présenter sous la forme suivante :
Les résultats incluent les colonnes suivantes :
time_series_timestamp
time_series_type
time_series_data
time_series_adjusted_data
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_lower_bound
trend
seasonal_period_yearly
seasonal_period_quarterly
seasonal_period_monthly
seasonal_period_weekly
seasonal_period_daily
holiday_effect
spikes_and_dips
step_changes
residual
attribution_temperature
attribution_wind_speed
attribution___INTERCEPT__
Les lignes de sortie sont triées dans l'ordre chronologique de
time_series_timestamp
. Différents composants sont répertoriés sous forme de colonnes de sortie. Pour en savoir plus, consultez la sectionML.EXPLAIN_FORECAST
.
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 Cloud Console.
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 effectuer plusieurs prévisions de séries temporelles à l'aide d'une seule requête pour les trajets Citi Bike effectués dans la ville de New York.
- Découvrez comment accélérer ARIMA_PLUS pour prévoir un million de séries temporelles en quelques heures.
- Pour en savoir plus sur le machine learning, consultez le Cours d'initiation au Machine Learning.
- Pour obtenir plus d'informations sur BigQuery ML, consultez la page Présentation de BigQuery ML.
- Pour en savoir plus sur la console Google Cloud, consultez la page Utiliser la console Google Cloud.