Prever uma única série temporal com um modelo multivariável TimesFM

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.FORECAST com o modelo TimesFM 3.0 para gerar previsões.

Custos

Neste tutorial, usamos componentes faturáveis do Cloud de Confiance by S3NS, incluindo:

  • BigQuery
  • BigQuery ML

Para mais informações, consulte Preços do BigQuery e Preços do BigQuery ML.

Antes de começar

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. 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.

    Ativar a API

    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:

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 NULL para 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:

  1. No console do Cloud de Confiance , acesse a página BigQuery.

    Acessar o BigQuery

  2. 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

  1. No console Cloud de Confiance , acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir