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 faz previsões para várias série temporal. Os valores previstos são calculados para cada ponto no tempo, para cada valor em uma ou mais colunas especificadas. Por exemplo, se você quisesse prever o clima e especificasse uma coluna contendo dados de estado, os dados previstos conteriam previsões para todos os pontos no tempo do Estado A, depois valores previstos para todos os pontos no tempo do Estado B e assim por diante. Se você quisesse prever o clima e especificasse colunas contendo dados de estado e cidade, os dados previstos conteriam previsões para todos os pontos no tempo do Estado A e da Cidade A, depois valores previstos para todos os pontos no 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 do estado de Iowa. A tabela bigquery-public-data.covid19_weathersource_com.postal_code_day_history contém dados históricos de 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 multivariado.
Objetivos
Este tutorial orienta você na conclusão das seguintes tarefas:
- Criar um modelo de série temporal para prever pedidos de lojas de bebidas alcoólicas usando a
CREATE MODELinstrução. - Recuperar os valores de pedidos previstos do modelo usando a
ML.FORECASTfunção. - Recuperar componentes da série temporal, como sazonalidade, tendência e
atribuições de atributos, usando a
ML.EXPLAIN_FORECASTfunção. É possível inspecionar esses componentes de série temporal para explicar os valores previstos. - Avaliar a acurácia do modelo usando a
ML.EVALUATEfunção. - Detectar anomalias usando o modelo com a
ML.DETECT_ANOMALIESfunção.
Custos
Este tutorial usa componentes faturáveis do Google Cloud, incluindo o seguinte:
- 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
- Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
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.
-
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, clique no botão abaixo.
Ative a API BigQuery.
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador de uso do serviço (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.
crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar o modelo de ML.
Console
No Google Cloud console, acesse a página 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 selecione EUA.
Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
bq
Para criar um novo conjunto de dados, use o
bq mk --dataset comando.
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 datasets.insert
método 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 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 pedidobottles_sold: o número de garrafas pedidas do item associadotemperature: a temperatura média na localização da loja na data do pedidohumidity: 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 Google Cloud console, 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 do local da loja em cada data como atributos a serem avaliados 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 Google Cloud console, 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 aproximadamente 38 minutos para ser concluída. Depois disso, você pode 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 de série temporal futuros 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ê 5 pontos no tempo futuro e gera um intervalo de previsão com um nível de confiança de 80%.
A assinatura de dados 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 são os dados que o modelo está tentando prever.
Siga estas etapas para prever dados com o modelo:
No Google Cloud console, 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 central 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 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 de série temporal futuros 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 conferir 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 Google Cloud console, 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 acurácia da previsão
Avalie a acurácia 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 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 Google Cloud console, 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 Google Cloud console, 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 Google Cloud console, 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:
Liberar espaço
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 Google Cloud console.
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:
- No Google Cloud console, 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 Desligar para excluir o projeto.
A seguir
- Aprenda a prever uma única série temporal com um modelo univariado
- Aprenda a prever várias série temporal com um modelo univariado
- Aprenda a escalonar um modelo univariado ao prever várias série temporal em muitas linhas.
- Aprenda a 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.