Usar feriados personalizados em um modelo de previsão de série temporal

Este tutorial mostra como fazer as seguintes tarefas:

  • Criar um modelo de previsão de série temporal ARIMA_PLUS que use apenas feriados integrados.
  • Criar um modelo de previsão de série temporal ARIMA_PLUS que use feriados personalizados, além de feriados integrados.
  • Confira os resultados previstos desses modelos.
  • Inspecione um modelo para conferir quais feriados ele modela.
  • Avaliar os efeitos dos feriados personalizados nos resultados previstos.
  • Compare o desempenho do modelo que usa apenas feriados integrados com aqueles que usam feriados personalizados, além dos integrados.

Neste tutorial, usamos as tabelas públicas bigquery-public-data.wikipedia.pageviews_*.

Permissões necessárias

  • Para criar o conjunto de dados, é preciso ter a permissão de IAM bigquery.datasets.create.
  • Para criar o recurso de conexão, você precisa das seguintes permissões:

    • bigquery.connections.create
    • bigquery.connections.get
  • Para criar o modelo, você precisa das seguintes permissões:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.connections.delegate
  • Para executar a inferência, você precisa das seguintes permissões:

    • bigquery.models.getData
    • bigquery.jobs.create

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Introdução ao IAM.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

  • BigQuery: você gera custos pelos dados processados no BigQuery.

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Para saber mais, acesse a página Preços do BigQuery.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative a API BigQuery.

    Ative a API

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative a API BigQuery.

    Ative a API

crie um conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:

  1. No console do Google Cloud, acesse a página do BigQuery.

    Acesse a página do BigQuery

  2. No painel Explorer, clique no nome do seu projeto.

  3. Clique em Conferir ações > Criar conjunto de dados.

    Criar conjunto de dados.

  4. Na página Criar conjunto de dados, faça o seguinte:

    • Para o código do conjunto de dados, insira bqml_tutorial.

    • Em Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).

      Os conjuntos de dados públicos são armazenados na multirregião US. Para simplificar, armazene seus conjuntos de dados no mesmo local.

    • Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.

      Página Criar conjunto de dados.

Preparar os dados da série temporal

Agregar os dados de visualização de páginas da Wikipédia para a página do Google I/O em uma única tabela, agrupada por dia:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Editor SQL, execute a seguinte instrução SQL:

    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)
    

Crie um modelo de previsão de série temporal que usa feriados integrados

Crie um modelo que preveja visualizações de página diárias da página "Google I/O" da Wikipédia, com base em dados de visualização de página antes de 2022 e considerando os feriados integrados:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Editor SQL, execute a seguinte instrução SQL:

    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';
    

Visualize os resultados previstos

Depois de criar o modelo usando feriados integrados, mescle os dados originais da tabela bqml_tutorial.googleio_page_views com o valor previsto da função ML.EXPLAIN_FORECAST. e visualize-os usando o Looker Studio:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Editor SQL, execute a seguinte instrução SQL:

    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. No painel Resultados da consulta, clique em Explorar dados e depois em Explorar com o Looker Studio. O Looker Studio é aberto em uma nova guia.

  4. Na guia do Looker Studio, clique em Adicionar um gráfico e no gráfico de série temporal:

    Adicionar um gráfico de séries temporais

    Insira o gráfico no relatório.

  5. Na guia Configuração do painel Gráfico, clique em Adicionar métrica e selecione adjusted_views_without_custom_holiday:

    Inclua outra métrica.

    O gráfico será assim:

    Gráfico de série temporal dos resultados da previsão usando feriados integrados

    O modelo de previsão captura a tendência geral muito bem. No entanto, ela não captura o aumento do tráfego relacionado aos eventos anteriores do Google I/O e não gera uma previsão precisa para

    1. As próximas seções mostram como lidar com algumas dessas limitações.

Criar um modelo de previsão de série temporal que usa feriados personalizados e integrados

Conforme exibido no histórico do Google I/O, o evento do Google I/O ocorreu em datas diferentes entre 2017 e 2022. Para considerar essa variação, crie um modelo que preveja visualizações de página para a página "Google_I/O" da Wikipédia até 2022, com base nos dados de visualização de página anteriores a 2022 e usando feriados personalizados para representar para o evento Google I/O todos os anos. Nesse modelo, ajuste também a janela de efeito de feriado para cobrir três dias perto da data do evento, capturando melhor algum tráfego de página em potencial antes e depois do evento.

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Editor SQL, execute a seguinte instrução SQL:

    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
        )
    );
    

Visualize os resultados previstos

Depois de criar o modelo usando feriados personalizados, mescle os dados originais da tabela bqml_tutorial.googleio_page_views com o valor previsto da função ML.EXPLAIN_FORECAST e visualize-o usando o Looker Studio:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Editor SQL, execute a seguinte instrução SQL:

    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. No painel Resultados da consulta, clique em Explorar dados e depois em Explorar com o Looker Studio. O Looker Studio é aberto em uma nova guia.

  4. Na guia do Looker Studio, clique em Adicionar um gráfico, no gráfico de série temporal e insira o gráfico no relatório.

  5. Na guia Configuração do painel Gráfico, clique em Adicionar métrica e selecione adjusted_views_with_custom_holiday.

    O gráfico será assim:

    Gráfico de série temporal dos resultados da previsão usando feriados personalizados

    Conforme exibido, os feriados personalizados otimizaram o desempenho do modelo de previsão. Agora, é possível capturar com eficácia o aumento de visualizações de página causado pelo Google I/O.

Inspecionar informações de feriados

Inspecione a lista de feriados que foram considerados durante a modelagem usando a função ML.HOLIDAY_INFO:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Editor SQL, execute a seguinte instrução SQL:

    SELECT *
    FROM
      ML.HOLIDAY_INFO(
        MODEL `bqml_tutorial.forecast_googleio_with_custom_holiday`);
    

    Os resultados mostram o Google I/O e os feriados integrados na lista de feriados:

    Resultados da função ML.HOLIDAY_INFO.

Avaliar os efeitos dos feriados personalizados

Avaliar os efeitos dos feriados personalizados nos resultados previstos usando a função ML.EXPLAIN_FORECAST:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Editor SQL, execute a seguinte instrução SQL:

    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;
    

    Os resultados mostram que o Google I/O contribui com uma grande quantidade de efeito do feriado para os resultados previstos:

    Resultados da função ML.EXPLAIN_FORECAST.

Comparar o desempenho do modelo

Use a função ML.EVALUATE para comparar o desempenho do primeiro modelo criado sem feriados personalizados e do segundo modelo criado com feriados personalizados. Para conferir o desempenho do segundo modelo em relação à previsão de um feriado personalizado, defina o período como a semana do Google I/O em 2022:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Editor SQL, execute a seguinte instrução SQL:

    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));
    

    Os resultados mostram que o segundo modelo oferece uma melhoria significativa de desempenho:

    Resultados da função ML.EXPLAIN_FORECAST.

Limpeza

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.