Neste tutorial, você aprenderá a acelerar significativamente o treinamento de um conjunto de modelos de série temporal para executar várias previsões de séries temporais com uma única consulta. Você também aprenderá a avaliar a precisão da previsão.
Neste tutorial, você vai aprender a acelerar significativamente o treinamento de um modelo de série temporal univariada para fazer previsões.
Este tutorial faz previsões para várias série temporal. Os valores previstos são calculados para cada ponto de tempo e para cada valor em uma ou mais colunas especificadas. Por exemplo, se você quisesse prever o clima e especificasse uma coluna com dados da cidade, os dados previstos teriam previsões para todos os pontos de tempo da Cidade A, depois os valores previstos para todos os pontos de tempo da Cidade B e assim por diante.
Este tutorial usa dados das tabelas públicas
bigquery-public-data.new_york.citibike_trips
e
iowa_liquor_sales.sales
. Os dados de viagens de bicicleta contêm apenas algumas centenas série temporal. Por isso, eles são
usados para ilustrar várias estratégias para acelerar treinamento de modelo.
Os dados de vendas de bebidas alcoólicas têm mais de um milhão de série temporal, então são usados para mostrar a previsão de série temporal em grande escala.
Antes de ler este tutorial, leia Prever várias série temporal com um modelo univariado e Práticas recomendadas de previsão de série temporal em grande escala.
Objetivos
Neste tutorial, você usará:
- Criar um modelo de série temporal usando a instrução
CREATE MODEL
. - Avalie a precisão do modelo usando a
função
ML.EVALUATE
. - Usar as opções
AUTO_ARIMA_MAX_ORDER
,TIME_SERIES_LENGTH_FRACTION
,MIN_TIME_SERIES_LENGTH
eMAX_TIME_SERIES_LENGTH
da instruçãoCREATE MODEL
para reduzir significativamente o tempo treinamento de modelo.
Para simplificar, este tutorial não aborda como usar as funções
ML.FORECAST
ou
ML.EXPLAIN_FORECAST
para gerar previsões. Para saber como usar essas funções, consulte Prever várias série temporal com um modelo univariado.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:
- BigQuery
- BigQuery ML
Para mais informações sobre custos, consulte as páginas de preços do BigQuery e do ML 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.
-
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.
- O BigQuery é ativado automaticamente em novos projetos.
Para ativar o BigQuery em um projeto preexistente, acesse
Enable the BigQuery API.
Permissões exigidas
- 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.
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.
Criar uma tabela de dados de entrada
A instrução SELECT
da consulta a seguir usa a
função EXTRACT
para extrair as informações de data da coluna starttime
. A consulta usa a cláusula
COUNT(*)
para descobrir o número total diário de viagens do Citi Bike.
table_1
tem 679 séries temporais. A consulta usa lógica INNER JOIN
extra
para selecionar todas as séries temporais que têm mais de 400 pontos temporais, resultando
em um total de 383 séries temporais.
Siga estas etapas para criar a tabela de dados de entrada:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
CREATE OR REPLACE TABLE `bqml_tutorial.nyc_citibike_time_series` AS WITH input_time_series AS ( SELECT start_station_name, EXTRACT(DATE FROM starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY start_station_name, date ) SELECT table_1.* FROM input_time_series AS table_1 INNER JOIN ( SELECT start_station_name, COUNT(*) AS num_points FROM input_time_series GROUP BY start_station_name) table_2 ON table_1.start_station_name = table_2.start_station_name WHERE num_points > 400;
Criar um modelo para várias séries temporais com parâmetros padrão
Você quer prever o número de viagens de bicicleta para cada estação do Citi Bike, o que exige muitos modelos de série temporal, um para cada estação do Citi Bike incluída nos dados de entrada. É possível gravar várias consultas
CREATE MODEL
para fazer isso, mas isso pode ser um processo tedioso e demorado,
especialmente quando você tem um grande número de série temporal. Em vez disso, use uma única consulta para criar e ajustar um conjunto de modelos de série temporal e prever várias série temporal ao mesmo tempo.
A cláusula OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica que você está criando um conjunto de modelos de séries temporais ARIMA_PLUS
com base em ARIMA. A opção time_series_timestamp_col
especifica a coluna que contém a série temporal, a opção time_series_data_col
especifica a coluna para a previsão e a time_series_id_col
especifica uma ou mais dimensões para criar séries temporais.
Este exemplo exclui os pontos de tempo na série temporal após 1º de junho de 2016
para que esses pontos de tempo possam ser usados para avaliar a precisão da previsão
mais tarde usando a função ML.EVALUATE
.
Siga estas etapas para criar o modelo:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_default` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_name' ) AS SELECT * FROM bqml_tutorial.nyc_citibike_time_series WHERE date < '2016-06-01';
A consulta leva cerca de 15 minutos para ser concluída.
Avaliar a precisão da previsão para cada série temporal
Avalie a precisão da previsão do modelo usando a função ML.EVALUATE
.
Siga estas etapas para avaliar o modelo:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_default`, TABLE `bqml_tutorial.nyc_citibike_time_series`, STRUCT(7 AS horizon, TRUE AS perform_aggregation));
Essa consulta relata várias métricas de previsão, incluindo:
Os resultados vão ficar assim:
A cláusula
TABLE
na funçãoML.EVALUATE
identifica uma tabela que contém as informações empíricas. Os resultados da previsão são comparados aos dados de informações empíricas para calcular as métricas de precisão. Nesse caso, onyc_citibike_time_series
contém os pontos de série temporal anteriores e posteriores a 1º de junho de 2016. Os pontos após 1º de junho de 2016 são dados informativos. Os pontos anteriores a 1º de junho de 2016 são usados para treinar o modelo e gerar previsões após essa data. Apenas os pontos após 1º de junho de 2016 são necessários para calcular as métricas. Os pontos anteriores a 1º de junho de 2016 são ignorados no cálculo de métricas.A cláusula
STRUCT
na funçãoML.EVALUATE
especificou parâmetros para a função. O valorhorizon
é7
, o que significa que a consulta está calculando a precisão da previsão com base em uma previsão de sete pontos. Se os dados de referência local tiverem menos de sete pontos para a comparação, as métricas de precisão serão calculadas apenas com base nos pontos disponíveis. O valor deperform_aggregation
éTRUE
, o que significa que as métricas de precisão da previsão são agregadas sobre as métricas no ponto de tempo. Se você especificar um valor deperform_aggregation
comoFALSE
, a precisão da previsão será retornada para cada ponto do tempo previsto.Para mais informações sobre as colunas de saída, consulte a função
ML.EVALUATE
.
Avaliar a precisão geral da previsão
Avalie a precisão da previsão para todas as 383 série temporal.
Das métricas de previsão retornadas por ML.EVALUATE
, somente
erro percentual absoluto médio e erro percentual absoluto simétrico são
independentes do valor da série temporal. Portanto, para avaliar toda a precisão da previsão do conjunto de séries temporais, apenas o agregado dessas duas métricas é significativo.
Siga estas etapas para avaliar o modelo:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
SELECT AVG(mean_absolute_percentage_error) AS MAPE, AVG(symmetric_mean_absolute_percentage_error) AS sMAPE FROM ML.EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_default`, TABLE `bqml_tutorial.nyc_citibike_time_series`, STRUCT(7 AS horizon, TRUE AS perform_aggregation));
Essa consulta retorna um valor MAPE
de 0.3471
e um valor sMAPE
de 0.2563
.
Criar um modelo para prever várias séries temporais com um espaço de pesquisa de hiperparâmetros menor
Na seção Criar um modelo para várias séries temporais com parâmetros padrão, você usou os valores padrão para todas as opções de treinamento, incluindo a opção auto_arima_max_order
. Essa opção controla o espaço de pesquisa
para o ajuste de hiperparâmetros no algoritmo auto.ARIMA
.
No modelo criado pela consulta a seguir, você usa um espaço de pesquisa menor para os hiperparâmetros mudando o valor da opção auto_arima_max_order
do padrão 5
para 2
.
Siga estas etapas para avaliar o modelo:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_max_order_2` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_name', auto_arima_max_order = 2 ) AS SELECT * FROM `bqml_tutorial.nyc_citibike_time_series` WHERE date < '2016-06-01';
A consulta leva cerca de dois minutos para ser concluída. O modelo anterior levou cerca de 15 minutos para ser concluído quando o valor de
auto_arima_max_order
era5
. Portanto, essa mudança melhora o ganho de velocidade de treinamento de modelo em cerca de sete vezes. Se você quer saber por que o ganho de velocidade não é5/2=2.5x
, é porque, quando o valor deauto_arima_max_order
aumenta, não apenas o número de modelos candidatos aumenta, mas também a complexidade. Isso faz com que o tempo de treinamento do modelo aumente.
Avaliar a precisão da previsão de um modelo com um espaço de pesquisa de hiperparâmetros menor
Siga estas etapas para avaliar o modelo:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
SELECT AVG(mean_absolute_percentage_error) AS MAPE, AVG(symmetric_mean_absolute_percentage_error) AS sMAPE FROM ML.EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_max_order_2`, TABLE `bqml_tutorial.nyc_citibike_time_series`, STRUCT(7 AS horizon, TRUE AS perform_aggregation));
Essa consulta retorna um valor MAPE
de 0.3337
e um valor sMAPE
de 0.2337
.
Na seção Avaliar a precisão geral da previsão, você avaliou um modelo com um espaço de pesquisa de hiperparâmetro maior, em que o valor da opção auto_arima_max_order
é 5
. Isso resultou em um valor de MAPE
de 0.3471
e um valor de sMAPE
de 0.2563
. Nesse caso, é possível observar
que um espaço menor de pesquisa de hiperparâmetro fornece, na verdade, uma maior precisão
de previsão. Um motivo para isso é que o algoritmo auto.ARIMA
só realiza
o ajuste de hiperparâmetros para o módulo de tendência de todo o pipeline de modelagem. O
melhor modelo ARIMA selecionado pelo algoritmo auto.ARIMA
pode não gerar os
melhores resultados de previsão para todo o pipeline.
Criar um modelo para prever várias séries temporais com um espaço de pesquisa de hiperparâmetros menor e estratégias de treinamento rápido e inteligente
Nesta etapa, você usa um espaço de pesquisa de hiperparâmetros menor e a
estratégia de treinamento rápida e inteligente com uma ou mais das opções de treinamento
max_time_series_length
, max_time_series_length
ou time_series_length_fraction
.
Embora modelos periódicos, como a sazonalidade, exijam um determinado número de pontos de tempo, a modelagem de tendências requer menos pontos de tempo. Enquanto isso, a modelagem de tendências é muito mais cara do que outros componentes de série temporal, como sazonalidade. Ao usar as opções de treinamento rápido acima, é possível modelar de maneira eficiente o componente de tendência com um subconjunto da série temporal. Já os outros componentes de série temporal usam toda a série temporal.
O exemplo a seguir usa a opção max_time_series_length
para conseguir um treinamento
rápido. Ao definir o valor da opção max_time_series_length
como 30
, apenas os
30 pontos de tempo mais recentes são usados para modelar o componente de tendência. Todas as 383
série temporal ainda são usadas para modelar os componentes que não são de tendência.
Siga estas etapas para criar o modelo:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_max_order_2_fast_training` OPTIONS (model_type = 'ARIMA_PLUS', time_series_timestamp_col = 'date', time_series_data_col = 'num_trips', time_series_id_col = 'start_station_name', auto_arima_max_order = 2, max_time_series_length = 30 ) AS SELECT * FROM `bqml_tutorial.nyc_citibike_time_series` WHERE date < '2016-06-01';
A consulta leva cerca de 35 segundos para ser concluída. Isso é três vezes mais rápido em comparação com a consulta que você usou na seção Criar um modelo para prever várias séries temporais com um espaço de pesquisa de hiperparâmetro menor. Devido à constante sobrecarga de tempo da parte sem treinamento da consulta, como pré-processamento de dados etc., a velocidade será muito maior quando o número de série temporal for muito maior que neste caso. Para um milhão de séries temporais, o ganho de velocidade se aproxima da proporção do comprimento da série temporal e do valor da opção
max_time_series_length
. Nesse caso, o ganho de velocidade é maior que 10x.
Avaliar a precisão da previsão de um modelo com um espaço de pesquisa de hiperparâmetros menor e estratégias de treinamento rápido e inteligente
Siga estas etapas para avaliar o modelo:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
SELECT AVG(mean_absolute_percentage_error) AS MAPE, AVG(symmetric_mean_absolute_percentage_error) AS sMAPE FROM ML.EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_max_order_2_fast_training`, TABLE `bqml_tutorial.nyc_citibike_time_series`, STRUCT(7 AS horizon, TRUE AS perform_aggregation));
Essa consulta retorna um valor MAPE
de 0.3515
e um valor sMAPE
de 0.2473
.
Sem o uso de estratégias de treinamento rápido, a precisão da previsão resulta em um valor de MAPE
de 0.3337
e um valor de sMAPE
de 0.2337
.
A diferença entre os dois conjuntos de valores de métricas está dentro de 3%, o que é
estatisticamente insignificante.
Em resumo, você usou um espaço de pesquisa de hiperparâmetros menor e estratégias de treinamento rápido e inteligente para tornar o treinamento do seu modelo mais de 20 vezes mais rápido sem sacrificar a precisão da previsão. Como mencionado anteriormente, com mais série temporal, o ganho de velocidade pelas estratégias de treinamento rápido e inteligente pode ser significativamente
maior. Além disso, a biblioteca ARIMA subjacente usada pelos modelos ARIMA_PLUS
foi otimizada para funcionar cinco vezes mais rápido do que antes. Juntos, esses ganhos permitem
a previsão de milhões de série temporal em horas.
Criar um modelo para prever um milhão de série temporal
Nesta etapa, você estima as vendas de bebidas alcoólicas para mais de 1 milhão de produtos de bebidas em lojas diferentes usando os dados públicos de venda de bebidas alcoólicas de Iowa. O treinamento de modelo usa um pequeno espaço de pesquisa de hiperparâmetros, bem como a estratégia de treinamento rápido e inteligente.
Siga estas etapas para avaliar o modelo:
No Console do Google Cloud, acesse a página BigQuery.
No Editor de consultas, cole a consulta a seguir e clique em Executar:
CREATE OR REPLACE MODEL `bqml_tutorial.liquor_forecast_by_product` OPTIONS( MODEL_TYPE = 'ARIMA_PLUS', TIME_SERIES_TIMESTAMP_COL = 'date', TIME_SERIES_DATA_COL = 'total_bottles_sold', TIME_SERIES_ID_COL = ['store_number', 'item_description'], HOLIDAY_REGION = 'US', AUTO_ARIMA_MAX_ORDER = 2, MAX_TIME_SERIES_LENGTH = 30 ) AS SELECT store_number, item_description, date, SUM(bottles_sold) as total_bottles_sold FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN DATE("2015-01-01") AND DATE("2021-12-31") GROUP BY store_number, item_description, date;
A consulta leva aproximadamente 1 hora e 16 minutos para ser concluída.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
- exclua o projeto que você criou; ou
- Mantenha o projeto e exclua o conjunto de dados.
Excluir o conjunto de dados
A exclusão do seu projeto removerá todos os conjuntos de dados e tabelas no projeto. Caso prefira reutilizá-lo, exclua o conjunto de dados criado neste tutorial:
Se necessário, abra a página do BigQuery no console do Google Cloud.
Na navegação, clique no conjunto de dados bqml_tutorial criado.
Clique em Excluir conjunto de dados para excluir o conjunto de dados, a tabela e todos os dados.
Na caixa de diálogo Excluir conjunto de dados, confirme o comando de exclusão digitando o nome do seu conjunto de dados (
bqml_tutorial
). Em seguida, clique em Excluir.
Excluir o projeto
Para excluir o projeto:
- 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.
A seguir
- Saiba como prever uma única série temporal com um modelo univariado
- Saiba como prever uma única série temporal com um modelo multivariável
- Aprenda a prever várias série temporal com um modelo univariado
- Saiba como prever hierarquicamente várias série temporal com um modelo univariado
- Para uma visão geral do BigQuery ML, consulte Introdução à IA e ao ML no BigQuery.