Prever várias série temporal com um modelo multivariável TimesFM

Neste tutorial, você vai aprender a fazer previsões multivariadas em várias 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 (covariáveis) que influenciam a meta.

Ao especificar colunas de identificador, é possível gerar previsões para várias entidades distintas simultaneamente. Este tutorial demonstra como prever viagens e tarifas de táxi em Nova York para diferentes zonas de embarque incorporando dados históricos de distância percorrida, que é uma covariável passada.

Objetivos

  • Prepare um conjunto de dados unificado para várias série temporal.
  • Gere previsões para dados de táxi de Nova York usando a função AI.FORECAST com o modelo TimesFM 3.0.

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

  1. 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.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

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

Para uma previsão de várias série temporal, seus dados precisam incluir uma ou mais colunas de identificador para separar os dados em série temporal distintas. Neste exemplo, uma série temporal contém dados para o local de retirada 132 (Aeroporto JFK) e a outra contém dados para o local de retirada 138 (Aeroporto LaGuardia). Verifique se os dados atendem aos seguintes requisitos para cada série temporal individual:

  • Linhas históricas: contêm valores não nulos para carimbos de data/hora, metas e covariáveis passadas.

Como este exemplo não usa covariáveis futuras, a consulta de entrada só precisa fornecer dados históricos. A tabela de entrada precisa ter colunas com os seguintes dados:

  • A data da viagem de táxi.
  • O local de retirada: 132 ou 138.
  • O número de viagens nessa data. Essa é uma coluna de objetivo.
  • O valor médio da tarifa nessa data. Essa é uma coluna de objetivo.
  • A distância média das viagens nessa data. Esta é uma coluna de covariável passada usada na previsão.

Prever as várias série temporal multivariadas

A consulta a seguir prevê o número de viagens e a tarifa média por dia nos próximos 14 dias para as zonas de embarque de JFK e LaGuardia. Ele define past_cov_avg_distance como um recurso conhecido apenas historicamente. Você precisa fornecer o argumento id_cols para que o modelo saiba como separar as diferentes série temporal.

Siga estas etapas para prever dados com o modelo TimesFM 3.0:

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

    Acessar o BigQuery

  2. No editor de consultas, cole a consulta a seguir e clique em Executar:

    SELECT
      pickup_location_id,
      FORMAT_DATE("%Y-%m-%d", pickup_date) AS pickup_date,
      # Extract the forecast value and prediction intervals for the number of trips target
      target_num_trips.value AS forecasted_num_trips,
      target_num_trips.prediction_interval_lower_bound AS num_trips_lower,
      target_num_trips.prediction_interval_upper_bound AS num_trips_upper,
      # Extract the forecast value and prediction intervals for the average fare target
      target_avg_fare.value AS forecasted_avg_fare,
      target_avg_fare.prediction_interval_lower_bound AS avg_fare_lower,
      target_avg_fare.prediction_interval_upper_bound AS avg_fare_upper
    FROM AI.FORECAST(
      (
        SELECT
          DATE(pickup_datetime) AS pickup_date,
          pickup_location_id,
          COUNT(*) AS target_num_trips,
          AVG(fare_amount) AS target_avg_fare,
          AVG(trip_distance) AS past_cov_avg_distance
        FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2022`
        WHERE pickup_datetime >= "2022-01-01" AND pickup_datetime < "2022-04-01"
          AND pickup_location_id IN ("132", "138") -- JFK and LaGuardia Airports
        GROUP BY 1, 2
      ),
      model => "TimesFM 3.0",
      target_cols => ["target_num_trips", "target_avg_fare"],
      past_covariate_cols => ["past_cov_avg_distance"],
      timestamp_col => "pickup_date",
      id_cols => ["pickup_location_id"],
      horizon => 14
    )
    ORDER BY pickup_date;
    

O resultado é semelhante ao seguinte, com valores arredondados para fins de esclarecimento:

+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+
| pickup_location_id | pickup_date | forecasted_num_trips | num_trips_lower | num_trips_upper | forecasted_avg_fare | avg_fare_lower | avg_fare_upper |
+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+
| 132                | 2022-04-01  | 5240                 | 4633            | 5842            | 47                  | 46             | 48             |
| 138                | 2022-04-01  | 3451                 | 2848            | 4008            | 32                  | 31             | 34             |
| ...                | ...         | ...                  | ...             | ...             | ...                 | ...            | ...            |
+--------------------+-------------+----------------------+-----------------+-----------------+---------------------+----------------+----------------+

Os resultados mostram o número previsto de viagens e o valor médio da tarifa para os próximos 14 dias nas zonas de embarque do JFK e de LaGuardia. Os resultados também incluem os limites inferior e superior de um intervalo de previsão de 95% para cada valor previsto.

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 Google Cloud , 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