Vertex AI で実現するオンライン需要予測 — ブラウザのみで完結する構築ガイド
Vertex AI で実現するオンライン需要予測 — ブラウザのみで完結する構築ガイド
はじめに
この手順でできること
Google Cloud の Vertex AI を使用して、オンライン(リアルタイム)需要予測 を REST API 経由で実行できる環境をハンズオンで構築します。
通常、Vertex AI Forecast(AutoML Forecasting)はバッチ推論のみ対応ですが、Tabular Workflow for Forecasting テンプレートを使用することで、学習済みモデルを Vertex AI Endpoint にデプロイし、API 経由のオンライン推論 が可能になります。
💡 ポイント: すべての手順を Google Cloud コンソール(ブラウザ GUI)のみ で完結できます。ローカル環境へのツールインストールは不要です。
アーキテクチャ概要
BigQuery (公開データ: Iowa Liquor Sales)
↓ SQLクエリで前処理
BigQuery (前処理済みテーブル)
↓ Vertex AI Pipelines テンプレートギャラリー
Tabular Workflow for Forecasting パイプライン
├─ データ検証
├─ 特徴量エンジニアリング
├─ AutoML Forecasting 学習
├─ モデル評価
└─ Model Registry に登録
↓ コンソールからデプロイ
Vertex AI Endpoint (オンライン推論)
↓ REST API / コンソールUIでテスト
予測結果(JSON)
使用データセット
| 項目 | 内容 |
|---|---|
| データセット名 | Iowa Liquor Sales |
| BigQuery テーブル | bigquery-public-data.iowa_liquor_sales.sales |
| ライセンス | CC0(パブリックドメイン) — 商用・非商用問わず自由に利用可能 |
| 内容 | アイオワ州における酒類販売の取引記録(日付、店舗、商品カテゴリ、販売数量など) |
前提条件
- Google Cloud プロジェクトが作成済みであること
- プロジェクトに課金アカウントが紐付けられていること
- プロジェクトのオーナーまたは編集者権限を持つアカウントでログインしていること
- Web ブラウザ(Chrome 推奨)を使用できること
⚠️ 重要: 構築完了後は必ずクリーンアップを実施してください。Endpoint を削除し忘れると継続的に課金されます。
1. GCP API の有効化
使用するサービスの API を有効化します。
手順
- Google Cloud コンソール にログイン
- 画面上部のプロジェクトセレクタで、使用するプロジェクトを選択
- 左側ナビゲーションメニュー 「API とサービス」 > 「ライブラリ」 をクリック
以下の 5 つの API を検索して有効化します:
| API 名 | 検索キーワード |
|---|---|
| Vertex AI API | Vertex AI |
| BigQuery API | BigQuery |
| Cloud Storage API | Cloud Storage |
| Compute Engine API | Compute Engine |
| Dataflow API | Dataflow |
各 API について:
- 検索ボックスに API 名を入力
- 検索結果から対象の API をクリック
- 「有効にする」 ボタンをクリック
- 「API が有効です」と表示されれば完了
📝 すでに有効になっている場合は「管理」ボタンが表示されます。その場合は操作不要です。
2. Cloud Storage バケットの作成
パイプラインの中間データやアーティファクトを保存するためのバケットを作成します。
手順
- ナビゲーションメニュー 「Cloud Storage」 > 「バケット」 をクリック
- 「作成」 ボタンをクリック
- 以下を設定:
| 設定項目 | 値 |
|---|---|
| バケット名 | {あなたのプロジェクトID}-forecast-pipeline |
| ロケーション タイプ | Region |
| リージョン | us-central1 (Iowa) |
| ストレージクラス | Standard(デフォルト) |
| アクセス制御 | 均一(デフォルト) |
- 「作成」 をクリック
📝 バケット名はグローバルで一意である必要があります。プロジェクト ID をプレフィックスに使うことで重複を避けられます。
📝 リージョンは us-central1 を選択してください。BigQuery 公開データセットとの互換性の観点から推奨されます。
3. IAM 権限の確認
パイプライン実行に必要な IAM 権限を確認します。Compute Engine のデフォルト サービスアカウントにはプロジェクト 編集者 ロールが自動付与されているため、本手順で必要な権限は既に付与済みです。ここでは確認のみ行います。
手順
- ナビゲーションメニュー 「IAM と管理」 > 「IAM」 をクリック
- プリンシパル一覧から Compute Engine のデフォルト サービスアカウント を探す
- 形式:
{数値}-compute@developer.gserviceaccount.com
- 形式:
- 該当アカウントの鉛筆アイコン(編集)をクリック
- 以下のロールが付与されていることを確認:
| ロール | 説明 |
|---|---|
編集者 (roles/editor) |
プロジェクトリソースの幅広い操作権限(デフォルトで付与済み) |
📝 編集者ロールには Vertex AI、BigQuery、Cloud Storage に対する操作権限が含まれているため、追加のロール付与は不要です。
⚠️ Compute Engine デフォルト サービスアカウント使用時の注意
本手順ではパイプライン実行のサービスアカウントとして Compute Engine のデフォルト サービスアカウント({数値}-compute@developer.gserviceaccount.com)を使用しますが、以下のリスクがあります:
- 過剰な権限: デフォルト サービスアカウントにはプロジェクト 編集者 ロールが自動付与されていることが多く、必要以上に広い権限を持ちます。万が一サービスアカウントキーが漏洩した場合、プロジェクト内のほぼすべてのリソースが操作可能になります。
- 共有リスク: デフォルト サービスアカウントは Compute Engine VM、Cloud Functions、App Engine など複数のサービスで共有されるため、一つのサービスの侵害が他のサービスにも波及します。
- 監査の困難さ: 複数のサービスが同一アカウントを使用するため、Cloud Audit Logs でどのサービスがどの操作を行ったか特定しにくくなります。
本番環境では、最小権限の原則に従い、パイプライン専用のサービスアカウントを作成して必要なロールのみを付与することを強く推奨します。 本手順は学習・検証目的のため、簡便さを優先してデフォルト サービスアカウントを使用しています。
4. 公開データセットの確認
BigQuery の公開データセット「Iowa Liquor Sales」のスキーマとデータを確認します。
手順
-
ナビゲーションメニュー 「BigQuery」 をクリック(BigQuery Studio が開きます)
-
左上アイコンの エクスプローラー をクリック

