Neste tutorial, você vai aprender a usar um modelo de série temporal multivariada para prever o valor futuro de uma determinada coluna com base no valor histórico de vários atributos de entrada.
Neste tutorial, você vai aprender a fazer a previsão de uma única série temporal. Os valores previstos são calculados uma vez para cada ponto de tempo nos dados de entrada.
Este tutorial usa dados do conjunto de dados público bigquery-public-data.epa_historical_air_quality
. Esse conjunto de dados contém informações diárias sobre material particulado (PM2,5), temperatura e velocidade do vento coletadas de várias cidades dos EUA.
Objetivos
Este tutorial vai orientar você nas seguintes tarefas:
- Criação de um modelo de série temporal para prever valores de PM2,5 usando a
instrução
CREATE MODEL
. - Avalie as informações da média móvel integrada autoregressiva (ARIMA)
no modelo usando a
função
ML.ARIMA_EVALUATE
. - Inspecionar os coeficientes do modelo usando a
função
ML.ARIMA_COEFFICIENTS
. - Recuperar os valores de PM2,5 previstos do modelo usando a
função
ML.FORECAST
. - Avalie a precisão do modelo usando a
função
ML.EVALUATE
. - Extrair componentes da série temporal, como sazonalidade, tendência e
atribuições de recursos, usando a
função
ML.EXPLAIN_FORECAST
. É possível inspecionar esses componentes de série temporal para explicar os valores previstos.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:
- 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
- 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
Crie uma tabela de dados que possa ser usada para treinar e avaliar o modelo. Essa tabela combina colunas de várias tabelas no conjunto de dados bigquery-public-data.epa_historical_air_quality
para fornecer dados meteorológicos diários. Você também cria as colunas a seguir para usar como variáveis de entrada do modelo:
date
: a data da observação.pm25
o valor médio de PM2,5 de cada diawind_speed
: a velocidade média do vento para cada diatemperature
: a temperatura mais alta de cada dia
Na consulta do GoogleSQL a seguir, a
cláusula FROM bigquery-public-data.epa_historical_air_quality.*_daily_summary
indica que você está consultando as tabelas *_daily_summary
no
conjunto de dados epa_historical_air_quality
. Essas tabelas são tabelas particionadas.
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 TABLE `bqml_tutorial.seattle_air_quality_daily` AS WITH pm25_daily AS ( SELECT avg(arithmetic_mean) AS pm25, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.pm25_nonfrm_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Acceptable PM2.5 AQI & Speciation Mass' GROUP BY date_local ), wind_speed_daily AS ( SELECT avg(arithmetic_mean) AS wind_speed, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.wind_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Wind Speed - Resultant' GROUP BY date_local ), temperature_daily AS ( SELECT avg(first_max_value) AS temperature, date_local AS date FROM `bigquery-public-data.epa_historical_air_quality.temperature_daily_summary` WHERE city_name = 'Seattle' AND parameter_name = 'Outdoor Temperature' GROUP BY date_local ) SELECT pm25_daily.date AS date, pm25, wind_speed, temperature FROM pm25_daily JOIN wind_speed_daily USING (date) JOIN temperature_daily USING (date);
Visualizar os dados de entrada
Antes de criar o modelo, você pode visualizar os dados de série temporal de entrada para ter uma ideia da distribuição. Para isso, use o Looker Studio.
Siga estas etapas para visualizar os dados da série temporal:
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 `bqml_tutorial.seattle_air_quality_daily`;
Quando a consulta for concluída, clique em Explorar dados > Explorar com o Looker Studio. O Looker Studio é aberto em uma nova guia. Conclua as etapas a seguir na nova guia.
No Looker 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 os campos pm25, temperature e wind_speed e remova a métrica padrão Contagem de registros. O gráfico resultante é semelhante a este:
Analisando o gráfico, é possível ver que a série temporal de entrada tem um padrão sazonal semanal.
Criar o modelo de série temporal
Crie um modelo de série temporal para prever os valores de partículas, conforme representado
pela coluna pm25
, usando os valores das colunas pm25
, wind_speed
e temperature
como variáveis de entrada. Treine o modelo com os dados de qualidade do ar da tabela bqml_tutorial.seattle_air_quality_daily
, selecionando os dados coletados entre 1º de janeiro de 2012 e 31 de dezembro de 2020.
Na consulta a seguir, a cláusula OPTIONS(model_type='ARIMA_PLUS_XREG',
time_series_timestamp_col='date', ...)
indica que você está criando um ARIMA com um modelo de regressores externos. A
opção auto_arima
da instrução CREATE MODEL
é padrão para TRUE
. Portanto, o algoritmo auto.ARIMA
ajusta automaticamente os hiperparâmetros no modelo. O algoritmo
se encaixa em dezenas de modelos candidatos e escolhe o melhor, que é o modelo
com o menor
critério de informação de Akaike (AIC).
A
opção data_frequency
das instruções CREATE MODEL
é padrão para AUTO_FREQUENCY
. Assim, o
processo de treinamento infere automaticamente a frequência de dados da série temporal
de entrada.
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.seattle_pm25_xreg_model` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS_XREG', time_series_timestamp_col = 'date', # Identifies the column that contains time points time_series_data_col = 'pm25') # Identifies the column to forecast AS SELECT date, # The column that contains time points pm25, # The column to forecast temperature, # Temperature input to use in forecasting wind_speed # Wind speed input to use in forecasting FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31');
A consulta leva cerca de 20 segundos para ser concluída. Depois disso, o modelo
seattle_pm25_xreg_model
aparece no painel Explorer. Como a consulta usa uma instruçãoCREATE MODEL
para criar um modelo, não é possível ver os resultados da consulta.
Avaliar os modelos candidatos
Avalie os modelos de série temporal usando a função ML.ARIMA_EVALUATE
. A função ML.ARIMA_EVALUATE
mostra as métricas de avaliação de
todos os modelos candidatos avaliados 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 a seguir e clique em Executar:
SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);
A resposta deve ficar assim:
As colunas de saída
non_seasonal_p
,non_seasonal_d
,non_seasonal_q
ehas_drift
definem um modelo ARIMA no pipeline de treinamento. As colunas de saídalog_likelihood
,AIC
evariance
são relevantes para o processo de ajuste do modelo ARIMA.O algoritmo
auto.ARIMA
usa o teste KPSS para determinar o melhor valor paranon_seasonal_d
, que neste caso é1
. Quandonon_seasonal_d
é1
, o algoritmoauto.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 AIC mais baixo e é considerado o melhor modelo. O melhor modelo é salvo como o modelo final e é usado quando você chama funções comoML.FORECAST
no modelo.A coluna
seasonal_periods
contém informações sobre o padrão sazonal identificado nos dados de série temporal. Ele não tem nada a ver com a modelagem ARIMA. Portanto, ele tem o mesmo valor em todas as linhas de saída. Ele informa um padrão semanal, que concorda com os resultados que você viu se você escolheu visualizar os dados de entrada.As colunas
has_holiday_effect
,has_spikes_and_dips
ehas_step_changes
fornecem informações sobre os dados de série temporal de entrada e não estão relacionadas à modelagem ARIMA. Essas colunas são retornadas porque o valor da opçãodecompose_time_series
na instruçãoCREATE MODEL
éTRUE
. Essas colunas também têm os mesmos valores em todas as linhas de saída.A coluna
error_message
mostra todos os erros que ocorreram durante o processo de ajuste deauto.ARIMA
. Um possível motivo para erros é quando as colunas selecionadasnon_seasonal_p
,non_seasonal_d
,non_seasonal_q
ehas_drift
não conseguem estabilizar a série temporal. Para recuperar a mensagem de erro de todos os modelos candidatos, defina a opçãoshow_all_candidate_models
comoTRUE
ao criar o modelo.Para mais informações sobre as colunas de saída, consulte a função
ML.ARIMA_EVALUATE
.
Inspecionar os coeficientes do modelo
Inspecione os coeficientes do modelo de série temporal usando a
função ML.ARIMA_COEFFICIENTS
.
Siga estas etapas para extrair os coeficientes do 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.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`);
A resposta deve ficar assim:
A coluna de saída
ar_coefficients
mostra os coeficientes do modelo da parte autoregressiva (AR) do modelo ARIMA. Da mesma forma, a coluna de saídama_coefficients
mostra os coeficientes do modelo da parte de média móvel (MA) do modelo ARIMA. Ambas as colunas contêm valores de matriz, com comprimentos iguais anon_seasonal_p
enon_seasonal_q
, respectivamente. Você viu na saída da funçãoML.ARIMA_EVALUATE
que o melhor modelo tem um valor denon_seasonal_p
de0
e um valor denon_seasonal_q
de5
. Portanto, na saídaML.ARIMA_COEFFICIENTS
, o valorar_coefficients
é uma matriz vazia e o valorma_coefficients
é uma matriz de cinco elementos. O valorintercept_or_drift
é o termo constante no modelo ARIMA.As colunas de saída
processed_input
,weight
ecategory_weights
mostram os pesos de cada atributo e a interceptação no modelo de regressão linear. Se o atributo for numérico, o peso estará na colunaweight
. Se o atributo for categórico, o valorcategory_weights
será uma matriz de valores de struct, em que cada valor de struct contém o nome e o peso de uma determinada categoria.Para mais informações sobre as colunas de saída, consulte a função
ML.ARIMA_COEFFICIENTS
.
Usar o modelo para prever dados
Prever valores futuros da série temporal usando a função ML.FORECAST
.
Na consulta GoogleSQL padrão a seguir, a
cláusula STRUCT(30 AS horizon, 0.8 AS confidence_level)
indica que a consulta
prevê 30 períodos futuros e gera um intervalo de previsão
com um nível de confiança de 80%.
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 a seguir e clique em Executar:
SELECT * FROM ML.FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ));
A resposta deve ficar assim:
As linhas de saída estão na 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 colunasprediction_interval_lower_bound
eprediction_interval_upper_bound
, é tão importante quanto o valor da colunaforecast_value
. O valorforecast_value
é o ponto central do intervalo de previsão. O intervalo de previsão depende dos valores das colunasstandard_error
econfidence_level
.Para mais informações sobre as colunas de saída, consulte a função
ML.FORECAST
.
Avaliar a precisão da previsão
Avalie a precisão da previsão do modelo usando a função ML.EVALUATE
.
Na consulta do GoogleSQL a seguir, a segunda instrução SELECT
fornece os dados com os atributos futuros, que são usados
para prever os valores futuros a serem comparados com os dados reais.
Siga estas etapas para avaliar a precisão do 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.seattle_pm25_xreg_model`, ( SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ), STRUCT( TRUE AS perform_aggregation, 30 AS horizon));
Os resultados vão ficar assim:
Para mais informações sobre as colunas de saída, consulte a função
ML.EVALUATE
.
Explicar os resultados da previsão
É 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.
Assim como a função ML.FORECAST
, a cláusula STRUCT(30 AS horizon, 0.8 AS confidence_level)
usada na função ML.EXPLAIN_FORECAST
indica que a consulta prevê 30 pontos no tempo futuro e gera um intervalo de previsão com 80% 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 a seguir e clique em Executar:
SELECT * FROM ML.EXPLAIN_FORECAST( MODEL `bqml_tutorial.seattle_pm25_xreg_model`, STRUCT(30 AS horizon, 0.8 AS confidence_level), ( SELECT date, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date > DATE('2020-12-31') ));
A resposta deve ficar assim:
As linhas de saída são ordenadas cronologicamente pelo valor da coluna
time_series_timestamp
.Para mais informações sobre as colunas de saída, consulte a função
ML.EXPLAIN_FORECAST
.
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 no lado direito da janela. Essa ação exclui o conjunto, 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
- Aprenda a prever várias série temporal com um modelo univariado
- Aprenda a dimensionar 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.