TimesFM 多変量モデルを使用して複数の時系列を予測する

このチュートリアルでは、BigQuery ML に組み込まれている TimesFM 3.0 モデルで AI.FORECAST 関数を使用して、複数の時系列で多変量予測を行う方法について説明します。多変量予測では、ターゲットに影響する他の変数(共変量)を組み込むことで、予測の精度を高めることができます。

ID 列を指定すると、複数の個別のエンティティの予測を同時に生成できます。このチュートリアルでは、過去の共変量である過去の乗車距離データを取り込んで、さまざまな乗車ゾーンのニューヨークのタクシー乗車数と運賃を予測する方法について説明します。

目標

  • 複数の時系列の統合データセットを準備します。
  • TimesFM 3.0 モデルで AI.FORECAST 関数を使用して、ニューヨークのタクシー データに対する予測を生成します。

費用

このチュートリアルでは、課金対象となる以下の Google Cloudのコンポーネントを使用しています。

  • BigQuery
  • BigQuery ML

詳細については、BigQuery の料金と BigQuery ML の料金をご覧ください。

始める前に

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  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. BigQuery API がまだ有効になっていない場合は、有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(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 関数は、単一の入力テーブルまたはクエリを想定しています。

複数の時系列予測の場合、データを個別の時系列に分割するための 1 つ以上の識別子列がデータに含まれている必要があります。この例では、1 つの時系列に 132(JFK 空港)の乗車場所のデータが含まれ、もう 1 つの時系列に 138(ラガーディア空港)の乗車場所のデータが含まれています。データが個々の時系列ごとに次の要件を満たしていることを確認します。

  • 履歴行: タイムスタンプ、ターゲット、過去の共変量の非 null 値が含まれます。

この例では将来の共変量を使用しないため、入力クエリは過去のデータのみを提供する必要があります。入力テーブルには、次のデータを含む列が必要です。

  • タクシーの乗車日。
  • 乗車地: 132 または 138。
  • その日の乗車回数。これはターゲット列です。
  • その日の平均運賃額。これはターゲット列です。
  • その日の移動の平均距離。これは、予測で使用される過去の共変量列です。

複数の多変量時系列を予測する

次のクエリは、JFK と LaGuardia の乗車ゾーンについて、今後 14 日間の 1 日あたりの乗車回数と平均運賃を予測します。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 と LaGuardia の乗車ゾーンにおける今後 14 日間の予測乗車回数と平均運賃額が表示されます。結果には、予測された各値の 95% 予測区間の下限と上限も含まれます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. Google Cloud コンソールで [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