-
エクスプローラーの 「+ データを追加」 をクリック
-
フィルタ条件の 「一般公開データセット」 をクリック
-
検索ボックスに
iowa liquorと入力 -
「Iowa Liquor Retail Sales」 を選択し、「データセットを表示」 をクリック
または、SQL エディタで以下のクエリを直接実行してスキーマとデータ量を確認できます:

-- テーブルのスキーマと行数を確認
SELECT
column_name,
data_type
FROM `bigquery-public-data.iowa_liquor_sales.INFORMATION_SCHEMA.COLUMNS`
WHERE table_name = 'sales';
-- データの概要を確認
SELECT
COUNT(*) AS total_rows,
MIN(date) AS min_date,
MAX(date) AS max_date,
COUNT(DISTINCT store_number) AS unique_stores,
COUNT(DISTINCT category_name) AS unique_categories
FROM `bigquery-public-data.iowa_liquor_sales.sales`;
確認ポイント:
-
date: 販売日 -
store_number: 店舗番号 -
category_name: 商品カテゴリ名 -
bottles_sold: 販売本数(これが予測対象)
5. データの前処理
需要予測に適した形式にデータを前処理し、自プロジェクトの BigQuery テーブルに保存します。
5-1. データセットの作成
-
BigQuery コンソールの左側パネルで、自分のプロジェクト名の右側にある 「⋮」(三点メニュー) をクリック
-
「データセットを作成」 を選択

-
以下を設定:
| 設定項目 | 値 |
|---|---|
| データセット ID | forecast_dataset |
| ロケーション | US(米国の複数のリージョン) |
- 「データセットを作成」 をクリック
5-2. 前処理 SQL の実行
BigQuery の SQL エディタに以下のクエリを貼り付けて実行します。
このクエリは、日次 × 店舗 × 商品カテゴリ別の販売数量を集計し、欠損日を 0 で補完します。
-- 前処理: 日次 × 店舗 × カテゴリ別に集計し、欠損日を補完
CREATE OR REPLACE TABLE `forecast_dataset.iowa_liquor_daily` AS
WITH
-- 対象データの抽出と日次集計
daily_sales AS (
SELECT
date,
CAST(store_number AS STRING) AS store_id,
category_name,
SUM(bottles_sold) AS bottles_sold,
SUM(sale_dollars) AS sale_dollars
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE
date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 2 YEAR) AND CURRENT_DATE()
AND store_number IS NOT NULL
AND category_name IS NOT NULL
AND bottles_sold > 0
GROUP BY date, store_number, category_name
),
-- 売上上位の店舗×カテゴリに絞る(データ量の制御)
top_series AS (
SELECT
store_id,
category_name,
SUM(bottles_sold) AS total_sold
FROM daily_sales
GROUP BY store_id, category_name
HAVING COUNT(DISTINCT date) >= 100 -- 100日以上データがある組合せのみ
ORDER BY total_sold DESC
LIMIT 50 -- 上位50系列に絞る
),
-- 日付マスタ(連続した日付を生成)
date_spine AS (
SELECT date
FROM UNNEST(
GENERATE_DATE_ARRAY(
DATE_SUB(CURRENT_DATE(), INTERVAL 2 YEAR),
CURRENT_DATE(),
INTERVAL 1 DAY
)
) AS date
),
-- 対象の店舗×カテゴリと日付の全組み合わせを生成
all_combinations AS (
SELECT
d.date,
t.store_id,
t.category_name
FROM date_spine d
CROSS JOIN top_series t
)
-- 全組み合わせに対して販売データを LEFT JOIN し、欠損を 0 で補完
SELECT
ac.date,
ac.store_id,
ac.category_name,
CONCAT(ac.store_id, '_', ac.category_name) AS time_series_id,
COALESCE(ds.bottles_sold, 0) AS bottles_sold,
COALESCE(ds.sale_dollars, 0.0) AS sale_dollars
FROM all_combinations ac
LEFT JOIN daily_sales ds
ON ac.date = ds.date
AND ac.store_id = ds.store_id
AND ac.category_name = ds.category_name
ORDER BY time_series_id, date;
実行方法:
- BigQuery コンソールで 「+ 新しいクエリ」 をクリック
- 上記の SQL をすべて貼り付ける
- 「実行」 ボタンをクリック
- 「このステートメントで新しいテーブル iowa_liquor_daily が作成されました。」と表示されれば成功
📝 このクエリは売上上位 50 系列 × 直近 2 年間のデータを生成します。学習コストを抑えつつ、十分な精度を確保するためのバランスです。
5-3. Vertex AI データセットの作成
パイプライン実行時に必要となる Vertex AI データセットを作成します。
- ナビゲーションメニュー 「Vertex AI」 > 「データセット」 をクリック
- 「作成」 をクリック
- 以下を設定:
| 設定項目 | 値 |
|---|---|
| データセット名 | iowa-liquor-dataset |
| データタイプ | 表形式 |
| 目標 | 予測 |
| リージョン | us-central1 |
- 「作成」 をクリック
- データソースの選択画面で 「テーブルまたはビューを BigQuery から選択」 を選択
-
forecast_dataset.iowa_liquor_dailyテーブルを指定して 「続行」 をクリック - データセットの詳細画面が表示されたら、作成完了
5-4. メタデータ アーティファクト ID の確認
- ナビゲーションメニュー 「Vertex AI」 > 「ML メタデータ」 をクリック
- リージョンが us-central1 であることを確認
- 一覧から、Step 5-3 で作成したデータセットに対応するアーティファクトを探す
-
アーティファクト ID(UUID 形式、例:
323c30a7-a4a5-4cfc-add6-308c395b9009)を控える

📝 この ID を控えてください: Step 8 のパイプライン アーティファクト設定(
vertex_dataset)で使用します。
補足: なぜデータの前処理が必要なのか
元データ(Iowa Liquor Sales)はそのままでは時系列予測モデルの入力として使用できません。前処理では以下の 4 つの変換を行っています。
| 変換内容 | 理由 |
|---|---|
| 日次 × 店舗 × カテゴリ別に集計 | 元データは 1 行=1 取引のトランザクション形式ですが、Tabular Workflow for Forecasting は「日付 × 系列 ID」ごとに 1 行の集計済みデータを必要とするため |
| 欠損日(販売 0 の日)を 0 で補完 | 売上がない日にはレコードが存在しませんが、時系列モデルは連続した日付系列を前提とするため、全日付 × 全系列の組み合わせを生成し 0 で埋めています |
| データ量の絞り込み(上位 50 系列 × 直近 2 年間) | 元データは数千万行規模のため、すべてを学習に使うとコストと時間が膨大になります。データが十分にある系列(100 日以上)の上位 50 に絞ることで、学習コストを抑えつつ精度を確保しています |
系列識別キー time_series_id の生成 |
予測モデルは「どの店舗のどの商品カテゴリの時系列か」を識別するキーが必要ですが、元データにはそのようなカラムがありません。そこで store_id と category_name を _ で結合し、例えば 2604_AMERICAN VODKAS のような一意の合成キーを作成しています。このキーをパイプラインの time_series_identifier_columns パラメータで指定します |
6. 前処理済みデータの確認
作成したテーブルの内容を確認します。
手順
BigQuery の SQL エディタで以下を実行:
-- レコード件数と基本統計を確認
SELECT
COUNT(*) AS total_rows,
MIN(date) AS min_date,
MAX(date) AS max_date,
COUNT(DISTINCT time_series_id) AS num_series,
AVG(bottles_sold) AS avg_bottles_sold,
MAX(bottles_sold) AS max_bottles_sold
FROM `forecast_dataset.iowa_liquor_daily`;
-- サンプルデータを確認
SELECT *
FROM `forecast_dataset.iowa_liquor_daily`
ORDER BY time_series_id, date
LIMIT 20;
確認ポイント:
-
total_rows: 数万行程度(50 系列 × 730 日 ≈ 36,500 行) -
num_series: 50 -
min_date/max_date: 直近 2 年間の範囲 - データに NULL がないこと
7. Tabular Workflow パイプラインの起動
Vertex AI のテンプレートギャラリーから Forecasting パイプラインを起動します。
手順
-
ナビゲーションメニュー 「Vertex AI」 > 「ダッシュボード」 をクリック
-
ナビゲーションメニュー下部 「パイプライン」 をクリック

-
上部の 「パイプラインを作成」 または 「実行を作成」 をクリック
-
「テンプレートから選択」 を選択
-
テンプレートギャラリータブで 「Learn to Learn」 で検索
-
「Learn to Learn Forecasting Pipeline on Tabular Workflows」 テンプレートを選択
-
「実行を作成」 をクリック
📝 テンプレート名は Google Cloud のアップデートにより変更されることがあります。「Forecast」「AutoML」を含むテンプレートを探してください。
8. パイプラインパラメータの設定
テンプレート起動後、以下のパラメータを 上から順に 設定します。
基本設定
| パラメータ | 設定値 | 説明 |
|---|---|---|
| パイプライン名 | iowa-liquor-forecast |
任意の名前 |
| リージョン | us-central1(アイオワ) |
GCS バケットと同じリージョン |
Cloud Storage のロケーション
| パラメータ | 設定値 | 説明 |
|---|---|---|
| 出力ディレクトリ | {プロジェクトID}-forecast-pipeline/output/ |
Step 2 で作成したバケットを選択 |
パイプライン パラメータ(変更が必要な項目)
以下のパラメータはデフォルト値から変更が必要です。UI 上ではアルファベット順に並んでいるため、上から順にスクロールしながら該当項目を設定してください。
| パラメータ名 | 設定値 | 説明 |
|---|---|---|
| context_window | 30 |
直近 30 日分のデータをコンテキストとして使用(デフォルト: 0) |
| data_source_bigquery_table_path | bq://{プロジェクトID}.forecast_dataset.iowa_liquor_daily |
Step 5 で作成したテーブル |
| forecast_horizon | 7 |
7 日先まで予測(デフォルト: 0) |
| location | us-central1 |
パイプライン実行リージョン |
| optimization_objective | minimize-rmse |
二乗平均平方根誤差を最小化 |
| project | {プロジェクトID} |
使用する GCP プロジェクト ID |
| root_dir | gs://{プロジェクトID}-forecast-pipeline |
GCS ルート出力ディレクトリ |
| target_column | bottles_sold |
予測対象の値(販売本数) |
| time_column | date |
時系列の日付カラム |
| time_series_identifier_columns | ["time_series_id"] |
各時系列を識別するキーのリスト |
| train_budget_milli_node_hours | 1000 |
学習時間予算(1000 = 1 ノード時間)。 |
| feature_transform_engine_dataflow_machine_type | n2-standard-4 |
特徴量変換 Dataflow マシンタイプ(デフォルト: n1-standard-16)。デフォルトの n1-standard-16 では ZONE_RESOURCE_POOL_EXHAUSTED(ゾーンのリソース在庫切れ)で Dataflow ワーカーが起動しない場合がある。 n2-standard-4 に変更することでリソース確保の成功率が大幅に向上する。 |
| feature_transform_engine_dataflow_max_num_workers | 5 |
特徴量変換 Dataflow 最大ワーカー数(デフォルト: 10)。50 系列 × 36,500 行程度のデータ量であれば 5 ワーカーで十分処理可能。 |
| num_selected_trials | 2 |
選択するトライアル数(デフォルト: 10)。並列トライアル数を 2 に制限しているため、合わせて縮小。 |
| stage_1_num_parallel_trials | 2 |
ステージ 1 の並列トライアル数(デフォルト: 35) |
| stage_2_num_parallel_trials | 2 |
ステージ 2 の並列トライアル数(デフォルト: 35) |
| transformations | {"auto": ["bottles_sold"], "timestamp": ["date"]} |
特徴量変換の設定(auto で型を自動判定。) |
| evaluation_batch_explain_machine_type | n2-highmem-8 |
評価時のバッチ説明マシンタイプ(デフォルト: n1-highmem-8)。n2 系に変更してリソース確保の成功率を向上。 |
| evaluation_batch_explain_max_replica_count | 2 |
評価時のバッチ説明最大レプリカ数(デフォルト: 22) |
| evaluation_batch_explain_starting_replica_count | 2 |
評価時のバッチ説明初期レプリカ数(デフォルト: 22) |
| evaluation_batch_predict_machine_type | n2-standard-16 |
評価時のバッチ予測マシンタイプ(デフォルト: n1-standard-16)。n2 系に変更。 |
| evaluation_batch_predict_max_replica_count | 2 |
評価時のバッチ予測最大レプリカ数(デフォルト: 25) |
| evaluation_batch_predict_starting_replica_count | 2 |
評価時のバッチ予測初期レプリカ数(デフォルト: 25) |
| evaluation_dataflow_machine_type | n2-standard-16 |
評価用 Dataflow マシンタイプ(デフォルト: n1-standard-16)。n2 系に変更。 |
| evaluation_dataflow_max_num_workers | 2 |
評価用 Dataflow 最大ワーカー数(デフォルト: 25) |
| evaluation_dataflow_starting_num_workers | 2 |
評価用 Dataflow 初期ワーカー数(デフォルト: 22) |
⚠️
stage_1_num_parallel_trials/stage_2_num_parallel_trialsをデフォルト値の 35 から 2 に変更する理由新規の GCP プロジェクトでは Vertex AI の
Restricted image training CPUsクォータ(リージョンごとの学習用 CPU 上限)がデフォルトで 42 CPU 程度に設定されています。各トライアルはn1-standard-8(8 CPU)のワーカーを 1 台使用するため、並列トライアル数 × 8 がクォータ上限を超えるとパイプラインがRESOURCE_EXHAUSTEDエラーで失敗します。
- デフォルト 35 並列の場合: 35 × 8 = 280 CPU 必要 → クォータ 42 を大幅超過
- 2 並列に変更した場合: 2 × 8 = 16 CPU → クォータ 42 以内で安全に実行可能
クォータ上限は「IAM と管理」>「割り当て」で
Restricted image training CPUsを検索して確認できます。本番環境で学習速度を上げたい場合は、同画面からクォータ引き上げをリクエストし、承認後に並列数を増やしてください。
パイプライン パラメータ(デフォルトのまま)
以下のパラメータはデフォルト値のまま変更不要です。参考としてパラメータ名と説明を記載します。
| パラメータ名 | デフォルト値 | 説明 |
|---|---|---|
| available_at_forecast_columns | [] |
予測時に利用可能なカラム |
| data_source_csv_filenames | (空) | CSV ファイルパス(BigQuery 使用時は不要) |
| dataflow_service_account | (空) | Dataflow サービスアカウント |
| dataflow_subnetwork | (空) | Dataflow サブネットワーク |
| dataflow_use_public_ips | true |
Dataflow でパブリック IP を使用 |
| enable_probabilistic_inference | false |
確率的推論の有効化 |
| encryption_spec_key_name | (空) | KMS 暗号化キー名 |
| evaluated_examples_bigquery_path | (空) | 評価結果の BigQuery 出力先 |
| evaluation_dataflow_disk_size_gb | 50 |
評価用 Dataflow ディスクサイズ (GB) |
| fast_testing | false |
内部テスト用フラグ |
| feature_transform_engine_bigquery_staging_full_dataset_id | (空) | 特徴量変換のステージングデータセット ID |
| feature_transform_engine_dataflow_disk_size_gb | 40 |
特徴量変換 Dataflow ディスクサイズ (GB) |
| group_columns | [] |
時系列階層グループのカラム |
| group_temporal_total_weight | 0 |
グループ×ホライズン集約の損失重み |
| group_total_weight | 0 |
グループ集約の損失重み |
| holiday_regions | [] |
祝日効果を適用する地域 |
| model_description | (空) | モデルの説明文 |
| model_display_name | (自動生成) | モデル表示名 |
| predefined_split_key | (空) | 事前定義の分割カラム |
| quantiles | [] | 確率的推論の分位数 |
| run_evaluation | false | テスト分割での評価の実行 |
| stage_1_tuner_worker_pool_specs_override | [] | ステージ 1 チューナーのワーカープール設定 |
| stage_1_tuning_result_artifact_uri | (空) | ステージ 1 チューニング結果の GCS URI |
| stage_2_trainer_worker_pool_specs_override | [] | ステージ 2 トレーナーのワーカープール設定 |
| study_spec_parameters_override | [] | スタディ仕様パラメータの上書き |
| temporal_total_weight | 0 | ホライズン集約の損失重み |
| test_fraction | -1 | テスト分割比率(-1 で自動) |
| time_series_attribute_columns | [] | 時系列で不変の属性カラム |
| timestamp_split_key | (空) | タイムスタンプ分割カラム |
| training_fraction | -1 | 学習分割比率(-1 で自動) |
| unavailable_at_forecast_columns | [] | 予測時に利用不可のカラム |
| validation_fraction | -1 | 検証分割比率(-1 で自動) |
| weight_column | (空) | 重みカラム |
| window_max_count | 0 | 最大ウィンドウ数 |
| window_predefined_column | (空) | ウィンドウ開始位置カラム |
| window_stride_length | 0 | ウィンドウのストライド長 |
パイプライン アーティファクト
| パラメータ名 | 設定値 | 説明 |
|---|---|---|
| parent_model | (空) | 既存の親モデル(新規作成時は空のまま) |
| vertex_dataset ※必須 | Step 5-4 で控えたメタデータ アーティファクト ID を入力 | UUID 形式(例: 323c30a7-a4a5-4cfc-add6-308c395b9009) |
📝 パラメータの名称や入力欄のレイアウトはテンプレートのバージョンにより異なる場合があります。上記の設定値を該当する項目に入力してください。
すべての設定が完了したら 「送信」 をクリックします。
9. パイプラインの実行モニタリング
パイプラインが開始されると、DAG(有向非巡回グラフ)ビューで進捗を確認できます。
手順
- パイプライン実行後、自動的に実行詳細画面に遷移します
- DAG ビューで各ステップのステータスを確認:
- 🔵 青: 実行中
- ✅ 緑: 完了
- ❌ 赤: 失敗
- 各ステップをクリックすると、ログや出力の詳細を確認できます
主要なステップと役割
| ステップ | 内容 |
|---|---|
| Data validation | 入力データのスキーマ・品質チェック |
| Feature engineering | 特徴量の自動生成(ラグ特徴量、移動平均など) |
| Training | AutoML Forecasting モデルの学習 |
| Evaluation | モデルの評価メトリクス計算 |
| Model upload | Model Registry への登録 |

