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_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 le modèle, vous avez besoin des autorisations suivantes :

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 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 de Trusted Cloud by S3NSsuivants :

  • BigQuery: You incur costs for the data you process in BigQuery.

Vous pouvez obtenir une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Les nouveaux utilisateurs de Trusted 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. In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.

    Go to project selector

  2. Verify that billing is enabled for your Trusted Cloud project.

  3. Enable the BigQuery API.

    Enable the API

  4. Créer un ensemble de données

    Créez un ensemble de données BigQuery pour stocker votre modèle de ML.

    Console

    1. Dans la console Trusted 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.

      Option de menu "Créer un 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).

      • 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, exécutez la commande bq mk en spécifiant l'option --location. Pour obtenir la liste complète des paramètres possibles, consultez la documentation de référence sur la commande bq mk --dataset.

    1. Créez un ensemble de données nommé bqml_tutorial avec l'emplacement des données défini sur US et une description de BigQuery ML tutorial dataset :

      bq --location=US mk -d \
       --description "BigQuery ML tutorial dataset." \
       bqml_tutorial

      Au lieu d'utiliser l'option --dataset, la commande utilise le raccourci -d. Si vous omettez -d et --dataset, la commande crée un ensemble de données par défaut.

    2. 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"
      }
    }

    BigQuery DataFrames

    Avant d'essayer cet exemple, suivez les instructions de configuration pour BigQuery DataFrames du guide de démarrage rapide de BigQuery DataFrames. Pour en savoir plus, consultez la documentation de référence sur BigQuery DataFrames.

    Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer les ADC pour un environnement de développement local.

    import google.cloud.bigquery
    
    bqclient = google.cloud.bigquery.Client()
    bqclient.create_dataset("bqml_tutorial", exists_ok=True)

    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 &quot;Série temporelle&quot;

      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. In the Trusted Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.