Neste tutorial, você aprenderá a criar um modelo de série temporal multivariada
(ARIMA_PLUS_XREG
) para realizar previsões de série temporal usando as seguintes tabelas de amostra no conjunto de dados epa_historical_air_quality
:
- Tabela de amostra
epa_historical_air_quality.pm25_nonfrm_daily_summary
. - Tabela de amostra
epa_historical_air_quality.wind_daily_summary
. - Tabela de amostra
epa_historical_air_quality.temperature_daily_summary
.
O conjunto de dados epa_historical_air_quality
contém informações diárias de PM 2.5, temperatura e velocidade do
vento coletadas de várias cidades dos EUA.
Objetivos
Neste tutorial, você usará:
- A instrução
CREATE MODEL
: para criar um modelo de série temporal. - A função
ML.ARIMA_EVALUATE
: para inspecionar as informações de avaliação relacionadas ao ARIMA no modelo. - A função
ML.ARIMA_COEFFICIENTS
: para inspecionar os coeficientes do modelo. - A função
ML.FORECAST
: para prever o PM 2.5 diariamente. - A função
ML.EVALUATE
: para avaliar o modelo com dados reais. - A função
ML.EXPLAIN_FORECAST
: extrair vários componentes da série temporal (como sazonalidade, tendências e atribuições de recursos) que podem ser usados para explicar os resultados da previsão. de dois minutos.
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.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
- O BigQuery é ativado automaticamente em novos projetos.
Para ativar o BigQuery em um projeto preexistente, acesse
Enable the BigQuery API.
Etapa 1: criar 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.
Etapa 2: criar uma tabela de série temporal com recursos extras
Os dados de PM 2.5, temperatura e velocidade do vento estão em tabelas separadas.
Para simplificar as consultas a seguir, crie uma tabela bqml_tutorial.seattle_air_quality_daily
mesclando essas tabelas,
com as seguintes colunas:
- date: a data da observação
- PM 2.5: o valor médio de PM 2.5 de cada dia
- wind_speed: a velocidade média do vento de cada dia
- temperature: a temperatura mais alta de cada dia
A nova tabela tem dados diários de 11/08/2009 a 31/01/2022.
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.
#standardSQL 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)
Para executar a consulta, siga estas etapas:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
Clique em Executar.
Etapa 3 (opcional): visualizar a série temporal que você quer prever
Antes de criar o modelo, é interessante ver como fica a série temporal de entrada. Faça isso usando o Looker Studio.
Na consulta GoogleSQL padrão a seguir, a
cláusula FROM bqml_tutorial.seattle_air_quality_daily
indica que você está consultando a tabela seattle_air_quality_daily
no
conjunto de dados bqml_tutorial
que você acabou de criar.
#standardSQL SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`
Para executar a consulta, siga estas etapas:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL SELECT * FROM `bqml_tutorial.seattle_air_quality_daily`
Clique em Executar.
Depois que essa consulta for executada, a saída será semelhante à captura de tela a seguir. Na captura de tela, é possível conferir que essa série temporal tem 3960 pontos de dados. Clique no botão Explorar dados e, em seguida, em Explorar com o Looker Studio. O Looker Studio é aberto em uma nova guia. Conclua as etapas a seguir na nova guia.
No painel Gráfico, escolha Gráfico de série temporal:
No painel CONFIGURAÇÃO, abaixo do painel Gráfico, acesse a seção Métrica. Adicione os campos pm25, pm25 e pm25 e remova a métrica padrão pm25. Também é possível definir um período personalizado, como de 1° de janeiro de 2019 a 31 de dezembro de 2021, para tornar a série temporal mais curta. Isso é mostrado na figura a seguir.
Depois que você concluir essas etapas, o gráfico a seguir será exibido. O gráfico mostra que a série temporal de entrada tem um padrão sazonal semanal.
Etapa 4: criar seu modelo de série temporal
Em seguida, crie um modelo de série temporal usando os dados de qualidade do ar acima.
A consulta do GoogleSQL a seguir cria um modelo usado para prever
pm25
.
A cláusula CREATE MODEL
cria e treina um modelo chamado bqml_tutorial.seattle_pm25_xreg_model
.
#standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.seattle_pm25_xreg_model` OPTIONS ( MODEL_TYPE = 'ARIMA_PLUS_XREG', time_series_timestamp_col = 'date', time_series_data_col = 'pm25') AS SELECT date, pm25, temperature, wind_speed FROM `bqml_tutorial.seattle_air_quality_daily` WHERE date BETWEEN DATE('2012-01-01') AND DATE('2020-12-31')
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. Por padrão,
auto_arima=TRUE
,
para que o algoritmo auto.ARIMA
ajuste automaticamente os hiperparâmetros nos modelos
ARIMA_PLUS_XREG
. O algoritmo se encaixa em dezenas de modelos candidatos e escolhe
o melhor com o menor
índice de informações do Akaike (AIC, na sigla em inglês).
Além disso, como o padrão é
data_frequency='AUTO_FREQUENCY'
, o processo de treinamento infere automaticamente
a frequência de dados da série temporal de entrada.
Execute a consulta CREATE MODEL
para criar e treinar seu modelo:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
Clique em Executar.
A consulta leva cerca de 20 segundos para ser concluída. Depois disso, o modelo (
seattle_pm25_xreg_model
) aparece no painel de navegação. Como a consulta usa uma instruçãoCREATE MODEL
para criar um modelo, não é possível ver os resultados da consulta.
Etapa 5: inspecionar as métricas de avaliação de todos os modelos avaliados
Depois de criar seu modelo, use a função
ML.ARIMA_EVALUATE
para ver as métricas de avaliação de todos os modelos candidatos avaliados
durante o processo de ajuste automático de hiperparâmetros.
Na consulta do GoogleSQL a seguir, a cláusula FROM
usa a
função ML.ARIMA_EVALUATE
no seu modelo, bqml_tutorial.seattle_pm25_xreg_model
. Por padrão, essa
consulta retorna as métricas de avaliação de todos os modelos candidatos.
Para executar a consulta ML.ARIMA_EVALUATE
,
siga estas etapas:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL SELECT * FROM ML.ARIMA_EVALUATE(MODEL `bqml_tutorial.seattle_pm25_xreg_model`)
Clique em Executar.
Após concluir a consulta, clique na guia Resultados abaixo da área de texto da consulta. Os resultados serão semelhantes à seguinte captura de tela:
Os resultados incluem as seguintes colunas:
non_seasonal_p
non_seasonal_d
non_seasonal_q
has_drift
log_likelihood
AIC
variance
seasonal_periods
has_holiday_effect
has_spikes_and_dips
has_step_changes
error_message
As quatro colunas a seguir (
non_seasonal_{p,d,q}
ehas_drift
) definem um modelo ARIMA no pipeline de treinamento. As três métricas seguintes (log_likelihood
,AIC
evariance
) são relevantes para o processo de ajuste do modelo ARIMA.O algoritmo
auto.ARIMA
usa primeiro o teste KPSS para decidir que o melhor valor paranon_seasonal_d
é 1. Quandonon_seasonal_d
for 1, o auto.ARIMA treinará 42 modelos ARIMA candidatos em paralelo. Quandonon_seasonal_d
não for 1, o auto.ARIMA treinará 21 modelos candidatos diferentes. Neste exemplo, todos os 42 modelos candidatos são válidos. Portanto, a saída contém 42 linhas, em que cada linha está associada a um modelo ARIMA candidato. Para algumas séries temporais, alguns modelos candidatos são inválidos porque não são estáticos ou não podem ser invertidos. Esses modelos inválidos são excluídos da saída, o que faz com que ela tenha menos de 42 linhas. Esses modelos candidatos são ordenados pelo AIC na ordem crescente. O modelo na primeira linha tem o AIC mais baixo e é considerado o melhor modelo. Esse melhor modelo é salvo como o modelo final. Ele é usado quando você chamaML.FORECAST
,ML.EVALUATE
eML.ARIMA_COEFFICIENTS
, conforme mostrado nas etapas a seguir.A coluna
seasonal_periods
é sobre o padrão sazonal dentro da série temporal de entrada. 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 está dentro das nossas expectativas, conforme descrito anteriormente na etapa dois.As colunas
has_holiday_effect
,has_spikes_and_dips
ehas_step_changes
são preenchidas somente quandodecompose_time_series=TRUE
. Eles são relacionados ao efeito de fim de ano, picos e quedas e mudanças na etapa dentro da série temporal de entrada, que não estão relacionados à modelagem ARIMA. Portanto, elas são todas iguais em todas as linhas de saída, exceto nos modelos com falha.A coluna
error_message
mostra que o possível erro incorrido durante o processo de ajuste deauto.ARIMA
. Um possível motivo é que as colunas selecionadasnon_seasonal_p
,non_seasonal_d
,non_seasonal_q
ehas_drift
não podem estabilizar a série temporal. Para recuperar a mensagem de erro possível de todos os modelos candidatos, definashow_all_candidate_models=true
.
Etapa 6: inspecionar os coeficientes do seu modelo
A função ML.ARIMA_COEFFICIENTS
recupera os coeficientes do modelo ARIMA_PLUS,
bqml_tutorial.seattle_pm25_xreg_model
. ML.ARIMA_COEFFICIENTS
usa o modelo como a
única entrada.
Execute a consulta ML.ARIMA_COEFFICIENTS
:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL SELECT * FROM ML.ARIMA_COEFFICIENTS(MODEL `bqml_tutorial.seattle_pm25_xreg_model`)
Clique em Executar.
Os resultados vão ter a aparência abaixo:
Os resultados incluem as seguintes colunas:
ar_coefficients
ma_coefficients
intercept_or_drift
processed_input
weight
category_weights.category
category_weights.weight
ar_coefficients
mostra os coeficientes do modelo da parte autoregressiva (AR) do modelo ARIMA. Da mesma forma,ma_coefficients
mostra os coeficientes do modelo da parte de média móvel (MA, na sigla em inglês). Ambos são matrizes, com comprimentos iguais anon_seasonal_p
enon_seasonal_q
, respectivamente. Na saída deML.ARIMA_EVALUATE
, assim como na linha superior, o melhor modelo tem umnon_seasonal_p
de 0 e umnon_seasonal_q
de 5. Portanto,ar_coefficients
é uma matriz vazia ema_coefficients
é uma matriz de comprimento 5. Ointercept_or_drift
é o termo constante no modelo ARIMA.processed_input
e as colunasweight
ecategory_weights
correspondentes 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,category_weights
será umARRAY
deSTRUCT
, em queSTRUCT
contém os nomes e pesos das categorias.
Etapa 7: usar seu modelo para prever a série temporal
A função ML.FORECAST
prevê valores de série temporal futuros com um intervalo de previsão usando
o modelo bqml_tutorial.seattle_pm25_xreg_model
e valores de atributos futuros.
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%. ML.FORECAST
usa o modelo, os valores de atributos futuros,
bem como alguns argumentos opcionais.
Para executar a consulta ML.FORECAST
, use as seguintes etapas:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL 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') ))
Clique em Executar.
Os resultados vão ter a aparência abaixo:
Os resultados incluem as seguintes colunas:
forecast_timestamp
forecast_value
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_upper_bound
As linhas de saída são ordenadas na ordem cronológica de
forecast_timestamp
. Na previsão de série temporal, o intervalo de previsão, capturado pelos limites mínimo e máximo, é tão importante quanto oforecast_value
. Oforecast_value
é o ponto central do intervalo de previsão. O intervalo de previsão depende destandard_error
econfidence_level
.
Etapa 8: avaliar a precisão da previsão com dados reais
Para avaliar a precisão da previsão com os dados reais, é possível usar
a função ML.EVALUATE
com seu modelo, bqml_tutorial.seattle_pm25_xreg_model
e a tabela de dados
real.
Para executar a consulta ML.EVALUATE
, use as seguintes etapas:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL 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))
O segundo parâmetro consiste nos dados reais com os atributos futuros, que são usados para prever os valores futuros a serem comparados com os dados reais. O terceiro parâmetro é uma estrutura de parâmetros para essa função.
Clique em Executar.
Os resultados vão ter a aparência abaixo:
Etapa 9: explicar os resultados da previsão
Para entender como a série temporal é prevista, a função ML.EXPLAIN_FORECAST
prevê valores futuros da série temporal com um intervalo de previsão usando seu modelo bqml_tutorial.seattle_pm25_xreg_model
e, ao mesmo tempo, retorna todos os
componentes separados da série temporal.
Como a função ML.FORECAST
, a
cláusula STRUCT(30 AS horizon, 0.8 AS confidence_level)
indica que a
consulta prevê 30 pontos no tempo futuro e gera um intervalo de previsão
com 80% de confiança. A função ML.EXPLAIN_FORECAST
usa o modelo,
os valores de recursos futuros e alguns argumentos opcionais como entrada.
Para executar a consulta ML.EXPLAIN_FORECAST
, use as seguintes etapas:
No console do Google Cloud, clique no botão Escrever nova consulta.
Insira a seguinte consulta do GoogleSQL na área de texto do Editor de consultas.
#standardSQL 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') ))
Clique em Executar.
A consulta leva menos de um segundo para ser concluída. Os resultados terão o seguinte formato:
Os resultados incluem as seguintes colunas:
time_series_timestamp
time_series_type
time_series_data
time_series_adjusted_data
standard_error
confidence_level
prediction_interval_lower_bound
prediction_interval_lower_bound
trend
seasonal_period_yearly
seasonal_period_quarterly
seasonal_period_monthly
seasonal_period_weekly
seasonal_period_daily
holiday_effect
spikes_and_dips
step_changes
residual
attribution_temperature
attribution_wind_speed
attribution___INTERCEPT__
As linhas de saída são ordenadas na ordem cronológica de
time_series_timestamp
. Componentes diferentes são listados como colunas da saída. Para mais informações, consulteML.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
) e 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 realizar múltiplas previsões de séries temporais com uma única consulta de dados de viagens do Citi Bike de Nova York.
- Saiba como acelerar o ARIMA_PLUS para ativar a previsão de um milhão de séries temporais em algumas horas.
- Para saber mais sobre machine learning, consulte o Curso intensivo de machine learning.
- Para uma visão geral do BigQuery ML, consulte Introdução ao BigQuery ML.
- Para saber mais, consulte Como usar o console do Google Cloud.