⏱️ 所要時間: 1〜3 時間程度(データ量と学習バジェットに依存)。学習完了まで画面を閉じても構いません。パイプラインはバックグラウンドで実行されます。
完了確認
パイプラインのすべてのステップが ✅(緑)になったら完了です。
10. モデル評価の確認
学習が完了したモデルの精度を確認します。
手順
- ナビゲーションメニュー 「Vertex AI」 > 「Model Registry」 をクリック
- 一覧からパイプラインで作成されたモデルを選択(モデル名をクリック)
- 「評価」 タブをクリック
- 以下のメトリクスを確認:
| メトリクス | 説明 | 値の見方 |
|---|---|---|
| MAE (Mean Absolute Error) | 平均絶対誤差 | 値が小さいほど良い。予測値と実測値の平均的なズレ |
| RMSE (Root Mean Squared Error) | 二乗平均平方根誤差 | 値が小さいほど良い。大きなズレをより重視した指標 |
| MAPE (Mean Absolute Percentage Error) | 平均絶対パーセント誤差 | 値が小さいほど良い。パーセンテージでの誤差率 |
📝 判断基準の目安:
- MAPE < 20%: 実用レベル
- MAPE < 10%: 良好
- MAPE < 5%: 優秀
(需要予測においてはデータやドメインにより基準が異なります)
11. Endpoint の作成とモデルのデプロイ
学習済みモデルを Vertex AI Endpoint にデプロイして、オンライン推論を有効にします。
11-1. Endpoint の作成
- ナビゲーションメニュー 「Vertex AI」 > 「エンドポイント」 をクリック
- 「作成」 をクリック
- 以下を設定:
| 設定項目 | 値 |
|---|---|
| エンドポイント名 | forecast-online-endpoint |
| リージョン | us-central1 |
| アクセス | 標準(Standard) |
- 「続行」 をクリック
11-2. モデル設定
- 以下を設定:
| 設定項目 | 値 |
|---|---|
| モデル名 |
automl-forecasting-model-...(先ほど学習させたモデルを選択) |
| トラフィック分割 |
100 % |
| レプリカの最小数 | 1 |
| レプリカの最大数 | 1 |
| マシンタイプ |
n1-standard-4(4 vCPU, 15 GB メモリ) |
-
その他の設定はデフォルトのまま
-
「完了」 をクリック
-
確認画面が出てくるので 「作成」 をクリック
⏱️ デプロイ完了まで 10〜30 分 程度かかります。
11-3. デプロイ完了の確認
-
「Vertex AI」 > 「オンライン予測」 で
forecast-online-endpointのステータスが 「アクティブ」 になっていることを確認
12. オンライン推論テスト(コンソール UI)
デプロイしたモデルにテストリクエストを送信し、予測結果を確認します。
手順
-
「Vertex AI」 > 「Model Registry」 >
automl-forecasting-model-upload-...をクリック - 「デプロイとテスト」 タブをクリック
- リクエスト JSON を入力
モデルの入力スキーマは以下の形式です。学習時に指定した transformations のカラム(bottles_sold と date)のみが入力フィールドとなります。
入力形式のルール:
| フィールド | 型 | 要素数 | 説明 |
|---|---|---|---|
date |
文字列の配列 | 37(= context_window 30 + forecast_horizon 7) | 連続した日付。先頭 30 日がコンテキスト、末尾 7 日が予測対象期間 |
bottles_sold |
文字列の配列 | 30(= context_window) | コンテキストウィンドウ分の販売本数。予測対象期間分は不要 |
📝 上記の例は
4829_AMERICAN VODKAS系列の 2026-02-01〜2026-03-02(30日間)をコンテキストとし、2026-03-03〜2026-03-09(7日間)の予測を求めるリクエストです。(30日分の過去データを見て、7日先を予測する)
date 欄に入力する値(初期値をすべて消してから貼り付け):
["2026-02-01","2026-02-02","2026-02-03","2026-02-04","2026-02-05","2026-02-06","2026-02-07","2026-02-08","2026-02-09","2026-02-10","2026-02-11","2026-02-12","2026-02-13","2026-02-14","2026-02-15","2026-02-16","2026-02-17","2026-02-18","2026-02-19","2026-02-20","2026-02-21","2026-02-22","2026-02-23","2026-02-24","2026-02-25","2026-02-26","2026-02-27","2026-02-28","2026-03-01","2026-03-02","2026-03-03","2026-03-04","2026-03-05","2026-03-06","2026-03-07","2026-03-08","2026-03-09"]
bottles_sold 欄に入力する値(初期値をすべて消してから貼り付け):
["0","798","0","48","1188","0","0","0","1182","24","12","648","42","0","0","1104","72","24","1110","36","0","0","1285","12","30","504","0","0","0","0"]
- 「予測」 をクリック
- レスポンスとして予測結果が表示されます (2026-03-03〜2026-03-09の7日間における予測販売数)
レスポンス例

