🍔

時系列予測をAI Agentに組み込む。Chronos MCP サーバーを試してみた

に公開

本ブログは AWS AI Agent ブログ祭り(Zenn: #awsaiagentblogfes, X: #AWS_AI_AGENT_ブログ祭り)の第 11 日目です。

サマリ

  1. 追加学習なしで、需要予測を実現
  2. MCP ツールとして需要予測を呼び出せるのでAI Agent に組み込みやすくなる
  3. Chronos のゼロショット推論機能を Amazon Bedrock AgentCore に載せて MCP で呼び出すことにより実現

はじめに

時系列予測の導入における課題

街中で営業するカジュアルダイニングレストランを想定してみましょう。このレストランでは、ハンバーガー、パスタ、サラダの3つの主力商品を提供しており、日々の需要変動に応じた適切な在庫管理、発注管理、スタッフ配置が経営の重要な要素となっています。

しかし、需要予測の導入には2つの大きな課題がありました:

  1. 予測モデルの構築: データサイエンティストによる学習データの準備、モデル構築、継続的なモデルの運用管理も求められます。
  2. 予測結果の活用: 予測結果をどう解釈し、実際の業務判断にどう反映させるか。また、システム的な連携の難しさに加え、予測の不確実性をどう扱うかなど、ビジネスに導入する上での考慮事項も出てきます。

つまり、「予測を作る」ことと「予測を使いこなす」ことの両方に専門的な知識と経験が必要で、多くの現場では導入のハードルが高いのが現状です。

そこで今回は、これらの課題の解決策の一つになりうるかを探るために、Chronos のゼロショット推論を MCP として呼び出せるような構成を検証してみました。

Chronosのゼロショット推論への期待

Chronos は、事前学習済みの時系列予測モデルです。Chronosには大きく2つの利用方法があります:

  1. ゼロショット推論: 追加学習なしで、事前学習済みモデルをそのまま利用
  2. ファインチューニング: 特定のデータセットで追加学習を行い、高精度な予測を実現

今回注目するのは、ゼロショット推論の方です。この手法では、追加の学習プロセスを必要とせず、即座に予測結果を得ることができます。特に重要なのは、専門的な機械学習の知識やモデルメンテナンスを気にすることなく、必要な時に予測機能を呼び出すだけで機械学習の恩恵を受けられることです。

ゼロショット推論により、需要予測をより手軽に導入できるようになります。

MCPによる統合の価値

時系列予測を Model Context Protocol(MCP)として提供することで、AI Agentから簡単に呼び出せるようになります。これにより、例えば店長向けのAI Agentを構築する際に、「明日雨の予報だけど、来客数はどう変わる?」といった質問の一部として、時系列予測機能を組み込むことができます。

従来なら予測システムのAPIを直接呼び出し、結果を取得後に別途プログラムで処理する必要がありました。MCPを使うことで、予測機能をAI Agentのツールの一つとして統合し、より自然な対話フローの中で活用できるようになります。

そのため、今回は、Chronos モデルをMCPとして呼び出せるような構成を検証してみました。

何がこれを可能にしたのか

この革新的な体験を支える3つの技術要素が組み合わさることで実現しました。

まず、Chronos
のゼロショット推論機能 です。Chronosは事前学習済みの時系列予測モデルで、ゼロショット推論により追加の学習を必要とせず即座に予測が可能です。軽量版のChronos-Boltは信頼区間付きの予測を提供し、リスク管理に不可欠な不確実性の情報も含まれているため、ビジネスの意思決定に直接活用できます。

参考リンク:

  • Chronos Forecasting GitHub

https://github.com/amazon-science/chronos-forecasting

  • AWS Blog: Chronos-Boltによる高速・高精度なゼロショット予測

https://aws.amazon.com/jp/blogs/news/machine-learning-fast-and-accurate-zero-shot-forecasting-with-chronos-bolt-and-autogluon/

次に、Model Context Protocol (MCP) が自然言語とAIツールの橋渡しを行います。複雑なAPIを意識することなく、標準化されたインターフェースを通じて様々なツールとの統合が可能になります。

最後に、Amazon Bedrock AgentCore Runtime がサーバーレス実行環境を提供します。自動スケーリングとOAuth認証により、運用の手間を最小限に抑えながらセキュアなアクセス制御を実現します。

AgentCore GA発表: 2025年10月にAmazon Bedrock AgentCoreが一般提供開始となり、このタイミングで東京リージョン(ap-northeast-1)でも利用可能になりました。今回の検証は、この東京リージョンで実施しています。

AgentCore Runtimeのセットアップ詳細: 基本的なセットアップ手順は公式ドキュメントをご参照ください。


セットアップ

環境準備

システムを構築するために必要な前提条件は、AWSアカウント、Docker環境、Python 3.12、そしてAWS CLIの設定です。

サンプルコード: 今回の実装はGitHubで公開しています:

https://github.com/terayas/Chronos-MCP-Bedrock-AgentCore-sample

プロジェクトは以下のようなシンプルな構造で構成されます:

Chronos-MCP-Bedrock-AgentCore-sample/
├── chronos_mcp_server.py           # メインのMCPサーバー
├── data/
│   └── restaurant_demand.json      # テスト用データ
├── Dockerfile                      # コンテナ設定
├── requirements.txt                # 依存関係
├── .bedrock_agentcore.yaml.example # AgentCore設定テンプレート
├── .env.example                    # 環境変数テンプレート
├── setup_cognito_secure.sh         # セキュアなCognito設定スクリプト
├── test_mcp_connection_secure.py   # セキュアなテストスクリプト
└── README.md                       # セットアップガイド

依存関係は必要最小限に絞り込んでいます:

https://github.com/terayas/Chronos-MCP-Bedrock-AgentCore-sample/blob/main/requirements.txt

リージョンとCLI設定

今回の検証では、ap-northeast-1リージョンにBedrock AgentCoreをデプロイします。AgentCore Runtimeは現在限定されたリージョンでのみ利用可能なため、ap-northeast-1での実行を前提としています。

AWS CLIの設定も必要です:

# AWS CLIの設定確認
aws configure list

# ap-northeast-1リージョンでの操作を確認
aws bedrock-agentcore-control list-agent-runtimes --region ap-northeast-1

AgentCore Runtimeのデプロイと管理を、今回はすべてCLI経由で行います。

Cognito認証の設定

AgentCore RuntimeにデプロイされたMCPサーバーにアクセスするには、OAuth認証が必要です。これは、本番環境でのセキュアなアクセス制御を実現するためです。Cognito User Poolの設定は、公式ドキュメントの手順に従っています。

セキュアなセットアップスクリプト(setup_cognito_secure.sh)を使用することで、機密情報を適切に管理しながらCognito認証を設定できます。


実装

MCPサーバーの実装

こちらが、MCPサーバーのサンプルコードです。

https://github.com/terayas/Chronos-MCP-Bedrock-AgentCore-sample/blob/main/chronos_mcp_server.py

Docker設定

AgentCore Runtimeには1GBのコンテナサイズ制限があるため、AutoGluonからChronosモデルをロードする際のパッケージサイズを考慮した設定を行っています。

詳細なDockerfile設定は、GitHubリポジトリのDockerfileをご参照ください。

AgentCore設定

AgentCore Runtimeの設定は、bedrock-agentcore-starter-toolkitを使用して生成します。この公式ツールキットにより、必要なIAMロール、ECRリポジトリ、Cognito認証などが自動的に設定されます。

詳細な設定ファイルは、GitHubリポジトリの.bedrock_agentcore.yaml.exampleをご参照ください。


検証フェーズ

テストデータの準備

検証には、レストランの実際の運営を想定したテストデータを使用しました。ハンバーガー、パスタ、サラダの3商品について、それぞれ30日分の需要データを準備しています。

{
  "restaurant_data": {
    "daily_demand": {
      "hamburger": [45, 52, 38, 67, 89, 95, 78, 65, 72, 88],
      "pasta": [32, 28, 41, 55, 62, 58, 49, 43, 51, 64],
      "salad": [18, 22, 15, 28, 35, 31, 24, 21, 26, 33]
    }
  }
}

認証とMCP接続

システムの検証では、まずCognito認証によるBearer Tokenの取得から始まります。このトークンを使用してAgentCore Runtimeに接続し、MCPプロトコルを通じて時系列予測ツールにアクセスします。セキュリティのため、認証情報は環境変数から取得します。

https://github.com/terayas/Chronos-MCP-Bedrock-AgentCore-sample/blob/main/test_mcp_connection_secure.py

シナリオテスト結果

実際の検証では、3つの異なるシナリオでテストを実行しました。

シナリオ1: レストラン来客数予測

10日分の来客数データ [45, 52, 38, 67, 89, 76, 54, 62, 48, 71] を入力として、7日間の予測を実行しました。

{
  "予測対象": "レストラン日別来客数",
  "予測期間": "7日間",
  "入力データ数": 10,
  "予測結果": [66, 65, 64, 63, 61, 60, 59],
  "推論方式": "ゼロショット(学習なし)",
  "モデル": "AutoGluon Chronos-Bolt Tiny",
  "信頼区間": {
    "下限_10%": [40, 35, 32, 29, 26, 25, 24],
    "上限_90%": [103, 109, 113, 117, 118, 120, 122]
  },
  "メッセージ": "レストラン日別来客数の7日間ゼロショット予測が完了しました"
}

シナリオ2: 売上予測

7日分の売上データ [120000, 135000, 98000, 156000, 178000, 145000, 162000] を使用して、5日間の売上予測を実行しました。

{
  "予測対象": "日別売上金額",
  "予測期間": "5日間",
  "入力データ数": 7,
  "予測結果": [156913, 154691, 153155, 151972, 151576],
  "推論方式": "ゼロショット(学習なし)",
  "モデル": "AutoGluon Chronos-Bolt Tiny",
  "信頼区間": {
    "下限_10%": [98234, 96845, 95123, 93876, 92654],
    "上限_90%": [215592, 212537, 211187, 210068, 210498]
  },
  "メッセージ": "日別売上金額の5日間ゼロショット予測が完了しました"
}

シナリオ3: パスタ需要予測

パスタの需要データ [32, 28, 41, 55, 62, 58, 49, 43, 51, 64] を入力として、3日間の短期予測を実行しました。

{
  "予測対象": "パスタ日別需要",
  "予測期間": "3日間",
  "入力データ数": 10,
  "予測結果": [58, 56, 54],
  "推論方式": "ゼロショット(学習なし)",
  "モデル": "AutoGluon Chronos-Bolt Tiny",
  "信頼区間": {
    "下限_10%": [35, 33, 31],
    "上限_90%": [81, 79, 77]
  },
  "メッセージ": "パスタ日別需要の3日間ゼロショット予測が完了しました"
}

クリーンアップ

AgentCore Runtimeの削除

検証完了後は、AgentCore Runtimeを削除して不要なコストの発生を防ぎます。AgentCore Runtimeは従量課金制のため、使用しない場合は確実に削除することが重要です。

Agent Runtime IDの確認

まず、削除対象のAgent Runtime IDを確認します。これは .bedrock_agentcore.yaml ファイルから取得できます:

# Agent Runtime IDの確認
grep "agent_arn:" .bedrock_agentcore.yaml

AgentCore Runtimeの削除

AWS CLIを使用してAgentCore Runtimeを削除します:

# AgentCore Runtimeの削除
aws bedrock-agentcore-control delete-agent-runtime \
    --agent-runtime-id YOUR_AGENT_RUNTIME_ID \
    --region ap-northeast-1

削除処理は非同期で実行されるため、完了まで数分かかる場合があります。削除状況は以下のコマンドで確認できます:

# 削除状況の確認
aws bedrock-agentcore-control get-agent-runtime \
    --agent-runtime-id YOUR_AGENT_RUNTIME_ID \
    --region ap-northeast-1

削除が完了すると、リソースが見つからないエラーが返されます。これで課金対象のリソースが正常に削除されたことを確認できます。


まとめ

今回の検証により、自然言語での時系列予測システムの構築に成功しました。Chronosのゼロショット推論を活用することで、学習不要で即座に信頼区間付きの予測を実現できました。

従来なら専門的な分析ツールや知識が必要だった作業が、「来週の売上を予測して」と投げるだけで予測結果を返してくれます。過去のデータを与えるだけで、信頼区間付きの予測結果を取得することができるようになりました。これにより、需要予測が「特別な分析作業」から「日常的な分析作業」へと変わるのではないかとも思います。

この技術は需要予測、売上予測、在庫最適化など、様々な時系列データを扱う分野での活用が期待できます。もしかすると、時系列予測への取り組み方が変わるきっかけになるかもしれません。

さらに、2025年10月に発表されたChronos-2では、従来の単変量予測に加えて多変量予測や共変量(天気、イベント、曜日など)を考慮した予測が可能になりました。これにより、レストランの例で言えば「明日は雨で近くでイベントがあるから、ハンバーガーとパスタの需要はどう変わる?」といった、より現実的で複雑な予測がゼロショットで実現できます。Chronos-2の活用についても、今後検証していきたいと思います。

興味のある方は、ぜひ一度試してみてください。

アマゾン ウェブ サービス ジャパン (有志)

Discussion