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ê quiser prever o clima e especificar uma coluna que contém dados de estado, os dados previstos vão conter previsões para todos os pontos de tempo do Estado A, depois os valores previstos para todos os pontos de tempo do Estado B e assim por diante. Se você quiser prever o clima e especificar colunas que contenham dados de estado e cidade, os dados previstos vão conter previsões para todos os momentos do Estado A e da Cidade A, depois os valores previstos para todos os momentos do Estado A e da Cidade B, e assim por diante.
Neste tutorial, usamos 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 do estado de Iowa. A tabela bigquery-public-data.covid19_weathersource_com.postal_code_day_history contém dados meteorológicos históricos, 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 multivariado.
Objetivos
Este tutorial vai orientar você nas tarefas a seguir:
- Criar um modelo de série temporal para prever pedidos de lojas de bebidas usando a
instrução
CREATE MODEL. - Recuperar os valores de pedido previstos do modelo usando a
função
ML.FORECAST. - Recuperar 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 acurácia 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
-
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.
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" } }
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 pedidos por lojas de bebidas. Você também cria as seguintes colunas adicionais que podem ser usadas como
variáveis de entrada para o modelo:
date: a data do pedido.store_number: o número exclusivo da loja que fez o pedido.item_number: o número exclusivo do item que foi pedido.bottles_sold: o número de garrafas pedidas do item associado.temperature: a temperatura média no local da loja na data do pedido.humidity: a umidade média na localização 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 abaixo 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 country = 'US' AND SAFE_CAST(postal_code AS INT64) IS NOT NULL ) SELECT aggregated_sales.date, aggregated_sales.store_number, aggregated_sales.item_number, aggregated_sales.bottles_sold, weather.temperature AS temperature, weather.humidity AS humidity FROM aggregated_sales LEFT JOIN weather ON aggregated_sales.zip_code=weather.zip_code AND aggregated_sales.DATE=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édias da localização da loja em cada data como atributos para avaliar durante a estimativa. Há cerca de 1 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á 1 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 abaixo 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, você poderá acessar o modelo
multi_time_series_arimax_model. Como a consulta usa uma instruçãoCREATE MODELpara criar um modelo, não é possível ver os resultados da consulta.
Usar o modelo para prever dados
Preveja valores futuros de série temporal usando a função ML.FORECAST.
Na consulta GoogleSQL a seguir, a cláusula STRUCT(5 AS horizon, 0.8 AS confidence_level) indica que a consulta prevê cinco períodos futuros e gera um intervalo de previsão com um nível de confiança de 80%.
A assinatura dos dados de entrada para a função ML.FORECAST é
a mesma dos dados de treinamento usados para criar
o modelo. A coluna bottles_sold não está incluída na entrada, porque esses 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 abaixo 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 estão em ordem pelo valor
store_number, depois pelo valoritem_IDe, 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_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.FORECAST.
Explicar os resultados da estimativa
É 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.
Semelhante à 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 abaixo 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 das previsões
Avalie a acurácia de previsão do modelo executando-o em dados que não foram usados no treinamento. Para isso, use a função
ML.EVALUATE. A função ML.EVALUATE avalia cada série temporal de forma independente.
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 acurácia 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.EVALUATE ( model `bqml_tutorial.multi_time_series_arimax_model`, ( SELECT * FROM `bqml_tutorial.iowa_liquor_sales_with_weather` WHERE DATE >= DATE('2022-09-01') ) );
A resposta deve 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 anômalos
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 abaixo e clique em Executar:
SELECT * FROM ML.DETECT_ANOMALIES ( model `bqml_tutorial.multi_time_series_arimax_model`, STRUCT (0.95 AS anomaly_prob_threshold) );
A resposta deve ficar assim:
A coluna
anomaly_probabilitynos resultados identifica a probabilidade de um determinado valor da colunabottles_soldser anômalo.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 abaixo 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') ) );
A resposta deve 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 doGoogle Cloud .
Na navegação, clique no conjunto de dados bqml_tutorial criado.
Clique em Excluir conjunto de dados no lado direito da janela. Esta ação exclui 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 várias série temporal com um modelo univariado.
- 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.