13. REST API でのオンライン推論テスト(オプション: Cloud Shell)
コンソールの Cloud Shell から REST API 経由でオンライン推論をテストできます。
手順
- Google Cloud コンソール右上の Cloud Shell アイコン
>_をクリック - Cloud Shell ターミナルが起動したら、以下のコマンドを実行:
# 変数の設定(自分の環境に合わせて変更してください)
PROJECT_ID="your-project-id"
ENDPOINT_ID="your-endpoint-id" # Endpoint詳細画面で確認可能
REGION="us-central1"
# アクセストークンの取得
ACCESS_TOKEN=$(gcloud auth print-access-token)
# オンライン推論リクエスト
# date: context_window(30) + forecast_horizon(7) = 37 要素
# bottles_sold: context_window(30) = 30 要素
# すべて文字列型で指定する
curl -X POST \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/endpoints/${ENDPOINT_ID}:predict" \
-d '{
"instances": [
{
"date": [
"2026-02-01", "2026-02-02", "2026-02-03", "2026-02-04", "2026-02-05",
"2026-02-06", "2026-02-07", "2026-02-08", "2026-02-09", "2026-02-10",
"2026-02-11", "2026-02-12", "2026-02-13", "2026-02-14", "2026-02-15",
"2026-02-16", "2026-02-17", "2026-02-18", "2026-02-19", "2026-02-20",
"2026-02-21", "2026-02-22", "2026-02-23", "2026-02-24", "2026-02-25",
"2026-02-26", "2026-02-27", "2026-02-28", "2026-03-01", "2026-03-02",
"2026-03-03", "2026-03-04", "2026-03-05", "2026-03-06", "2026-03-07",
"2026-03-08", "2026-03-09"
],
"bottles_sold": [
"0", "798", "0", "48", "1188",
"0", "0", "0", "1182", "24",
"12", "648", "42", "0", "0",
"1104", "72", "24", "1110", "36",
"0", "0", "1285", "12", "30",
"504", "0", "0", "0", "0"
]
}
]
}'
📝
ENDPOINT_IDは、「Vertex AI」 > 「オンライン予測」 > エンドポイント詳細画面の URL やエンドポイント情報から確認できます(数字の ID)。
正常時のレスポンス
HTTP ステータス 200 とともに、以下のような JSON が返されます:
{
"predictions": [
{
"value": [
63.01,
139.73,
658.61,
92.00,
53.23,
46.83,
657.03
]
}
],
"deployedModelId": "59857962771939328",
"model": "projects/{project-number}/locations/us-central1/models/{model-id}",
"modelVersionId": "1"
}
14. クリーンアップ
⚠️ 重要: テストが完了したら、以下の手順で必ずリソースを削除してください。特に Endpoint は稼働中に継続的に課金されます。
リソースは依存関係の都合上、以下の順序で削除 してください。
14-1. Endpoint からモデルをアンデプロイ → Endpoint を削除
- 「Vertex AI」 > 「オンライン予測」 をクリック
-
forecast-online-endpointをクリック - デプロイされているモデルの 「⋮」 > 「エンドポイントからモデルをアンデプロイ」 をクリック
- 確認ダイアログで 「アンデプロイ」 をクリック
- アンデプロイ完了後、エンドポイント一覧に戻る
-
forecast-online-endpointの 「⋮」 > 「エンドポイントを削除」 をクリック - 確認ダイアログで 「削除」 をクリック
14-2. Model Registry からモデルを削除
- 「Vertex AI」 > 「Model Registry」 をクリック
- 対象のモデルの 「⋮」 > 「モデルを削除」 をクリック
- 確認ダイアログで 「削除」 をクリック
14-3. パイプライン実行の削除
- 「Vertex AI」 > 「パイプライン」 をクリック
- 対象のパイプライン実行の 「⋮」 > 「削除」 をクリック
- 確認ダイアログで 「削除」 をクリック
14-4. BigQuery データセット・テーブルの削除
- 「BigQuery」 をクリック
- 左側パネルで自分のプロジェクト >
forecast_datasetを見つける -
forecast_datasetの右側 「⋮」 > 「データセットを削除」 をクリック - 確認のためデータセット ID
forecast_datasetを入力し 「削除」 をクリック
14-5. Cloud Storage バケットの削除
- 「Cloud Storage」 > 「バケット」 をクリック
-
{プロジェクトID}-forecast-pipelineにチェックを入れる - 「削除」 ボタンをクリック
- 確認のためバケット名を入力し 「削除」 をクリック
✅ すべてのリソースが削除されたことを確認してください。「Vertex AI」 > 「オンライン予測」 でエンドポイントが残っていないことを最終確認してください。
15. コスト見積もり詳細
| リソース | 単価 | 本手順での想定使用量 | 見積もり費用 |
|---|---|---|---|
| AutoML Forecasting 学習 | 〜$19/ノード時間 | 1〜3 ノード時間 | $19〜$57 |
| Vertex AI Endpoint (n1-standard-4) | 〜$0.19/時間 | 2〜5 時間(テスト) | $0.4〜$1.0 |
| BigQuery クエリ実行 | $5/TB(最初の 1TB/月は無料) | 数 GB | $0(無料枠内) |
| Cloud Storage | $0.02/GB/月 | 数 GB | $0.1 未満 |
| 合計 | $20〜$60 程度 |
💡 コストの大部分は AutoML Forecasting の学習です。
budget_milli_node_hoursを1000(= 1 ノード時間)に設定することで、学習コストを最小限に抑えられます。
16. トラブルシューティング
パイプラインが失敗する
| 症状 | 原因 | 対処法 |
|---|---|---|
| 権限エラー (Permission Denied) | サービスアカウントの IAM 権限不足 | Step 3 の権限を再確認 |
| データソースが見つからない | BigQuery テーブル URI の入力ミス |
bq://プロジェクトID.forecast_dataset.iowa_liquor_daily の形式を確認 |
| GCS バケットエラー | バケットのリージョン不一致 | バケットとパイプラインが同じリージョン(us-central1)であることを確認 |
| 学習ステップで失敗 | データ品質の問題 | Step 6 でデータに NULL や異常値がないことを確認 |
クォータ超過 (restricted_image_training_cpus) |
並列トライアル数がクォータ上限を超過 |
stage_1_num_parallel_trials / stage_2_num_parallel_trials を 2 程度に下げる。「IAM と管理」>「割り当て」で Restricted image training CPUs の上限を確認 |
Endpoint にデプロイできない
| 症状 | 原因 | 対処法 |
|---|---|---|
| クォータエラー | リソースクォータの上限 | Google Cloud コンソール「IAM と管理」>「割り当て」で 該当するVMインスタンス のクォータを確認 |
| モデルが選択できない | モデルのリージョン不一致 | Endpoint とモデルが同じリージョンであることを確認 |
推論テストで結果が返らない
| 症状 | 原因 | 対処法 |
|---|---|---|
| 400 Bad Request | リクエスト JSON のフォーマット不正 | Model Registry でモデルの入力スキーマを確認し、JSON を修正 |
| 503 Service Unavailable | モデルがまだデプロイ中 | Endpoint 画面でステータスが「デプロイ済み」になるまで待機 |
| 認証エラー | アクセストークンの有効期限切れ |
gcloud auth print-access-token で再取得 |
17. 参考リンク
- AutoML による予測
- テンプレート ギャラリーの事前作成済みテンプレートを使用する
- カスタム トレーニング済みモデルから推論を取得する
- Iowa Liquor Sales データセット
- Vertex AI 料金
NTT DATA公式アカウントです。 技術を愛するNTT DATAの技術者が、気軽に楽しく発信していきます。 当社のサービスなどについてのお問い合わせは、 お問い合わせフォーム nttdata.com/jp/ja/contact-us/ へお願いします。