Usar feriados personalizados em um modelo de previsão de série temporal ARIMA_PLUS
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 modelo, você precisa das seguintes permissões:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
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ê vai 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.
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud 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.enable
permission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud 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.enable
permission. Learn how to grant roles. No console do Google Cloud , acesse a página 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).
Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
Crie um conjunto de dados chamado
bqml_tutorial
com o local dos dados definido comoUS
e uma descrição deBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Em vez de usar a flag
--dataset
, o comando usa o atalho-d
. Se você omitir-d
e--dataset
, o comando vai criar um conjunto de dados por padrão.Confirme se o conjunto de dados foi criado:
bq ls
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)
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';
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.
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 ) );
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.
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:
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:
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:
- 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.
crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar seu modelo de ML.
Console
bq
Para criar um novo conjunto de dados, utilize o
comando bq mk
com a sinalização --location
. Para obter uma lista completa de parâmetros, consulte a
referência
comando bq mk --dataset
.
API
Chame o método datasets.insert
com um recurso de conjunto de dados definido.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
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:
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:
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:
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.
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:
Inspecionar informações de feriados
Inspecione a lista de feriados que foram considerados durante a modelagem
usando a
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
:
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: