時系列予測を実行する

このページでは、AlloyDB データベースで時系列予測を直接実行する方法について説明します。TimesFM モデルなどのさまざまな予測モデルを使用することで、不確実性に対処し、情報に基づいた戦略的な意思決定を行うことができます。モデルの詳細については、TimesFM 研究のブログをご覧ください。

AlloyDB の ai.forecast 関数は、ts_forecasting モデルタイプで登録された任意のモデルで動作するように設計されています。これにより、ニーズに最適なモデルを柔軟に使用できます。このドキュメントでは、TimesFM の使用方法を詳しく説明しますが、他のモデルにもこの原則を適用できます。

始める前に

時系列予測を実行する前に、AlloyDB で予測機能を有効にして、モデルを登録する必要があります。

予測モデルを登録する

AlloyDB では、さまざまな予測モデルを使用できます。

このセクションでは、TimesFM モデルを登録する手順について説明します。他のモデルの登録手順については、モデル エンドポイント管理でモデル エンドポイントを登録するをご覧ください。

TimesFM モデルを使用する

TimesFM モデルには、次の 2 つのバージョンがあります。

  • TimesFM 1.0: TimesFM モデルの初期バージョン。
  • TimesFM 2.0: バージョン 1.0 と比較して精度が最大 25% 向上するため、このバージョンをおすすめします。

どちらのモデルも Model Garden で利用可能で、迅速にデプロイできます。

TimesFM モデルを使用するには、まず TimesFM モデルを Vertex AI エンドポイントにデプロイしてから、AlloyDB に登録する必要があります。

Vertex AI エンドポイントに TimesFM モデルをデプロイする

モデルは、 Google Cloud コンソールからワンクリックでデプロイするか、Colaboratory ノートブックを使用して手動でデプロイできます。

ワンクリック デプロイ

ワンクリック デプロイを使用して TimesFM モデルをデプロイする手順は次のとおりです。

  1. Google Cloud コンソールで、[Model Garden] ページに移動します。

    Model Garden に移動
  2. [検索] フィールドに「TimesFM」と入力します。
  3. 検索結果で、TimesFM をクリックします。
  4. [TimesFM] ページで、次の手順を実施します。

  5. [モデルをデプロイ] をクリックします。
  6. [Vertex AI] を選択します。
  7. [Vertex AI へのデプロイ] ペインで、モデルを構成してデプロイします。

    1. TimesFM モデルの最新バージョンを使用するには、[リソース ID] プルダウンで google/timesfm-2.0 を選択します。
    2. 後でデプロイを特定しやすくするために、次のように入力します。
      1. [モデル名] に、一意の MODEL_NAME を入力します。
      2. [エンドポイント名] に、一意の ENDPOINT_NAME を入力します。
    3. 構成オプションを開くには、[デプロイの設定] で [詳細] をクリックします。
      1. レイテンシを最小限に抑えるために、[リージョン] プルダウンで、AlloyDB インスタンスが配置されているのと同じリージョンを選択します。
      2. 最適なパフォーマンスを実現するには、[マシンの仕様] プルダウンで適切なマシン仕様を選択します。GPU または TPU の方がレイテンシが低い場合があります。
    4. [可用性ポリシー] の [エンドポイントへのアクセス] プルダウンで、[パブリック(共有エンドポイント)] を選択します。

      これにより、aiplatform ドメインに AlloyDB で動作するエンドポイントが作成されます。

    5. モデルをマネージド エンドポイントにデプロイするには、[デプロイ] をクリックします。デプロイには 10~15 分程度かかることがあります。
  8. TimesFM モデルがデプロイされると、[エンドポイント] に google_timesfm-VERSION-one-click-deploy のようなリンクが表示されます。
  9. モデル リクエスト URL を取得するには、[エンドポイント] でデプロイリンクをクリックします。
  10. エンドポイントの詳細ページで、[リクエストの例] をクリックします。
  11. [リクエストの例] ペインで、モデル リクエスト URL を見つけてメモします。この情報は、AlloyDB に TimesFM モデルを登録するで使用します(例: https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict)。

    リクエスト URL に aiplatform.googleapis.com が含まれていることを確認します。

手動デプロイ

