使用 TimesFM 多元模型预测多个时序

本教程介绍了如何将 AI.FORECAST 函数与 BigQuery ML 内置的 TimesFM 3.0 模型搭配使用,跨多个时序执行多变量预测。通过纳入影响目标的其他变量(协变量),多元预测有助于提高预测准确性。

通过指定标识符列,您可以同时为多个不同的实体生成预测。本教程演示了如何通过纳入历史行程距离数据(一种过去的协变量)来预测不同上车区域的纽约出租车行程和费用。

目标

  • 为多个时序准备统一的数据集。
  • 使用 AI.FORECAST 函数和 TimesFM 3.0 模型为纽约出租车数据生成预测结果。

费用

本教程使用 Google Cloud的可计费组件,包括以下组件:

  • BigQuery
  • BigQuery ML

如需了解详情,请参阅 BigQuery 价格和 BigQuery ML 价格。

准备工作

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

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

  3. 启用 BigQuery API(如果尚未启用)。

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获取此权限。 了解如何授予角色。

    启用 API

    对于新项目,BigQuery API 会自动启用。

所需的角色

如需获得完成本教程中的任务所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

这些预定义角色包含完成本教程中的任务所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需完成本教程中的任务,您需要拥有以下权限:

  • 创建数据集: bigquery.datasets.create
  • 创建模型:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 运行推理:
    • bigquery.models.getData
    • bigquery.jobs.create

您也可以使用自定义角色或其他预定义角色来获取这些权限。

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅 IAM 简介。

准备输入数据

与其他可能需要为历史协变量和未来协变量分别创建单独表的多元模型不同,使用 TimesFM 3.0 的 AI.FORECAST 函数只需要一个输入表或查询。

对于多时序预测,您的数据必须包含一个或多个标识符列,以将数据分隔为不同的时序。在此示例中,一个时序包含取货地点 132(肯尼迪国际机场)的数据,另一个时序包含取货地点 138(拉瓜迪亚机场)的数据。请确保您的数据符合以下要求(针对每个单独的时序):

  • 历史行:包含时间戳、目标变量和过去协变量的非 null 值。

由于此示例未使用未来协变量,因此输入查询只需提供历史数据。输入表必须包含具有以下数据的列:

  • 出租车行程的日期。
  • 取件地点:132 或 138。
  • 相应日期的行程数。这是目标列。
  • 相应日期的平均票价金额。这是目标列。
  • 相应日期的平均行程距离。这是预测中使用的过去协变量列。

预测多个多元时序

以下查询会预测 JFK 和拉瓜迪亚上车区未来 14 天的每日行程数和平均车费。它将 past_cov_avg_distance 定义为仅在历史上存在的地标。您必须提供 id_cols 实参,以便模型知道如何分离不同的时序。

请按照以下步骤使用 TimesFM 3.0 模型预测数据:

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,粘贴以下查询,然后点击运行:

    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;
    

结果类似于以下内容,为清晰起见,值已四舍五入:

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

结果会显示 JFK 和拉瓜迪亚机场上车区未来 14 天的预计行程数和平均车费金额。结果还包括每个预测值的 95% 预测区间的下限和上限。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. 在 Google Cloud 控制台中,前往管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除。
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