Neste tutorial, você vai aprender a fazer previsões multivariadas em uma única série temporal usando a função AI.FORECAST com o modelo TimesFM 3.0 integrado ao BigQuery ML. A previsão multivariada ajuda a melhorar a precisão da previsão incorporando outras variáveis que influenciam a meta.
Este tutorial demonstra como prever as vendas de vodca e uísque incorporando valores de transações históricas (uma covariável passada) e se a data é um fim de semana (uma covariável futura).
Objetivos
- Prepare um único conjunto de dados unificado para previsão multivariada.
- Use a função
AI.FORECASTcom o modeloTimesFM 3.0para gerar previsões.
Custos
Neste tutorial, usamos componentes faturáveis do Google Cloud, incluindo:
- BigQuery
- BigQuery ML
Para mais informações, consulte Preços do BigQuery e Preços do BigQuery ML.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de 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.
-
Ative a API BigQuery, se ainda não tiver feito isso.
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 com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.Para novos projetos, a API BigQuery é ativada automaticamente.
Funções exigidas
Para conseguir as permissões necessárias a fim de concluir as tarefas neste tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Crie o conjunto de dados:
Editor de dados do BigQuery (
roles/bigquery.dataEditor) -
Crie o modelo:
- Editor de dados do BigQuery (
roles/bigquery.dataEditor) - Usuário de jobs do BigQuery (
roles/bigquery.jobUser)
- Editor de dados do BigQuery (
-
Execute a inferência:
- Editor de dados do BigQuery (
roles/bigquery.dataEditor) - Usuário de jobs do BigQuery (
roles/bigquery.jobUser)
- Editor de dados do BigQuery (
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para concluir as tarefas neste tutorial. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As permissões a seguir são necessárias para concluir as tarefas deste tutorial:
-
Crie o conjunto de dados:
bigquery.datasets.create -
Crie o modelo:
-
bigquery.jobs.create -
bigquery.models.create -
bigquery.models.getData -
bigquery.models.updateData
-
-
Execute a inferência:
-
bigquery.models.getData -
bigquery.jobs.create
-
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Introdução ao IAM.Preparar os dados de entrada
Ao contrário de outros modelos multivariados que podem exigir tabelas separadas para covariáveis históricas e futuras, a função AI.FORECAST com TimesFM 3.0 espera uma única tabela de entrada ou consulta.
Antes de executar uma previsão, verifique se os dados atendem a estes requisitos:
- Linhas históricas: contêm valores não nulos para carimbos de data/hora, metas e covariáveis passadas.
- Linhas futuras: contêm valores não nulos apenas para carimbos de data/hora e covariáveis futuras.
As colunas de destino e de covariáveis passadas precisam ser definidas como
NULLpara essas linhas futuras.
A tabela de entrada precisa ter colunas com os seguintes dados:
- A data das vendas.
- O número de garrafas de vodca vendidas nessa data. Essa é uma coluna de objetivo.
- O número de garrafas de uísque vendidas nessa data. Essa é uma coluna de objetivo.
- O valor médio da transação nessa data. Essa é uma covariável usada na previsão.
- Se a data é um fim de semana. Essa é uma covariável futura usada na previsão.
Prever a série temporal multivariada única
A consulta a seguir prevê o número de garrafas de vodca e uísque vendidas nas duas primeiras semanas de julho de 2023 na loja 2633. Ele usa o valor médio da transação como uma covariável passada e se a data é um fim de semana como uma covariável futura.
Siga estas etapas para prever dados com o modelo TimesFM 3.0:
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, cole a consulta a seguir e clique em Executar:
WITH historical_sales AS ( SELECT date AS sales_date, store_number, SUM(CASE WHEN category_name LIKE '%VODKA%' THEN bottles_sold ELSE 0 END) AS vodka_bottles, SUM(CASE WHEN category_name LIKE '%WHISKEY%' THEN bottles_sold ELSE 0 END) AS whiskey_bottles, AVG(sale_dollars) AS avg_transaction_value, -- Past covariate IF(EXTRACT(DAYOFWEEK FROM date) IN (1, 7), 1.0, 0.0) AS is_weekend -- Future covariate FROM `bigquery-public-data.iowa_liquor_sales.sales` WHERE date BETWEEN '2023-01-01' AND '2023-06-30' AND store_number = '2633' GROUP BY sales_date, store_number ), future_horizon AS ( SELECT future_date AS sales_date, store_number, CAST(NULL AS INT64) AS vodka_bottles, CAST(NULL AS INT64) AS whiskey_bottles, CAST(NULL AS FLOAT64) AS avg_transaction_value, IF(EXTRACT(DAYOFWEEK FROM future_date) IN (1, 7), 1.0, 0.0) AS is_weekend FROM UNNEST(GENERATE_DATE_ARRAY('2023-07-01', '2023-07-14')) AS future_date CROSS JOIN (SELECT DISTINCT store_number FROM historical_sales) ), combined_sales AS ( SELECT * FROM historical_sales UNION ALL SELECT * FROM future_horizon ) SELECT FORMAT_DATE('%Y-%m-%d', sales_date) AS sales_date, vodka_bottles.value AS vodka_value, vodka_bottles.prediction_interval_lower_bound AS vodka_lower, vodka_bottles.prediction_interval_upper_bound AS vodka_upper, whiskey_bottles.value AS whiskey_value, whiskey_bottles.prediction_interval_lower_bound AS whiskey_lower, whiskey_bottles.prediction_interval_upper_bound AS whiskey_upper FROM AI.FORECAST( TABLE combined_sales, model => 'TimesFM 3.0', timestamp_col => 'sales_date', target_cols => ['vodka_bottles', 'whiskey_bottles'], past_covariate_cols => ['avg_transaction_value'], future_covariate_cols => ['is_weekend'], id_cols => ['store_number'], horizon => 14, confidence_level => 0.90 );
A saída é semelhante a esta, com valores arredondados para fins de esclarecimento:
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| sales_date | vodka_value | vodka_lower | vodka_upper | whiskey_value | whiskey_lower | whiskey_upper |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 2023-07-01 | 408 | -334 | 1977 | 21 | -34 | 113 |
| 2023-07-02 | 806 | -281 | 2992 | 29 | -23 | 149 |
| ... | ... | ... | ... | ... | ... | ... |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
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.
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
- Para uma visão geral do BigQuery ML, consulte Introdução à IA e ao ML no BigQuery.
- Saiba como prever série temporal únicas ou múltiplas com um modelo univariado do TimesFM.
- Saiba como prever várias série temporal com um modelo multivariável TimesFM.