Ce tutoriel vous explique comment utiliser un modèle de série temporelle univariée pour prévoir la valeur future d'une colonne donnée, en fonction des valeurs historiques de cette colonne.
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 sur une ville, les données de prévision contiennent des prévisions pour tous les points de temps de la ville A, puis les valeurs de prévision pour tous les points de temps de la ville B, et ainsi de suite.
Ce tutoriel utilise les données de la table publique bigquery-public-data.new_york.citibike_trips
. Ce tableau contient des informations sur les trajets Citi Bike effectués dans la ville de New York.
Avant de lire ce tutoriel, nous vous recommandons vivement de consulter la page Prévoir une série temporelle unique avec un modèle univarié.
Objectifs
Ce tutoriel vous guide à travers les tâches suivantes:
- Créer un modèle de série temporelle pour prévoir le nombre de trajets à vélo à l'aide de l'instruction
CREATE MODEL
- Évaluer les informations de la moyenne mobile intégrée autorégressive (ARIMA) dans le modèle à l'aide de la fonction
ML.ARIMA_EVALUATE
. - Inspecter les coefficients du modèle à l'aide de la fonction
ML.ARIMA_COEFFICIENTS
- Récupération des informations sur les trajets à vélo prévus à partir du modèle à l'aide de la fonction
ML.FORECAST
. - Récupération des composants de la série temporelle, tels que la saisonnalité et la tendance, à l'aide de la fonction
ML.EXPLAIN_FORECAST
. Vous pouvez inspecter ces composants de série temporelle afin d'expliquer les valeurs prévues.
Coûts
Ce tutoriel utilise des composants facturables de Google Cloud, dont :
- 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.
Autorisations requises
- Pour créer l'ensemble de données, vous devez disposer de l'autorisation IAM
bigquery.datasets.create
. Pour créer la ressource de connexion, vous devez disposer des autorisations suivantes :
bigquery.connections.create
bigquery.connections.get
Pour créer le modèle, vous avez besoin des autorisations suivantes :
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
Pour exécuter une inférence, vous devez disposer des autorisations suivantes :
bigquery.models.getData
bigquery.jobs.create
Pour plus d'informations sur les rôles et les autorisations IAM dans BigQuery, consultez la page Présentation d'IAM.
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.
Visualiser les données d'entrée
Avant de créer le modèle, vous pouvez éventuellement visualiser vos données de série temporelle d'entrée pour avoir une idée de la distribution. Pour ce faire, utilisez Looker Studio.
L'instruction SELECT
de la requête suivante utilise la fonction EXTRACT
pour extraire les informations de date de la colonne starttime
. La requête utilise la clause COUNT(*)
pour obtenir le nombre quotidien total de trajets Citi Bike.
Pour visualiser les données de série temporelle:
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 EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date;
Une fois la requête terminée, cliquez sur Explorer les données > Explorer avec Looker Studio. Looker Studio s'ouvre dans un nouvel onglet. Procédez comme suit dans le nouvel onglet.
Dans Looker Studio, cliquez sur Insérer > Graphique de séries temporelles.
Dans le volet Graphique, sélectionnez l'onglet Configuration.
Dans la section Métrique, ajoutez le champ num_trips, puis supprimez la métrique par défaut Record Count (Nombre d'enregistrements). Le graphique obtenu ressemble à ceci:
Créer le modèle de série temporelle
Vous souhaitez prévoir le nombre de trajets à vélo pour chaque station Citi Bike, ce qui nécessite de nombreux modèles de séries temporelles, un pour chaque station Citi Bike incluse dans les données d'entrée. Pour ce faire, vous pouvez écrire plusieurs requêtes CREATE MODEL
, mais cela peut être un processus fastidieux et chronophage, en particulier lorsque vous avez un grand nombre de séries temporelles. Vous pouvez plutôt utiliser une seule requête pour créer et ajuster un ensemble de modèles de séries temporelles afin de prévoir plusieurs séries temporelles à la fois.
Dans la requête suivante, la clause OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indique que vous créez un modèle de série temporelle basé sur ARIMA. Vous utilisez l'option time_series_id_col
de l'instruction CREATE MODEL
pour spécifier une ou plusieurs colonnes des données d'entrée pour lesquelles vous souhaitez obtenir des prévisions, dans ce cas la borne Citi Bike, représentée par la colonne start_station_name
. Vous utilisez la clause WHERE
pour limiter les stations de départ à celles dont le nom contient Central Park
. L'option auto_arima_max_order
de l'instruction CREATE MODEL
contrôle l'espace de recherche pour le réglage des hyperparamètres dans l'algorithme auto.ARIMA
. L'option decompose_time_series
de l'instruction CREATE MODEL
est définie par défaut sur TRUE
, de sorte que des informations sur les données de série temporelle soient renvoyées lorsque vous évaluez le modèle à l'étape suivante.
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.nyc_citibike_arima_model_group` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_name', auto_arima_max_order = 5 ) AS SELECT start_station_name, EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` WHERE start_station_name LIKE '%Central Park%' GROUP BY start_station_name, date;
L'exécution de la requête prend environ 24 secondes, puis le modèle
nyc_citibike_arima_model_group
s'affiche dans le volet Explorer. Comme la requête utilise une instructionCREATE MODEL
, les résultats de la requête ne sont pas affichés.
Cette requête crée douze modèles de série temporelle, un pour chacune des douze stations de départ Citi Bike dans les données d'entrée. Le coût temporel, d'environ 24 secondes, est seulement 1,4 fois plus élevé que celui de la création d'un modèle de série temporelle unique en raison du parallélisme. Toutefois, si vous supprimez la clause WHERE ... LIKE ...
, il y aura plus de 600 séries temporelles à prévoir, et elles ne seront pas prévues entièrement en parallèle en raison des limites de capacité des emplacements. Dans ce cas, l'exécution de la requête prendrait environ 15 minutes. Pour réduire l'environnement d'exécution de la requête au risque de compromettre légèrement la qualité du modèle, vous pouvez réduire la valeur par défaut (5
) de l'option auto_arima_max_order
en la faisant passer à 3
ou 4
.
Cela réduit l'espace de recherche des réglages d'hyperparamètres dans l'algorithme auto.ARIMA
. Pour en savoir plus, consultez Large-scale time series forecasting best practices
.
Évaluer le modèle
Évaluez le modèle de série temporelle à l'aide de la fonction ML.ARIMA_EVALUATE
. La fonction ML.ARIMA_EVALUATE
affiche les métriques d'évaluation générées pour le modèle lors du processus de réglage automatique des hyperparamètres.
Pour évaluer 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.ARIMA_EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
Les résultats doivent se présenter sous la forme suivante :
La colonne
start_station_name
identifie la colonne de données d'entrée pour laquelle des séries temporelles ont été créées. Il s'agit de la colonne que vous avez spécifiée dans l'optiontime_series_id_col
de l'instructionCREATE MODEL
.Les colonnes de sortie
non_seasonal_p
,non_seasonal_d
,non_seasonal_q
ethas_drift
définissent un modèle ARIMA dans le pipeline d'entraînement. Les colonnes de sortielog_likelihood
,AIC
etvariance
sont pertinentes pour le processus d'ajustement du modèle ARIMA.Le processus d'ajustement détermine le meilleur modèle ARIMA à l'aide de l'algorithmeauto.ARIMA
, un algorithme pour chaque série temporelle.L'algorithme
auto.ARIMA
utilise le test KPSS pour déterminer la meilleure valeur pournon_seasonal_d
, qui est1
dans ce cas. Lorsquenon_seasonal_d
est1
, l'algorithme auto.ARIMA entraîne 42 modèles ARIMA candidats différents en parallèle. Dans cet exemple, les 42 modèles candidats sont valides. La sortie contient donc 42 lignes, une pour chaque modèle ARIMA candidat. Si certains des modèles ne sont pas valides, ils sont exclus de la sortie. Ces modèles candidats sont renvoyé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
contient des informations sur la tendance saisonnière identifiée dans les données de la série temporelle. Chaque série temporelle peut présenter des tendances saisonnières différentes. Par exemple, la figure montre qu'une série temporelle présente une tendance annuelle, contrairement aux autres.Les colonnes
has_holiday_effect
,has_spikes_and_dips
ethas_step_changes
ne sont renseignées que lorsquedecompose_time_series=TRUE
. Ces colonnes reflètent également des informations sur les données de série temporelle d'entrée et ne sont pas liées à la modélisation ARIMA. Ces colonnes ont également les mêmes valeurs pour toutes les lignes de sortie.Pour en savoir plus sur les colonnes de sortie, consultez la section Fonction
ML.ARIMA_EVALUATE
.
Tandis que auto.ARIMA
évalue des dizaines de modèles ARIMA candidats pour chaque série temporelle, par défaut, ML.ARIMA_EVALUATE
ne génère que les informations du meilleur modèle afin que la table de sortie soit compacte. Pour afficher tous les modèles candidats, vous pouvez définir l'argument show_all_candidate_model
de la fonction ML.ARIMA_EVALUATE
sur TRUE
.
Inspecter les coefficients du modèle
Inspectez les coefficients du modèle de série temporelle à l'aide de la fonction ML.ARIMA_COEFFICIENTS
.
Pour récupérer les coefficients 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.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
L'exécution de la requête prend moins d'une seconde. Le résultat doit ressembler à ce qui suit :
La colonne
start_station_name
identifie la colonne de données d'entrée pour laquelle des séries temporelles ont été créées. Il s'agit de la colonne que vous avez spécifiée dans l'optiontime_series_id_col
de l'instructionCREATE MODEL
.La colonne de sortie
ar_coefficients
affiche les coefficients de modèle de la partie autorégressive (AR) du modèle ARIMA. De même, la colonne de sortiema_coefficients
affiche les coefficients de modèle de la partie moyenne mobile (MA) du modèle ARIMA. Ces deux colonnes contiennent des valeurs de tableau, dont la longueur est respectivement égale ànon_seasonal_p
etnon_seasonal_q
. La valeurintercept_or_drift
correspond au terme constant dans le modèle ARIMA.Pour en savoir plus sur les colonnes de sortie, consultez la section Fonction
ML.ARIMA_COEFFICIENTS
.
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(3 AS horizon, 0.9 AS confidence_level)
indique que la requête prévoit trois points temporels futurs et génère un intervalle de prédiction avec un niveau de confiance de 90 %.
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.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level))
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 :
La première colonne (
start_station_name
) annote la série temporelle par rapport à laquelle chaque modèle de série temporelle est ajusté. Chaquestart_station_name
comporte trois lignes de résultats de prévision, comme spécifié par la valeurhorizon
.Pour chaque
start_station_name
, les lignes de sortie sont triées dans l'ordre chronologique par la 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 Fonction
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. Si vous souhaitez simplement renvoyer des données de prévision, utilisez plutôt la fonction ML.FORECAST
, comme indiqué dans la section Utiliser le modèle pour prévoir des données.
La clause STRUCT(3 AS horizon, 0.9 AS confidence_level)
utilisée dans la fonction ML.EXPLAIN_FORECAST
indique que la requête prévoit trois points temporels futurs et génère un intervalle de prédiction avec un indice de confiance de 90 %.
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.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level));
L'exécution de la requête prend moins d'une seconde. Les résultats doivent se présenter sous la forme suivante :
Les milliers de premières lignes renvoyées sont toutes des données d'historique. Vous devez faire défiler les résultats pour afficher les données de prévision.
Les lignes de sortie sont d'abord triées par
start_station_name
, puis par ordre chronologique en fonction de la valeur de la colonnetime_series_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.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 Supprimer l'ensemble de données pour supprimer l'ensemble de données, la table, ainsi que 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 une seule série temporelle avec un modèle multivarié.
- Découvrez comment mettre à l'échelle un modèle univarié lors de la prévision de plusieurs séries temporelles sur de nombreuses 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.