Utiliser des jours fériés personnalisés dans un modèle de prévision de séries temporelles ARIMA_PLUS
Ce tutoriel vous explique comment effectuer les tâches suivantes :
- Créer un modèle de prévision de séries temporelles
ARIMA_PLUSqui n'utilise que des jours fériés intégrés. - Créer un modèle de prévision de séries temporelles
ARIMA_PLUSqui utilise des jours fériés personnalisés en plus des jours fériés intégrés. - Visualiser les résultats de prévision de ces modèles
- Inspecter un modèle pour afficher les jours fériés représentés.
- Évaluer les effets des jours fériés personnalisés sur les résultats de prévision.
- Comparer les performances du modèle qui n'utilise que des jours fériés intégrés à celles du modèle qui utilise des jours fériés personnalisés en plus des jours fériés intégrés.
Ce tutoriel utilise les tables publiques bigquery-public-data.wikipedia.pageviews_*.
Autorisations requises
Pour créer l'ensemble de données, vous devez disposer de l'autorisation IAM
bigquery.datasets.create.Pour créer le modèle, vous avez besoin des autorisations suivantes :
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Pour exécuter une inférence, vous devez disposer des autorisations suivantes :
bigquery.models.getDatabigquery.jobs.create
Pour plus d'informations sur les rôles et les autorisations IAM dans BigQuery, consultez la page Présentation d'IAM.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Cloud de Confiance by S3NS :
- BigQuery: You incur costs for the data you process in BigQuery.
Pour en savoir plus, consultez la page décrivant les tarifs de BigQuery.
Avant de commencer
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Créer un ensemble de données
Créez un ensemble de données BigQuery pour stocker votre modèle de ML.
Console
Dans la console Cloud de Confiance , 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 États-Unis.
Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.
bq
Pour créer un ensemble de données, utilisez la commande bq mk --dataset.
Créez un ensemble de données nommé
bqml_tutorialet définissez l'emplacement des données surUS.bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Vérifiez que l'ensemble de données a été créé :
bq ls
API
Appelez la méthode datasets.insert avec une ressource d'ensemble de données définie.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Préparer les données de séries temporelles
Agrégez les données d'affichage de la page Wikipédia Google I/O dans une seule table, regroupées par jour :
Accédez à la page BigQuery.
Dans le volet de l'éditeur, exécutez l'instruction SQL suivante :
CREATE OR REPLACE TABLE `bqml_tutorial.googleio_page_views` AS SELECT DATETIME_TRUNC(datehour, DAY) AS date, SUM(views) AS views FROM `bigquery-public-data.wikipedia.pageviews_*` WHERE datehour >= '2017-01-01' AND datehour < '2023-01-01' AND title = 'Google_I/O' GROUP BY DATETIME_TRUNC(datehour, DAY)
Créer un modèle de prévision de séries temporelles qui utilise des jours fériés intégrés
Créez un modèle qui prévoit les pages vues quotidiennement pour la page Wikipédia "Google I/O" en fonction des données des pages vues avant 2022 et en tenant compte des jours fériés intégrés :
Accédez à la page BigQuery.
Dans le volet de l'éditeur, exécutez l'instruction SQL suivante :
CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio` OPTIONS ( model_type = 'ARIMA_PLUS', holiday_region = 'US', time_series_timestamp_col = 'date', time_series_data_col = 'views', data_frequency = 'DAILY', horizon = 365) AS SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date < '2022-01-01';
Visualiser les résultats de prévision
Après avoir créé le modèle en utilisant les jours fériés intégrés, associez les données d'origine de la table bqml_tutorial.googleio_page_views à la valeur prévue de la fonction ML.EXPLAIN_FORECAST. Ensuite, visualisez-les dans Data Studio :
Accédez à la page BigQuery.
Dans le volet de l'éditeur, exécutez l'instruction SQL suivante :
SELECT original.date, original.views AS original_views, explain_forecast.time_series_adjusted_data AS adjusted_views_without_custom_holiday, FROM `bqml_tutorial.googleio_page_views` original INNER JOIN ( SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.forecast_googleio`, STRUCT(365 AS horizon)) ) explain_forecast ON TIMESTAMP(original.date) = explain_forecast.time_series_timestamp ORDER BY original.date;
Dans le volet Résultats de la requête, cliquez sur Ouvrir dans > Data Studio. Data Studio s'ouvre dans un nouvel onglet.
Dans l'onglet Data Studio, cliquez sur Ajouter un graphique, puis sur le graphique de séries temporelles :
Placez le graphique sur le rapport.
Dans l'onglet Configuration du volet Graphique, cliquez sur Ajouter une métrique, puis sélectionnez adjusted_views_without_custom_holiday :
Le graphique ressemble à ceci :
Vous pouvez constater que le modèle de prévision capture assez bien la tendance générale. Cependant, il ne capture pas l'augmentation de trafic lié aux événements Google I/O précédents et ne peut pas générer de prévision précise.
- Les sections suivantes expliquent comment traiter certaines de ces limites.
Créer un modèle de prévision de séries temporelles qui utilise des jours fériés intégrés et des jours fériés personnalisés
Comme vous pouvez le voir dans l'historique Google I/O, l'événement Google I/O s'est produit à différentes dates entre 2017 et 2022. Pour tenir compte de cette variante, créez un modèle de prévision des pages vues pour la page Wikipédia "Google I/O" en 2022, en fonction des données des pages vues avant 2022 et en utilisant les jours fériés personnalisés pour représenter. l'événement Google I/O de chaque année. Dans ce modèle, vous ajustez également la période des effets des jours fériés à trois jours autour de la date de l'événement, afin de mieux capturer le trafic potentiel de la page avant et après l'événement.
Accédez à la page BigQuery.
Dans le volet de l'éditeur, exécutez l'instruction SQL suivante :
CREATE OR REPLACE MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday` OPTIONS ( model_type = 'ARIMA_PLUS', holiday_region = 'US', time_series_timestamp_col = 'date', time_series_data_col = 'views', data_frequency = 'DAILY', horizon = 365) AS ( training_data AS ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date < '2022-01-01' ), custom_holiday AS ( SELECT 'US' AS region, 'GoogleIO' AS holiday_name, primary_date, 1 AS preholiday_days, 2 AS postholiday_days FROM UNNEST( [ DATE('2017-05-17'), DATE('2018-05-08'), DATE('2019-05-07'), -- cancelled in 2020 due to pandemic DATE('2021-05-18'), DATE('2022-05-11')]) AS primary_date ) );
Visualiser les résultats de prévision
Après avoir créé le modèle en utilisant les jours fériés personnalisés, associez les données d'origine de la table bqml_tutorial.googleio_page_views à la valeur prévue de la fonction ML.EXPLAIN_FORECAST. Ensuite, visualisez-les dans Data Studio :
Accédez à la page BigQuery.
Dans le volet de l'éditeur, exécutez l'instruction SQL suivante :
SELECT original.date, original.views AS original_views, explain_forecast.time_series_adjusted_data AS adjusted_views_with_custom_holiday, FROM `bqml_tutorial.googleio_page_views` original INNER JOIN ( SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`, STRUCT(365 AS horizon)) ) explain_forecast ON TIMESTAMP(original.date) = explain_forecast.time_series_timestamp ORDER BY original.date;
Dans le volet Résultats de la requête, cliquez sur Explorer les données, puis sur Explorer avec Data Studio. Data Studio s'ouvre dans un nouvel onglet.
Dans l'onglet Data Studio, cliquez sur Ajouter un graphique. Placez ensuite le graphique sur le rapport.
Dans l'onglet Configuration du volet Graphique, cliquez sur Ajouter une métrique, puis sélectionnez adjusted_views_with_custom_holiday :
Le graphique ressemble à ceci :
Comme vous pouvez le constater, les jours fériés personnalisés ont amélioré les performances du modèle de prévision. Il capture désormais efficacement l'augmentation des pages vues liée à Google I/O.
Inspecter les informations sur les jours fériés
Inspectez la liste des jours fériés pris en compte lors de la modélisation à l'aide de la fonction ML.HOLIDAY_INFO :
Accédez à la page BigQuery.
Dans le volet de l'éditeur, exécutez l'instruction SQL suivante :
SELECT * FROM ML.HOLIDAY_INFO( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
Les résultats incluent à la fois Google I/O et les jours fériés intégrés dans la liste des jours fériés :
Évaluer les effets des jours fériés personnalisés
Évaluez les effets des jours fériés personnalisés sur les résultats de prévision à l'aide de la fonction ML.EXPLAIN_FORECAST :
Accédez à la page BigQuery.
Dans le volet de l'éditeur, exécutez l'instruction SQL suivante :
SELECT time_series_timestamp, holiday_effect_GoogleIO, holiday_effect_US_Juneteenth, holiday_effect_Christmas, holiday_effect_NewYear FROM ML.EXPLAIN_FORECAST( model `bqml_tutorial.forecast_googleio_with_custom_holiday`, STRUCT(365 AS horizon)) WHERE holiday_effect != 0;
Les résultats montrent que Google I/O contribue en grande partie aux effets des jours fériés sur les résultats de prévision :
Comparer les performances des modèles
Utilisez la fonction ML.EVALUATE pour comparer les performances du premier modèle créé sans jours fériés personnalisés et du deuxième modèle créé avec des jours fériés personnalisés. Pour connaître les performances du deuxième modèle pour prévoir un jour férié personnalisé à venir, définissez la période sur la semaine de Google I/O en 2022 :
Accédez à la page BigQuery.
Dans le volet de l'éditeur, exécutez l'instruction SQL suivante :
SELECT "original" AS model_type, * FROM ml.evaluate( MODEL `bqml_tutorial.forecast_googleio`, ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date >= '2022-05-08' AND date < '2022-05-12' ), STRUCT( 365 AS horizon, TRUE AS perform_aggregation)) UNION ALL SELECT "with_custom_holiday" AS model_type, * FROM ml.evaluate( MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`, ( SELECT * FROM `bqml_tutorial.googleio_page_views` WHERE date >= '2022-05-08' AND date < '2022-05-12' ), STRUCT( 365 AS horizon, TRUE AS perform_aggregation));
Les résultats montrent que le deuxième modèle offre une amélioration significative des performances :
Effectuer un nettoyage
- Dans la console Cloud de Confiance , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.