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.
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ê quisesse prever o clima e especificasse uma coluna com dados de estado, os dados previstos teriam previsões para todos os pontos de tempo do Estado A, depois valores previstos para todos os pontos de tempo do Estado B e assim por diante. Se você quisesse prever o clima e especificar colunas com dados de estado e cidade, os dados previstos teriam previsões para todos os pontos de tempo do Estado A e da Cidade A, depois valores previstos para todos os pontos de tempo do Estado A e da Cidade B, e assim por diante.
Este tutorial usa dados das tabelas públicas
bigquery-public-data.iowa_liquor_sales.sales
e
bigquery-public-data.covid19_weathersource_com.postal_code_day_history
. A tabela bigquery-public-data.iowa_liquor_sales.sales
contém
dados de vendas de bebidas alcoólicas coletados de várias cidades no estado de Iowa. A tabela bigquery-public-data.covid19_weathersource_com.postal_code_day_history
contém dados históricos sobre o clima, como temperatura e umidade, de todo o mundo.
Antes de ler este tutorial, recomendamos que você leia Prever uma única série temporal com um modelo multivariável.
Objetivos
Este tutorial vai orientar você nas seguintes tarefas:
- Criação de um modelo de série temporal para prever pedidos de lojas de bebidas alcoólicas usando a
instrução
CREATE MODEL
. - Extrair os valores de pedidos previstos do modelo usando a
função
ML.FORECAST
. - 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. - Avalie a precisão do modelo usando a
função
ML.EVALUATE
. - Detecte anomalias usando o modelo com a
função
ML.DETECT_ANOMALIES
.
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
- 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.
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 das tabelas bigquery-public-data.iowa_liquor_sales.sales
e bigquery-public-data.covid19_weathersource_com.postal_code_day_history
para analisar como o clima afeta o tipo e o número de itens encomendados por lojas de bebidas alcoólicas. Você também cria as seguintes colunas adicionais que podem ser usadas como variáveis de entrada para o modelo:
date
: a data do pedidostore_number
: o número exclusivo da loja que fez o pedidoitem_number
: o número exclusivo do item que foi encomendadobottles_sold
: o número de garrafas encomendadas do item associadotemperature
: a temperatura média no local da loja na data do pedidohumidity
: a umidade média no local da loja na data do pedido
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 OR REPLACE TABLE `bqml_tutorial.iowa_liquor_sales_with_weather` AS WITH sales AS ( SELECT DATE, store_number, item_number, bottles_sold, SAFE_CAST(SAFE_CAST(zip_code AS FLOAT64) AS INT64) AS zip_code FROM `bigquery-public-data.iowa_liquor_sales.sales` AS sales WHERE SAFE_CAST(zip_code AS FLOAT64) IS NOT NULL ), aggregated_sales AS ( SELECT DATE, store_number, item_number, ANY_VALUE(zip_code) AS zip_code, SUM(bottles_sold) AS bottles_sold, FROM sales GROUP BY DATE, store_number, item_number ), weather AS ( SELECT DATE, SAFE_CAST(postal_code AS INT64) AS zip_code, avg_temperature_air_2m_f AS temperature, avg_humidity_specific_2m_gpkg AS humidity, FROM `bigquery-public-data.covid19_weathersource_com.postal_code_day_history` WHERE SAFE_CAST(postal_code AS INT64) IS NOT NULL ), avg_weather AS ( SELECT DATE, zip_code, AVG(temperature) AS temperature, AVG(humidity) AS humidity, FROM weather GROUP BY DATE, zip_code ) SELECT aggregated_sales.date, aggregated_sales.store_number, aggregated_sales.item_number, aggregated_sales.bottles_sold, avg_weather.temperature AS temperature, avg_weather.humidity AS humidity FROM aggregated_sales LEFT JOIN avg_weather ON aggregated_sales.zip_code=avg_weather.zip_code AND aggregated_sales.DATE=avg_weather.DATE;
Criar o modelo de série temporal
Crie um modelo de série temporal para prever as garrafas vendidas para cada combinação
de ID da loja e ID do item, para cada data na
tabela bqml_tutorial.iowa_liquor_sales_with_weather
antes de
1º de setembro de 2022. Use a temperatura e a umidade média da loja em cada data como recursos a serem avaliados durante a previsão. Há cerca de um milhão de combinações distintas de número de item e número de loja na tabela bqml_tutorial.iowa_liquor_sales_with_weather
, o que significa que há um milhão de série temporal diferentes para prever.
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.multi_time_series_arimax_model` OPTIONS( model_type = 'ARIMA_PLUS_XREG', time_series_id_col = ['store_number', 'item_number'], time_series_data_col = 'bottles_sold', time_series_timestamp_col = 'date' ) AS SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE < DATE('2022-09-01');
A consulta leva cerca de 38 minutos para ser concluída. Depois disso, o modelo
multi_time_series_arimax_model
aparece no painel Explorer. Como a consulta usa uma instruçãoCREATE MODEL
para criar um modelo, você não vai ver os resultados da consulta.
Usar o modelo para prever dados
Prever valores futuros da série temporal usando a função ML.FORECAST
.
Na consulta do GoogleSQL a seguir, a cláusula STRUCT(5 AS horizon, 0.8 AS confidence_level)
indica que a consulta prevê cinco pontos de tempo futuros e gera um intervalo de previsão com um nível de confiança de 80%.
A assinatura dos dados de entrada da função ML.FORECAST
é
igual à assinatura dos dados de treinamento usados para criar
o modelo. A coluna bottles_sold
não está incluída na entrada, porque
são os dados que o modelo está tentando prever.
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.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE>=DATE('2022-09-01') ) );
A resposta deve ficar assim:
As linhas de saída são ordenadas pelo valor
store_number
, depois pelo valoritem_ID
e, em seguida, em ordem cronológica pelo valor da colunaforecast_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
ML.FORECAST
.
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(5 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.
A função ML.EXPLAIN_FORECAST
fornece dados históricos e de previsão. Para ver apenas os dados de previsão, adicione a opção time_series_type
à consulta e especifique forecast
como o valor da opção.
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.multi_time_series_arimax_model`, STRUCT (5 AS horizon, 0.8 AS confidence_level), ( SELECT * EXCEPT (bottles_sold) FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
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
ML.EXPLAIN_FORECAST
.
Avaliar a precisão da previsão
Avalie a precisão da previsão do modelo executando-o em dados em que o modelo não foi treinado. Para fazer isso, use a função
ML.EVALUATE
. A função ML.EVALUATE
avalia cada série temporal de forma independente.
Na consulta do GoogleSQL abaixo, 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.multi_time_series_arimax_model`, ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
Os resultados vão ficar assim:
Para mais informações sobre as colunas de saída, consulte
ML.EVALUATE
.
Usar o modelo para detectar anomalias
Detecte anomalias nos dados de treinamento usando a função ML.DETECT_ANOMALIES
.
Na consulta a seguir, a cláusula STRUCT(0.95 AS anomaly_prob_threshold)
faz com que a função ML.DETECT_ANOMALIES
identifique pontos de dados anormais
com um nível de confiança de 95%.
Siga estas etapas para detectar anomalias nos dados de treinamento:
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.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold) );
Os resultados vão ficar assim:
A coluna
anomaly_probability
nos resultados identifica a probabilidade de um determinado valor da colunabottles_sold
ser anormal.Para mais informações sobre as colunas de saída, consulte
ML.DETECT_ANOMALIES
.
Detectar anomalias em novos dados
Detecte anomalias nos novos dados fornecendo dados de entrada para a
função ML.DETECT_ANOMALIES
. Os novos dados precisam ter a mesma assinatura de dados que os dados de treinamento.
Siga estas etapas para detectar anomalias em novos dados:
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.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold), ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
Os resultados vão ficar assim:
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.