Colaboratory ノートブックを使用して TimesFM モデルを手動でデプロイする手順は次のとおりです。

  1. Google Cloud コンソールで、[Model Garden] ページに移動します。

    Model Garden に移動
  2. [検索] フィールドに「TimesFM」と入力します。
  3. 検索結果で、TimesFM をクリックしてモデルカードを開きます。
  4. [TimesFM] ページで、[CO ノートブックを開く] をクリックします。
  5. [ノートブックを開く] ウィンドウで、TimesFM 2.0 の [Colab Enterprise] リンクをクリックします。
  6. [Colab Enterprise] ページで、次の手順を実施します。

    1. ランタイム環境への接続を確立するには、[接続] をクリックします。
    2. 省略可: 必要に応じて、次の手順を実施します。

      • [Setup Google Cloud project] の [前提条件] セクションで、BUCKET_URIREGION を設定します。たとえば、BUCKET_URIgs://your-unique-bucket-name に、REGIONus-central1 に設定します。

      • [Deploy TimesFM to a Vertex AI Endpoint] の [accelerator_type] プルダウンで、必要に応じて別のアクセラレータ タイプを選択します。
      • [Step 3: Set the maximum forecast horizon] で、[horizon] フィールドと [max_context] フィールドに入力します。たとえば、horizon128 に、max_context512 に設定します。
    3. use_dedicated_endpoint チェックボックスをオフにします。
    4. ノートブックのすべてのセルを実行します。

    ノートブックの出力には、エンドポイントの詳細が projects/PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID の形式で示されます。

  7. SQL モデル作成呼び出しの model_request_url を作成するには、前の手順で取得したエンドポイントの詳細を使用して、プロジェクト ID とエンドポイント ID を次のように置き換えます。

    CALL google_ml.create_model(
     model_id => 'timesfm_v2',
     model_qualified_name => 'timesfm_v2',
     model_type => 'ts_forecasting',
     model_provider => 'google',
     model_request_url => 'https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict');

    次のセクションで説明するように、AlloyDB に TimesFM モデルを登録する際に、the google_ml.create_model 呼び出しでこの model_request_url が必要になります。

  8. ai.forecast 関数が想定どおりに動作することを確認するには、次のクエリの例を実行します。

    SELECT * FROM ai.forecast(
       source_query=> '
         SELECT my_timestamp, my_data_value FROM (
           VALUES
             (CAST(''2025-01-01'' AS TIMESTAMP), 10.0),
             (CAST(''2025-01-02'' AS TIMESTAMP), 12.0),
             (CAST(''2025-01-03'' AS TIMESTAMP), 11.0),
             (CAST(''2025-01-04'' AS TIMESTAMP), 13.0),
             (CAST(''2025-01-05'' AS TIMESTAMP), 15.0),
             (CAST(''2025-01-06'' AS TIMESTAMP), 14.0),
             (CAST(''2025-01-07'' AS TIMESTAMP), 16.0),
             (CAST(''2025-01-08'' AS TIMESTAMP), 18.0),
             (CAST(''2025-01-09'' AS TIMESTAMP), 17.0),
             (CAST(''2025-01-10'' AS TIMESTAMP), 20.0)
           ) AS t (my_timestamp, my_data_value)
         ' ,
       model_id => 'timesfm_v2',
       data_col => 'my_data_value',
       timestamp_col => 'my_timestamp',
    
       -- The rest of the parameters are the same
       horizon => 7,
       conf_level => 0.80
    );
AlloyDB に TimesFM モデルを登録する

AlloyDB に TimesFM モデルを登録する手順は次のとおりです。

  1. 予測を実行するデータを含む AlloyDB データベースに google_ml_integration 拡張機能がインストールされていることを確認します。

  2. google_ml_integration 拡張機能のバージョン 1.4.5 以降がインストールされていることを確認します。

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    

    出力例を次に示します。

    extversion
    ------------
    1.4.5
    (1 row)
    
  3. 予測モデルを登録するでメモしたモデル リクエスト URL を使用して、google_ml.create_model を呼び出します。

    CALL
    google_ml.create_model(
      model_id => 'MODEL_ID',
      model_qualified_name => 'MODEL_QUALIFIED_NAME',
      model_type => 'ts_forecasting',
      model_provider => 'google',
      model_request_url => 'https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/endpoints/ENDPOINT_ID:predict' -- Example endpoint from Model Garden
      );
    

    次のように置き換えます。

    • MODEL_ID: 予測に使用する登録済みモデルの固有識別子(例: vertex_timesfm)。
    • MODEL_QUALIFIED_NAME: ユーザー定義のモデル名(例: timesfm_v2)。
    • PROJECT_ID: モデルがデプロイされるプロジェクトの名前(例: forecast_project)。
    • ENDPOINT_ID: モデルデプロイの名前(例: my-timesfm-endpoint)。

      model_request_url は、モデルをデプロイした後に Vertex AI によって提供されます。Vertex AI コンソールの [リクエストの例] ペインから URL 全体をコピーします。プロジェクトとエンドポイントの正しい情報がすでに入力されています。

予測を生成する

TimesFM モデルを登録し、必要なフラグを有効にしたら、時系列データを含むソーステーブルまたはクエリを渡して予測を生成できます。

ai.forecast 関数については、別途ドキュメントに記載されています。説明と例を含むパラメータの完全なリストについては、モデル エンドポイント管理のリファレンスをご覧ください。

ソーステーブルから予測を生成する

次の例は、ソーステーブルを使用して予測を生成する ai.forecast 関数を呼び出す方法を示しています。

SELECT * FROM ai.forecast(
    model_id => 'MODEL_ID',
    source_table => 'time_series_data',
    data_col => 'data_points',
    timestamp_col => 'timestamp',
    horizon => 2,
    conf_level => 0.80
);

クエリから予測を生成する

次の例は、サブクエリをデータソースとして使用して ai.forecast 関数を呼び出し、予測を生成する方法を示しています。

SELECT * FROM ai.forecast(
    model_id => 'MODEL_ID',
    source_query => '(SELECT * FROM time_series_data ORDER BY timestamp LIMIT 1) AS time_series_data',
    data_col => 'data_points',
    timestamp_col => 'timestamp',
    horizon => 2,
    conf_level => 0.80
);

他の予測モデルを使用する

ai.forecast 関数は、AlloyDB に登録した他の時系列予測モデルでも使用できます。重要なのは、モデルが ts_forecasting モデルタイプで登録されていることを確認することです。

さまざまなタイプのモデルを登録する手順の詳細については、モデル エンドポイント管理を使用してリモート AI モデルを登録して呼び出すをご覧ください。モデルを登録したら、model_id を指定して ai.forecast 関数で使用できます。

次のステップ