このチュートリアルでは、BigQuery ML に組み込まれている TimesFM 3.0 モデルで AI.FORECAST 関数を使用して、単一の時系列で多変量予測を行う方法について説明します。多変量予測を使用すると、目標に影響する他の変数を取り込むことで、予測の精度を高めることができます。
このチュートリアルでは、過去の取引額(過去の共変量)と日付が週末かどうか(将来の共変量)を組み込んで、ウォッカとウイスキーの売上を予測する方法について説明します。
目標
- 多変量予測用に単一の統合データセットを準備します。
TimesFM 3.0モデルでAI.FORECAST関数を使用して予測を生成します。
費用
このチュートリアルでは、課金対象となる以下の Google Cloudのコンポーネントを使用しています。
- BigQuery
- BigQuery ML
詳細については、BigQuery の料金と BigQuery ML の料金をご覧ください。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
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.
-
BigQuery API がまだ有効になっていない場合は、有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。新しいプロジェクトでは、BigQuery API が自動的に有効になります。
必要なロール
このチュートリアルのタスクを完了するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
-
データセットを作成する: BigQuery データ編集者 (
roles/bigquery.dataEditor) -
モデルを作成します。
- BigQuery データ編集者 (
roles/bigquery.dataEditor) - BigQuery ジョブユーザー (
roles/bigquery.jobUser)
- BigQuery データ編集者 (
-
推論を実行します。
- BigQuery データ編集者 (
roles/bigquery.dataEditor) - BigQuery ジョブユーザー (
roles/bigquery.jobUser)
- BigQuery データ編集者 (
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、このチュートリアルのタスクを完了するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
このチュートリアルのタスクを完了するには、次の権限が必要です。
-
データセットを作成します。
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 関数は、単一の入力テーブルまたはクエリを想定しています。
予測を実行する前に、データが次の要件を満たしていることを確認してください。
- 履歴行: タイムスタンプ、ターゲット、過去の共変量の非 null 値が含まれます。
- 将来の行: タイムスタンプと将来の共変量の null 以外の値のみが含まれます。これらの将来の行では、ターゲット列と過去の共変量列を
NULLに設定する必要があります。
入力テーブルには、次のデータを含む列が必要です。
- 販売日。
- その日に販売されたウォッカのボトルの数。これはターゲット列です。
- その日に販売されたウイスキーのボトルの数。これはターゲット列です。
- その日の平均取引額。これは、予測で使用される過去の共変量です。
- 日付が週末かどうか。これは、予測で使用される将来の共変量です。
単一の多変量時系列を予測する
次のクエリは、2023 年 7 月の最初の 2 週間で店舗番号 2633 で販売されるウォッカとウイスキーのボトル数を予測します。過去の共変量として平均取引額を使用し、将来の共変量として日付が週末かどうかを使用します。
次の手順で TimesFM 3.0 モデルを使用してデータを予測します。
Google Cloud コンソールで、[BigQuery] ページに移動します。
クエリエディタに次のクエリを貼り付け、[実行] をクリックします。
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 );
出力は次のようになります(明確にするために記すと、値は丸められています)。
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
| 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 |
| ... | ... | ... | ... | ... | ... | ... |
+------------+-------------+-------------+-------------+---------------+---------------+---------------+
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
- Google Cloud コンソールで [リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
次のステップ
- BigQuery ML の概要については、BigQuery の AI と ML の概要をご覧ください。
- TimesFM 単変量モデルを使用して単一または複数の時系列を予測する方法を学習する。
- TimesFM 多変量モデルを使用して複数の時系列を予測する方法を学習する。