Neste tutorial, ensinamos como usar um
modelo de série temporal univariada do ARIMA_PLUS para prever o valor futuro de uma determinada
coluna, com base nos valores históricos dela.
Este tutorial faz previsões para várias série temporal. Os valores previstos são calculados para cada ponto de tempo, para cada valor em uma ou mais colunas especificadas. Por exemplo, se você quiser prever o clima e especificar uma coluna que contenha dados da cidade, os dados previstos vão conter previsões para todos os momentos da Cidade A, depois os valores previstos para todos os momentos da Cidade B e assim por diante.
Neste tutorial, usamos dados da tabela pública bigquery-public-data.new_york.citibike_trips. Essa tabela contém informações sobre as viagens do Citi Bike na cidade de Nova York.
Antes de ler este tutorial, recomendamos que você leia Prever uma única série temporal com um modelo univariado.
Objetivos
Este tutorial vai orientar você nas tarefas a seguir:
- Criar um modelo de série temporal para prever o número de viagens de bicicleta usando a
instrução
CREATE MODEL. - Avaliar as informações de média móvel integrada autorregressiva (ARIMA)
no modelo usando a
função
ML.ARIMA_EVALUATE. - Inspecionar os coeficientes do modelo usando a
função
ML.ARIMA_COEFFICIENTS. - Recuperar as informações previstas de passeios de bicicleta do modelo usando a
função
ML.FORECAST. - Recuperar componentes da série temporal, como sazonalidade e tendência,
usando a
função
ML.EXPLAIN_FORECAST. É possível inspecionar esses componentes de série temporal para explicar os valores previstos.
Custos
Neste tutorial, usamos componentes faturáveis do Google Cloud, incluindo:
- BigQuery
- BigQuery ML
Para mais informações sobre os custos do BigQuery, consulte a página de preços.
Para mais informações sobre os custos do BigQuery ML, consulte os preços do BigQuery ML.
Antes de começar
-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. 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 em um projeto preexistente, acesse
Ative a API BigQuery, se ainda não estiver ativada.
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.
Permissões exigidas
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.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Para executar a inferência, você precisa das seguintes permissões:
bigquery.models.getDatabigquery.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
Para criar um conjunto de dados do BigQuery, selecione uma das seguintes opções:Console
No console do Google Cloud , acesse a página BigQuery.
No painel à esquerda, clique em Explorer:

Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.
No Explorer, expanda o projeto e clique em Conjuntos de dados.
Na página Conjuntos de dados, clique em Criar conjunto de dados.
No painel Criar conjunto de dados, faça o seguinte:
Para o código do conjunto de dados, insira
bqml_tutorial.Em Local dos dados, selecione EUA.
Não altere as outras configurações padrão.
Clique em Criar conjunto de dados.
bq
Para criar um novo conjunto de dados, use o
comando bq mk --dataset.
Crie um conjunto de dados chamado
bqml_tutorialcom o local de dados definido comoUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Confirme se 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" } }
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.
Visualizar os dados de entrada
Antes de criar o modelo, é possível visualizar os dados da série temporal de entrada para ter uma ideia da distribuição. Para isso, use o Data Studio.
SQL
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.
Siga estas etapas para visualizar os dados de série temporal:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, cole a consulta abaixo e clique em Executar:
SELECT EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` GROUP BY date;
Quando a consulta for concluída, clique em Abrir em > Data Studio. O Data Studio é aberto em uma nova guia. Conclua as etapas a seguir na nova guia.
No Data Studio, clique em Inserir > Gráfico de série temporal.
No painel Gráfico, escolha a guia Configuração.
Na seção Métrica, adicione o campo num_trips e remova a métrica padrão Contagem de registros. O gráfico resultante será semelhante a este:
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.
Criar o modelo de série temporal
Você quer prever o número de viagens de bicicleta para cada estação do Citi Bike, o que requer muitos modelos de série temporal, um para cada estação incluída nos dados de entrada. É possível criar vários modelos para fazer isso, mas esse 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éries temporais de uma só vez.
SQL
Na consulta a seguir, a cláusula
OPTIONS(model_type='ARIMA_PLUS', time_series_timestamp_col='date', ...)
indica que você está criando um
modelo de série temporal com base em
ARIMA. Use a
opção time_series_id_col
da instrução CREATE MODEL para especificar uma ou mais colunas nos dados de entrada
para as quais você quer receber previsões, neste caso, a estação do Citi Bike, conforme
representado pela coluna start_station_name. Use a cláusula WHERE para
limitar as estações de partida àquelas com Central Park no nome. A
opção auto_arima_max_order
da instrução CREATE MODEL controla o
espaço de pesquisa para o ajuste de hiperparâmetros no algoritmo auto.ARIMA. A
opção decompose_time_series
da instrução CREATE MODEL tem como padrão TRUE, para que as informações sobre
os dados de série temporal sejam retornadas quando você avaliar o modelo na próxima etapa.
Siga estas etapas para criar o modelo:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, cole a consulta abaixo e clique em Executar:
CREATE OR REPLACE MODEL `bqml_tutorial.nyc_citibike_arima_model_group` 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 = 5 ) AS SELECT start_station_name, EXTRACT(DATE from starttime) AS date, COUNT(*) AS num_trips FROM `bigquery-public-data.new_york.citibike_trips` WHERE start_station_name LIKE '%Central Park%' GROUP BY start_station_name, date;
A consulta leva aproximadamente 24 segundos para ser concluída. Depois disso, é possível acessar o modelo
nyc_citibike_arima_model_group. Como a consulta usa uma instruçãoCREATE MODEL, você não vê os resultados da consulta.
Essa consulta cria 12 modelos de série temporal, um para cada uma das 12 estações de partida do Citi Bike nos dados de entrada. Devido ao paralelismo, o custo de tempo, aproximadamente 24 segundos, é 1,4 vezes maior do que o de criar um modelo de série temporal único. No entanto, se você remover a cláusula WHERE ... LIKE ..., haverá mais de 600 série temporal para previsão, e elas não serão completamente previstas em paralelo devido a limitações de capacidade do slot. Nesse caso, a consulta levaria aproximadamente 15 minutos para ser concluída. Para reduzir o ambiente de execução da consulta com o comprometimento de uma possível pequena queda na qualidade do modelo, é possível diminuir o valor de auto_arima_max_order.
Isso reduz o espaço de pesquisa do ajuste de hiperparâmetros no algoritmo auto.ARIMA. Para ver mais informações, consulte
Large-scale time series forecasting best practices.
BigQuery DataFrames
No snippet a seguir, você está criando um modelo de série temporal com base em ARIMA.
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.
Isso cria 12 modelos de série temporal, um para cada uma das 12 estações de partida do Citi Bike nos dados de entrada. Devido ao paralelismo, o custo de tempo, aproximadamente 24 segundos, é 1,4 vezes maior do que o de criar um modelo de série temporal único.
Avaliar o modelo
SQL
Avalie o modelo de série temporal usando a função ML.ARIMA_EVALUATE. A função ML.ARIMA_EVALUATE mostra as métricas de avaliação que foram geradas para o modelo durante o processo de ajuste automático de hiperparâmetros.
Siga estas etapas para avaliar o modelo:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, cole a consulta abaixo e clique em Executar:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
Os resultados vão ter a aparência abaixo:
Embora
auto.ARIMAavalie dezenas de modelos ARIMA candidatos para cada série temporal,ML.ARIMA_EVALUATEgera por padrão apenas as informações do melhor modelo a fim de compactar a tabela de saída. Para visualizar todos os modelos candidatos, defina o argumentoshow_all_candidate_modelda funçãoML.ARIMA_EVALUATEcomoTRUE.
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.
A coluna start_station_name identifica a coluna de dados de entrada para a qual série temporal foram criadas. Essa é a coluna que você especificou com a opção time_series_id_col ao criar o modelo.
As colunas de saída non_seasonal_p, non_seasonal_d, non_seasonal_q e has_drift
definem um modelo ARIMA no pipeline de treinamento. As colunas de saída log_likelihood, AIC e variance são relevantes para o processo de ajuste do modelo ARIMA. O processo de ajuste determina o melhor modelo ARIMA com o algoritmo auto.ARIMA, um para cada série temporal.
O algoritmo auto.ARIMA usa o teste KPSS para determinar o melhor valor para non_seasonal_d, que, neste caso, é 1. Quando non_seasonal_d é 1,
o algoritmo auto.ARIMA treina 42 modelos ARIMA candidatos diferentes em paralelo.
Neste exemplo, todos os 42 modelos candidatos são válidos. Portanto, a saída contém 42
linhas, uma para cada modelo ARIMA candidato. Nos casos em que alguns dos modelos
não são válidos, eles são excluídos da saída. Esses modelos candidatos são retornados em ordem crescente pelo AIC. O modelo na primeira linha tem o menor AIC e é considerado o melhor. Esse modelo é salvo como o modelo final e é usado quando você prevê dados, avalia o modelo e inspeciona os coeficientes dele, conforme mostrado nas etapas a seguir.
A coluna seasonal_periods contém informações sobre o padrão sazonal identificado nos dados da série temporal. Cada série temporal pode ter diferentes padrões sazonais. Por exemplo, na figura, é possível ver que uma série temporal tem um padrão anual, enquanto outras não.
As colunas has_holiday_effect, has_spikes_and_dips e has_step_changes
são preenchidas somente quando decompose_time_series=TRUE. Essas colunas também refletem
informações sobre os dados de série temporal de entrada e não estão relacionadas à modelagem
ARIMA. Essas colunas também têm os mesmos valores em todas as linhas de saída.
Inspecionar os coeficientes do modelo
SQL
Inspecione os coeficientes do modelo de série temporal usando a
função ML.ARIMA_COEFFICIENTS.
Siga estas etapas para recuperar os coeficientes do modelo:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, cole a consulta abaixo e clique em Executar:
SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`);
A consulta leva menos de um segundo para ser concluída. Os resultados devem ficar assim:
Para mais informações sobre as colunas de saída, consulte a função
ML.ARIMA_COEFFICIENTS.
BigQuery DataFrames
Inspecione os coeficientes do modelo de série temporal usando a
função coef_.
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.
A coluna start_station_name identifica a coluna de dados de entrada para a qual série temporal foram criadas. Essa é a coluna que você especificou na opção time_series_id_col ao criar o modelo.
A coluna de saída ar_coefficients mostra os coeficientes do modelo da parte autorregressiva (AR) do modelo ARIMA. Da mesma forma, a coluna de saída ma_coefficients
mostra os coeficientes do modelo da parte de média móvel (MA, na sigla em inglês) do
modelo ARIMA. Ambas as colunas contêm valores de matriz, com comprimentos iguais a non_seasonal_p e non_seasonal_q, respectivamente. O valor intercept_or_drift é o termo constante no modelo ARIMA.
Usar o modelo para prever dados
SQL
Preveja valores futuros de série temporal usando a função ML.FORECAST.
Na consulta do GoogleSQL a seguir, a cláusula STRUCT(3 AS horizon, 0.9 AS confidence_level) indica que a consulta prevê três períodos futuros e gera um intervalo de previsão com um nível de confiança de 90%.
Siga estas etapas para prever dados com o modelo:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, cole a consulta abaixo e clique em Executar:
SELECT * FROM ML.FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level))
Clique em Executar.
A consulta leva menos de um segundo para ser concluída. Os resultados terão o seguinte formato:
Para mais informações sobre as colunas de saída, consulte a
função ML.FORECAST.
BigQuery DataFrames
Preveja valores futuros de série temporal usando a
função predict.
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.
start_station_name, a primeira coluna, anota a série temporal à qual cada
modelo de série temporal é ajustado. Cada start_station_name tem três linhas de resultados previstos, conforme especificado pelo valor horizon.
Para cada start_station_name, as linhas de saída estão em ordem cronológica pelo valor da coluna forecast_timestamp. Na previsão de série temporal, o intervalo de previsão, representado pelos valores das colunas prediction_interval_lower_bound e prediction_interval_upper_bound, é tão importante quanto o valor da coluna forecast_value. O valor forecast_value é o ponto médio do intervalo de previsão. O intervalo de previsão depende dos valores das colunas standard_error e confidence_level.
Explicar os resultados da estimativa
SQL
É possível receber métricas de explicabilidade, além de dados de previsão, usando a
função ML.EXPLAIN_FORECAST. A função ML.EXPLAIN_FORECAST prevê valores futuros da série temporal e também retorna todos os componentes separados da série temporal. Se você quiser apenas retornar dados de previsão, use a função ML.FORECAST, conforme mostrado em Usar o modelo para prever dados.
A cláusula STRUCT(3 AS horizon, 0.9 AS confidence_level) usada na função ML.EXPLAIN_FORECAST indica que a consulta prevê três períodos futuros e gera um intervalo de previsão com 90% de confiança.
Siga estas etapas para explicar os resultados do modelo:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, cole a consulta abaixo e clique em Executar:
SELECT * FROM ML.EXPLAIN_FORECAST(MODEL `bqml_tutorial.nyc_citibike_arima_model_group`, STRUCT(3 AS horizon, 0.9 AS confidence_level));
A consulta leva menos de um segundo para ser concluída. Os resultados terão o seguinte formato:
As primeiras mil linhas retornadas são todos os dados do histórico. Role os resultados para ver os dados de previsão.
As linhas de saída são ordenadas primeiro por
start_station_namee, em seguida, cronologicamente pelo valor da colunatime_series_timestamp. Na previsão de série temporal, o intervalo de previsão, representado pelos valores das colunasprediction_interval_lower_boundeprediction_interval_upper_bound, é tão importante quanto o valor da colunaforecast_value. O valorforecast_valueé o ponto médio do intervalo de previsão. O intervalo de previsão depende dos valores das colunasstandard_erroreconfidence_level.Para mais informações sobre as colunas de saída, consulte
ML.EXPLAIN_FORECAST.
BigQuery DataFrames
É possível receber métricas de explicabilidade, além de dados de previsão, usando a
função predict_explain. A função predict_explain prevê valores futuros da série temporal e também retorna todos os componentes separados da série temporal. Se você quiser apenas retornar dados de previsão, use a função predict, conforme mostrado em Usar o modelo para prever dados.
A cláusula horizon=3, confidence_level=0.9 usada na função predict_explain indica que a consulta prevê três períodos futuros e gera um intervalo de previsão com 90% de confiança.
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.
As linhas de saída são ordenadas primeiro por time_series_timestamp e, em seguida,
cronologicamente pelo valor da coluna start_station_name. Na previsão de série temporal, o intervalo de previsão, representado pelos valores das colunas prediction_interval_lower_bound e prediction_interval_upper_bound, é tão importante quanto o valor da coluna forecast_value. O valor forecast_value é o ponto médio do intervalo de previsão. O intervalo de previsão depende dos valores das colunas standard_error e confidence_level.
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 doGoogle 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:
- No console Google Cloud , acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
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.
- Saiba como escalonar um modelo univariado ao prever várias série temporal em muitas linhas.
- 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.