Neste tutorial, vai aprender a acelerar significativamente a preparação de um conjunto de ARIMA_PLUS
modelos de séries cronológicas univariadas para fazer várias previsões de séries cronológicas com uma única consulta. Também vai aprender a avaliar a precisão das previsões.
Este tutorial faz previsões para várias séries cronológicas. Os valores previstos são calculados para cada ponto temporal, para cada valor numa ou mais colunas especificadas. Por exemplo, se quiser prever o tempo e especificar uma coluna com dados de cidades, os dados previstos vão conter previsões para todos os pontos temporais da cidade A, seguidas dos valores previstos para todos os pontos temporais da cidade B e assim sucessivamente.
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 de intervalos temporais, pelo que são usados para ilustrar várias estratégias para acelerar a preparação de modelos.
Os dados de vendas de bebidas alcoólicas têm mais de 1 milhão de intervalos temporais, pelo que são usados para mostrar a previsão de intervalos temporais em grande escala.
Antes de ler este tutorial, deve ler os artigos Preveja várias séries cronológicas com um modelo univariado e Práticas recomendadas para a previsão de séries cronológicas em grande escala.
Objetivos
Neste tutorial, vai usar o seguinte:
- Criar um modelo de séries cronológicas com a declaração
CREATE MODEL
. - Avaliar a precisão do modelo através da função
ML.EVALUATE
. - Usando as opções
AUTO_ARIMA_MAX_ORDER
,TIME_SERIES_LENGTH_FRACTION
,MIN_TIME_SERIES_LENGTH
eMAX_TIME_SERIES_LENGTH
da declaraçãoCREATE MODEL
para reduzir significativamente o tempo de preparação do modelo.
Para simplificar, este tutorial não aborda a utilização das funções
ML.FORECAST
ou
ML.EXPLAIN_FORECAST
para gerar previsões. Para saber como usar essas funções, consulte o artigo
Preveja várias séries cronológicas com um modelo univariado.
Custos
Este tutorial usa componentes faturáveis do Google Cloud, incluindo:
- BigQuery
- BigQuery ML
Para mais informações acerca dos custos, consulte a página de preços do BigQuery e a página de preços do BigQuery ML.
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.
-
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.
- O BigQuery é ativado automaticamente em novos projetos.
Para ativar o BigQuery num projeto pré-existente, aceda a
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. 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
Autorizações necessárias
Para mais informações acerca das funções e autorizações do IAM no BigQuery, consulte o artigo Introdução ao IAM.
Crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar o seu modelo de ML.
Consola
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.
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
.
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
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.
Crie uma tabela de dados de entrada
A declaração SELECT
da seguinte consulta usa a função EXTRACT
para extrair as informações de data da coluna starttime
. A consulta usa a cláusula COUNT(*)
para obter o número total diário de viagens de Citi Bike.
table_1
tem 679 intervalos temporais. A consulta usa lógica INNER JOIN
adicional
para selecionar todas as séries cronológicas que têm mais de 400 pontos de tempo, o que resulta
num total de 383 séries cronológicas.
Siga estes passos para criar a tabela de dados de entrada:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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;
Crie um modelo para várias séries cronológicas com parâmetros predefinidos
Quer prever o número de viagens de bicicleta para cada estação do Citi Bike, o que requer muitos modelos de intervalos temporais; um para cada estação do Citi Bike incluída nos dados de entrada. Pode escrever várias consultas para o fazer, mas pode ser um processo tedioso e demorado, especialmente quando tem um grande número de séries cronológicas.CREATE MODEL
Em alternativa, pode usar uma única consulta para criar e ajustar um conjunto de modelos de intervalos temporais de modo a prever vários intervalos temporais em simultâneo.
A cláusula OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica que está a criar um conjunto de modelos de séries cronológicas baseados em ARIMA.ARIMA_PLUS
A opção time_series_timestamp_col
especifica a coluna que contém as séries cronológicas, a opção time_series_data_col
especifica a coluna para a qual quer fazer a previsão e a opção time_series_id_col
especifica uma ou mais dimensões para as quais quer criar séries cronológicas.
Este exemplo omite os pontos temporais na série cronológica após 1 de junho de 2016 , para que esses pontos temporais possam ser usados para avaliar a precisão da previsão mais tarde através da função ML.EVALUATE
.
Siga estes passos para criar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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 demora cerca de 15 minutos a concluir.
Avalie a precisão da previsão para cada série cronológica
Avalie a precisão da previsão do modelo através da função ML.EVALUATE
.
Siga estes passos para avaliar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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));
Esta consulta comunica várias métricas de previsão, incluindo:
Os resultados devem ter um aspeto semelhante ao seguinte:
A cláusula
TABLE
na funçãoML.EVALUATE
identifica uma tabela que contém os dados de verdade factual. Os resultados da previsão são comparados com os dados de terreno real para calcular as métricas de precisão. Neste caso, o elementonyc_citibike_time_series
contém os pontos da série cronológica anteriores e posteriores a 1 de junho de 2016. Os pontos após 1 de junho de 2016 são os dados de referência. Os pontos anteriores a 1 de junho de 2016 são usados para preparar o modelo de modo a 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 das 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á a calcular a precisão da previsão com base numa previsão de sete pontos. Tenha em atenção que, se os dados de referência tiverem menos de sete pontos para a comparação, as métricas de precisão são calculadas apenas com base nos pontos disponíveis. O valor éperform_aggregation
TRUE
, o que significa que as métricas de precisão da previsão são agregadas com base nas métricas no ponto temporal. Se especificar um valor deperform_aggregation
deFALSE
, a precisão da previsão é devolvida para cada ponto no tempo previsto.Para mais informações sobre as colunas de saída, consulte a função
ML.EVALUATE
.
Avalie a precisão geral das previsões
Avalie a precisão da previsão para todas as 383 séries cronológicas.
Das métricas de previsão devolvidas por ML.EVALUATE
, apenas o erro percentual absoluto médio e o erro percentual absoluto médio simétrico são independentes do valor da série cronológica. Por conseguinte, para avaliar a precisão de previsão total do conjunto de séries cronológicas, apenas o agregado destas duas métricas é significativo.
Siga estes passos para avaliar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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));
Esta consulta devolve um valor MAPE
de 0.3471
e um valor sMAPE
de 0.2563
.
Crie um modelo para prever várias séries cronológicas com um espaço de pesquisa de hiperparâmetros mais pequeno
Na secção
Crie um modelo para várias séries cronológicas com parâmetros predefinidos, usou os valores predefinidos para todas as opções de preparação, incluindo a opção auto_arima_max_order
. Esta opção controla o espaço de pesquisa para o ajuste de hiperparâmetros no algoritmo auto.ARIMA
.
No modelo criado pela consulta seguinte, usa um espaço de pesquisa mais pequeno para os hiperparâmetros alterando o valor da opção auto_arima_max_order
do valor predefinido de 5
para 2
.
Siga estes passos para avaliar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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 demora cerca de 2 minutos a concluir. Recorde que o modelo anterior demorou cerca de 15 minutos a ser concluído quando o valor de
auto_arima_max_order
era5
, pelo que esta alteração melhora a velocidade de preparação do modelo em cerca de 7 vezes. Se se perguntar por que motivo o ganho de velocidade não é5/2=2.5x
, isto deve-se ao facto de, quando o valor deauto_arima_max_order
aumenta, não só aumentar o número de modelos candidatos, como também a complexidade. Isto faz com que o tempo de preparação do modelo aumente.
Avalie a precisão das previsões para um modelo com um espaço de pesquisa de hiperparâmetros mais pequeno
Siga estes passos para avaliar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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));
Esta consulta devolve um valor MAPE
de 0.3337
e um valor sMAPE
de 0.2337
.
Na secção
Avalie a precisão geral da previsão, avaliou um modelo com um espaço de pesquisa de hiperparâmetros maior,
em que o valor da opção auto_arima_max_order
é 5
. Isto resultou num MAPE
valor de 0.3471
e num valor de sMAPE
de 0.2563
. Neste caso, pode ver que um espaço de pesquisa de hiperparâmetros mais pequeno dá, na verdade, uma precisão de previsão mais elevada. Um dos motivos é que o algoritmo auto.ARIMA
só faz o ajuste dos 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.
Crie um modelo para prever várias séries cronológicas com um espaço de pesquisa de hiperparâmetros mais pequeno e estratégias de preparação rápidas e inteligentes
Neste passo, usa um espaço de pesquisa de hiperparâmetros mais pequeno e a estratégia de
aprendizagem rápida inteligente usando uma ou mais das opções de aprendizagem max_time_series_length
,
max_time_series_length
ou time_series_length_fraction
.
Embora a modelagem periódica, como a sazonalidade, exija um determinado número de pontos temporais, a modelagem de tendências requer menos pontos temporais. Entretanto, a modelagem de tendências é muito mais dispendiosa em termos de computação do que outros componentes de séries cronológicas, como a sazonalidade. Ao usar as opções de preparação rápida acima, pode modelar eficientemente o componente de tendência com um subconjunto da série cronológica, enquanto os outros componentes da série cronológica usam a série cronológica completa.
O exemplo seguinte usa a opção max_time_series_length
para alcançar um
treino rápido. Se definir o valor da opção max_time_series_length
como 30
, apenas são usados os 30 pontos de tempo mais recentes para modelar o componente de tendência. Todas as 383
séries cronológicas continuam a ser usadas para modelar os componentes sem tendência.
Siga estes passos para criar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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 demora cerca de 35 segundos a ser concluída. Isto é 3 vezes mais rápido em comparação com a consulta que usou na secção Crie um modelo para prever várias séries cronológicas com um espaço de pesquisa de hiperparâmetros mais pequeno. Devido à sobrecarga de tempo constante para a parte da consulta que não envolve preparação, como o pré-processamento de dados, o ganho de velocidade é muito superior quando o número de séries cronológicas é muito maior do que neste exemplo. Para um milhão de séries cronológicas, o ganho de velocidade aproxima-se da relação entre o comprimento da série cronológica e o valor da opção
max_time_series_length
. Nesse caso, o aumento da velocidade é superior a 10 vezes.
Avalie a precisão das previsões para um modelo com um espaço de pesquisa de hiperparâmetros mais pequeno e estratégias de preparação rápidas inteligentes
Siga estes passos para avaliar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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));
Esta consulta devolve um valor MAPE
de 0.3515
e um valor sMAPE
de 0.2473
.
Lembre-se de que, sem a utilização de estratégias de preparação rápida, a precisão da previsão resulta num valor MAPE
de 0.3337
e num valor sMAPE
de 0.2337
.
A diferença entre os dois conjuntos de valores das métricas está dentro de 3%, o que é estatisticamente irrelevante.
Em resumo, usou um espaço de pesquisa de hiperparâmetros mais pequeno e estratégias de preparação rápidas e inteligentes para tornar a preparação do modelo mais de 20 vezes mais rápida sem sacrificar a precisão das previsões. Conforme mencionado anteriormente, com mais séries cronológicas, o ganho de velocidade das estratégias de formação rápida inteligente pode ser significativamente superior. Além disso, a biblioteca ARIMA subjacente usada pelos modelos ARIMA_PLUS
foi otimizada para ser executada 5 vezes mais rápido do que antes. Em conjunto, estes ganhos permitem
a previsão de milhões de séries cronológicas em horas.
Crie um modelo para prever um milhão de séries cronológicas
Neste passo, prevê as vendas de bebidas alcoólicas para mais de 1 milhão de produtos de bebidas alcoólicas em diferentes lojas através dos dados públicos de vendas de bebidas alcoólicas do Iowa. A preparação do modelo usa um pequeno espaço de pesquisa de hiperparâmetros, bem como a estratégia de preparação rápida inteligente.
Siga estes passos para avaliar o modelo:
Na Google Cloud consola, aceda à página BigQuery.
No editor de consultas, cole a seguinte consulta 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 demora cerca de 1 hora e 16 minutos a ser concluída.
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
- Pode eliminar o projeto que criou.
- Em alternativa, pode manter o projeto e eliminar o conjunto de dados.
Elimine o conjunto de dados
A eliminação do projeto remove todos os conjuntos de dados e todas as tabelas no projeto. Se preferir reutilizar o projeto, pode eliminar o conjunto de dados que criou neste tutorial:
Se necessário, abra a página do BigQuery na Google Cloud consola.
Na navegação, clique no conjunto de dados bqml_tutorial que criou.
Clique em Eliminar conjunto de dados para eliminar o conjunto de dados, a tabela e todos os dados.
Na caixa de diálogo Eliminar conjunto de dados, confirme o comando de eliminação escrevendo o nome do conjunto de dados (
bqml_tutorial
) e, de seguida, clique em Eliminar.
Elimine o projeto
Para eliminar 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.
O que se segue?
- Saiba como prever uma única série cronológica com um modelo univariado
- Saiba como prever uma única série cronológica com um modelo multivariável
- Saiba como prever várias séries cronológicas com um modelo univariado
- Saiba como prever hierarquicamente várias séries cronológicas com um modelo univariado
- Para uma vista geral do BigQuery ML, consulte o artigo Introdução à IA e ao ML no BigQuery.