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: You incur costs for the data you process in BigQuery.
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Para saber mais, acesse a página Preços do BigQuery.
Antes de começar
- 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.
-
Enable the BigQuery API.
-
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.
-
Enable the BigQuery API.
Criar um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:
No console do Google Cloud, acesse a página do BigQuery.
No painel Explorer, clique no nome do seu projeto.
Clique em
Conferir ações > Criar conjunto de dados.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.
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:
Acessar a página do BigQuery.
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:
Acessar a página do BigQuery.
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:
Acessar a página do BigQuery.
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;
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.
Na guia do Looker Studio, clique em Adicionar um gráfico e no gráfico de série temporal:
Insira o gráfico no relatório.
Na guia Configuração do painel Gráfico, clique em Adicionar métrica e selecione adjusted_views_without_custom_holiday:
O gráfico será assim:
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
- 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.
Acessar a página do BigQuery.
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:
Acessar a página do BigQuery.
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;
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.
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.
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:
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
:
Acessar a página do BigQuery.
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:
Avaliar os efeitos dos feriados personalizados
Avaliar os efeitos dos feriados personalizados nos resultados previstos
usando a
função ML.EXPLAIN_FORECAST
:
Acessar a página do BigQuery.
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:
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:
Acessar a página do BigQuery.
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:
Limpar
- 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.