Neste tutorial, você aprende 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.
Este tutorial prevê uma única série temporal. Os valores previstos são calculados uma vez para cada ponto de tempo nos dados de entrada.
Neste tutorial, usamos dados do conjunto de dados públicos bigquery-public-data.epa_historical_air_quality. Esse conjunto de dados contém informações sobre material particulado diário (PM2,5), temperatura e velocidade do vento coletadas de várias cidades dos EUA.
crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar seu modelo de ML.
Console
- No console do Cloud de Confiance , acesse a página BigQuery. 
- No painel Explorer, clique no nome do seu projeto. 
- Clique em Ver 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). 
- Mantenha as configurações padrão restantes e clique em Criar conjunto de dados. 
 
bq
Para criar um novo conjunto de dados, utilize o
comando bq mk
com a sinalização --location. Para obter uma lista completa de parâmetros, consulte a
referência
comando bq mk --dataset.
- Crie um conjunto de dados chamado - bqml_tutorialcom o local dos dados definido como- USe uma descrição de- BigQuery 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 você omitir- -de- --dataset, o comando vai criar um conjunto de dados por padrão.
- 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.
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 diários de clima. Você também cria as seguintes colunas para usar como variáveis de entrada do modelo:
- date: a data da observação.
- pm25o valor médio de PM2,5 para cada dia
- wind_speed: a velocidade média do vento para cada dia
- temperature: 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 Cloud de Confiance , 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. Faça isso usando o Looker Studio.
Siga estas etapas para visualizar os dados de série temporal:
- No console do Cloud de Confiance , 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 será semelhante a este:   - No 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 valores de material particulado, representados 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 modelo de ARIMA com regressores externos. A opção auto_arima da instrução CREATE MODEL usa TRUE por padrão. Assim, 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 é aquele
com o menor
critério de informação de Akaike (AIC).
A opção data_frequency das instruções CREATE MODEL usa AUTO_FREQUENCY como padrão. 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 Cloud de Confiance , 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, você pode acessar o modelo - seattle_pm25_xreg_model. Como a consulta usa uma instrução- CREATE MODELpara 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 Cloud de Confiance , 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_qe- has_driftdefinem um modelo ARIMA no pipeline de treinamento. As colunas de saída- log_likelihood,- AICe- variancesão relevantes para o processo de ajuste do modelo ARIMA.- O algoritmo - auto.ARIMAusa o teste KPSS para determinar o melhor valor para- non_seasonal_d, que neste caso é- 1. Quando- non_seasonal_dé- 1, o algoritmo- auto.ARIMAtreina 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 como- ML.FORECASTno modelo.- A coluna - seasonal_periodsconté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 escolheu visualizar os dados de entrada.- As colunas - has_holiday_effect,- has_spikes_and_dipse- has_step_changesfornecem 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ção- decompose_time_seriesna instrução- CREATE MODELé- TRUE. Essas colunas também têm os mesmos valores em todas as linhas de saída.- A coluna - error_messagemostra os erros que ocorreram durante o processo de ajuste de- auto.ARIMA. Um possível motivo para erros é quando as colunas selecionadas- non_seasonal_p,- non_seasonal_d,- non_seasonal_qe- has_driftnão conseguem estabilizar a série temporal. Para recuperar a mensagem de erro de todos os modelos candidatos, defina a opção- show_all_candidate_modelscomo- TRUEao 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 recuperar os coeficientes do modelo:
- No console do Cloud de Confiance , 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_coefficientsmostra os coeficientes do modelo da parte autoregressiva (AR) do modelo ARIMA. Da mesma forma, a coluna de saída- ma_coefficientsmostra 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 a- non_seasonal_pe- non_seasonal_q, respectivamente. Na saída da função- ML.ARIMA_EVALUATE, você viu que o melhor modelo tem um valor- non_seasonal_pde- 0e um valor- non_seasonal_qde- 5. Portanto, na saída- ML.ARIMA_COEFFICIENTS, o valor- ar_coefficientsé uma matriz vazia e o valor- ma_coefficientsé uma matriz de cinco elementos. O valor- intercept_or_drifté o termo constante no modelo ARIMA.- As colunas de saída - processed_input,- weighte- category_weightsmostram 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 coluna- weight. Se o atributo for categórico, o valor- category_weightsserá 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
Preveja valores futuros de 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 Cloud de Confiance , 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 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_bounde- prediction_interval_upper_bound, é tão importante quanto o valor da coluna- forecast_value. O valor- forecast_valueé o ponto central do intervalo de previsão. O intervalo de previsão depende dos valores das colunas- standard_errore- confidence_level.- Para mais informações sobre as colunas de saída, consulte a função - ML.FORECAST.
Avaliar a acurácia da previsão
Avalie a precisão da previsão do modelo usando a função ML.EVALUATE.
Na consulta 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 acurácia do modelo:
- No console do Cloud de Confiance , 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 serão parecidos com isto:   - 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 de série temporal e também retorna todos os componentes separados delas.
Semelhante à 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 Cloud de Confiance , 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.