Utiliser des jours fériés personnalisés dans un modèle de prévision de séries temporelles

Ce tutoriel vous explique comment effectuer les tâches suivantes :

  • Créer un modèle de prévision de séries temporelles ARIMA_PLUS qui n'utilise que des jours fériés intégrés.
  • Créer un modèle de prévision de séries temporelles ARIMA_PLUS qui 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 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.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

  • BigQuery : des frais sont facturés pour les données que vous traitez dans BigQuery.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Pour en savoir plus, consultez la page décrivant les tarifs de BigQuery.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez l'API BigQuery

    Activer l'API

  5. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activez l'API BigQuery

    Activer l'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

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 :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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 :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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 Looker Studio :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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;
    
  3. Dans la section Résultats de la requête, cliquez sur Explorer les données, puis sur Explorer avec Looker Studio. Looker Studio s'ouvre dans un nouvel onglet.

  4. Dans l'onglet Looker Studio, cliquez sur Ajouter un graphique, puis sur le graphique de séries temporelles :

    Ajouter un graphique "Série temporelle"

    Placez le graphique sur le rapport.

  5. Dans l'onglet Configuration du volet Graphique, cliquez sur Ajouter une métrique, puis sélectionnez adjusted_views_without_custom_holiday :

    Ajoutez une autre métrique

    Le graphique ressemble à ceci :

    Graphique de séries temporelles des résultats de prévision utilisant les jours fériés intégrés

    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.

    1. 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.

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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 Looker Studio :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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;
    
  3. Dans la section Résultats de la requête, cliquez sur Explorer les données, puis sur Explorer avec Looker Studio. Looker Studio s'ouvre dans un nouvel onglet.

  4. Dans l'onglet Looker Studio, cliquez sur Ajouter un graphique. Placez ensuite le graphique sur le rapport.

  5. 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 :

    Graphique de séries temporelles des résultats de prévision utilisant les jours fériés personnalisés

    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 :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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 :

    Résultats de la fonction ML.HOLIDAY_INFO

É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 :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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 :

    Résultats de la fonction ML.EXPLAIN_FORECAST

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 :

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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 :

    Résultats de la fonction ML.EXPLAIN_FORECAST

Effectuer un nettoyage

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.