Use feriados personalizados num modelo de previsão de séries cronológicas ARIMA_PLUS
Este tutorial mostra como realizar as seguintes tarefas:
- Crie um
ARIMA_PLUS
modelo de previsão de séries de tempo que usa apenas feriados incorporados. - Crie um modelo de previsão de séries cronológicas que use feriados personalizados, além dos feriados incorporados.
ARIMA_PLUS
- Visualize os resultados previstos destes modelos.
- Inspecione um modelo para ver que feriados modela.
- Avalie os efeitos dos feriados personalizados nos resultados previstos.
- Compare o desempenho do modelo que usa apenas feriados incorporados com o desempenho do modelo que usa feriados personalizados, além dos feriados incorporados.
Este tutorial usa as bigquery-public-data.wikipedia.pageviews_*
tabelas públicas.
Autorizações necessárias
Para criar o conjunto de dados, precisa da autorização
bigquery.datasets.create
IAM.Para criar o modelo, precisa das seguintes autorizações:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
Para executar a inferência, precisa das seguintes autorizações:
bigquery.models.getData
bigquery.jobs.create
Para mais informações acerca das funções e autorizações do IAM no BigQuery, consulte o artigo Introdução ao IAM.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- BigQuery: You incur costs for the data you process in BigQuery.
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Para mais informações, consulte os 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. Na Google Cloud consola, aceda à página BigQuery.
No painel Explorador, clique no nome do projeto.
Clique em
Ver ações > Criar conjunto de dadosNa página Criar conjunto de dados, faça o seguinte:
Para o ID do conjunto de dados, introduza
bqml_tutorial
.Em Tipo de localização, selecione Várias regiões e, de seguida, selecione EUA (várias regiões nos Estados Unidos).
Deixe as restantes predefinições como estão e clique em Criar conjunto de dados.
Crie um conjunto de dados com o nome
bqml_tutorial
com a localização dos dados definida 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 omitir-d
e--dataset
, o comando cria um conjunto de dados por predefinição.Confirme que o conjunto de dados foi criado:
bq ls
Aceda à página do BigQuery.
No painel do editor de SQL, execute a seguinte declaraçã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)
Aceda à página do BigQuery.
No painel do editor de SQL, execute a seguinte declaraçã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';
Aceda à página do BigQuery.
No painel do editor de SQL, execute a seguinte declaraçã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, de seguida, clique em Explorar com o Looker Studio. O Looker Studio abre num novo separador.
No separador do Looker Studio, clique em Adicionar um gráfico e, de seguida, clique no gráfico de intervalos temporais:
Coloque o gráfico no relatório.
No separador Configuração do painel Gráfico, clique em Adicionar métrica e selecione adjusted_views_without_custom_holiday:
O gráfico tem um aspeto semelhante ao seguinte:
Pode ver que o modelo de previsão capta a tendência geral de forma bastante adequada. No entanto, não está a captar o aumento do tráfego relacionado com eventos anteriores do Google I/O e não consegue gerar uma previsão precisa para
- As secções seguintes mostram como lidar com algumas destas limitações.
Aceda à página do BigQuery.
No painel do editor de SQL, execute a seguinte declaraçã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 ) );
Aceda à página do BigQuery.
No painel do editor de SQL, execute a seguinte declaraçã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, de seguida, clique em Explorar com o Looker Studio. O Looker Studio abre num novo separador.
No separador do Looker Studio, clique em Adicionar um gráfico, clique no gráfico de intervalos temporais e coloque o gráfico no relatório.
No separador Configuração do painel Gráfico, clique em Adicionar métrica e selecione adjusted_views_with_custom_holiday.
O gráfico tem um aspeto semelhante ao seguinte:
Como pode ver, os feriados personalizados aumentaram o desempenho do modelo de previsão. Agora, capta eficazmente o aumento das visualizações de páginas causado pelo Google I/O.
Aceda à página do BigQuery.
No painel do editor de SQL, execute a seguinte declaraçã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 incorporados na lista de feriados:
Aceda à página do BigQuery.
No painel do editor de SQL, execute a seguinte declaraçã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 de feriado para os resultados previstos:
Aceda à página do BigQuery.
No painel do editor de SQL, execute a seguinte declaraçã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 no 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 o seu modelo de ML.
Consola
bq
Para criar um novo conjunto de dados, use o comando
bq mk
com a flag --location
. Para uma lista completa de parâmetros possíveis, consulte a referência do comando bq mk --dataset
.
API
Chame o método datasets.insert
com um recurso de conjunto de dados definido.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
DataFrames do BigQuery
Antes de experimentar este exemplo, siga as instruções de configuração dos DataFrames do BigQuery no início rápido do BigQuery com os DataFrames do BigQuery. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure o ADC para um ambiente de desenvolvimento local.
Prepare os dados de séries cronológicas
Agregue os dados de visualização de páginas da Wikipédia para a página Google I/O numa única tabela, agrupada por dia:
Crie um modelo de previsão de séries cronológicas que use feriados incorporados
Crie um modelo que preveja as visualizações de páginas diárias da página "Google I/O" da Wikipédia, com base nos dados de visualização de páginas anteriores a 2022 e tendo em conta os feriados incorporados:
Visualize os resultados previstos
Depois de criar o modelo com feriados incorporados, junte os dados originais da tabela bqml_tutorial.googleio_page_views
com o valor previsto da função ML.EXPLAIN_FORECAST
e, em seguida, visualize-o através do Looker Studio:
Crie um modelo de previsão de séries cronológicas que use feriados incorporados e feriados personalizados
Como pode ver no histórico do Google I/O, o evento Google I/O ocorreu em datas diferentes entre 2017 e 2022. Para ter em conta esta variação, crie um modelo que preveja as visualizações de páginas para a página "Google_I/O" da Wikipédia até 2022, com base nos dados de visualizações de páginas de antes de 2022 e usando feriados personalizados para representar o evento Google I/O todos os anos. Neste modelo, também ajusta o período de efeito da época festiva para abranger três dias em torno da data do evento, para captar melhor algum potencial tráfego da página antes e depois do evento.
Visualize os resultados previstos
Depois de criar o modelo com feriados personalizados, junte os dados originais da tabela bqml_tutorial.googleio_page_views
com o valor previsto da função ML.EXPLAIN_FORECAST
e, em seguida, visualize-o com o Looker Studio:
Inspecione as informações sobre feriados
Inspeccione a lista de feriados que foram tidos em conta durante a modelagem
através da
função ML.HOLIDAY_INFO
:
Avalie os efeitos dos feriados personalizados
Avalie os efeitos das épocas festivas personalizadas nos resultados previstos através da
função ML.EXPLAIN_FORECAST
:
Compare o desempenho do modelo
Use a função
ML.EVALUATE
para comparar o desempenho do primeiro modelo criado sem feriados personalizados
e o segundo modelo criado com feriados personalizados. Para ver o desempenho do segundo modelo na previsão de um feriado personalizado futuro, defina o intervalo de tempo para a semana do Google I/O em 2022: