IBM Granite の時系列予測モデル「PatchTST-FM-r2」をゼロショットで動かす完全チュートリアル|Apache 2.0 で商用利用OK

約18分で読めます by ぽんたぬき
IBM Granite の時系列予測モデル「PatchTST-FM-r2」をゼロショットで動かす完全チュートリアル|Apache 2.0 で商用利用OK

IBM Granite の時系列予測モデル「PatchTST-FM-r2」をゼロショットで動かす完全チュートリアル|Apache 2.0 で商用利用OK

学習データを用意しなくても、明日の需要が予測できる時代が来ました。

従来の時系列予測では、ARIMA・Prophet・LSTMといった手法を使うにしても、予測対象のデータセットごとに学習を行う必要がありました。データが少なければ精度は出ず、系列数が増えるほど学習コストは膨らみます。

2026年9月9日、IBM が公開した PatchTST-FM-r2 はこの常識を覆します。大量の時系列データで事前学習済みのファウンデーションモデルであり、自分のデータを渡すだけでゼロショット予測が実行できます。しかも Apache 2.0 ライセンスで商用利用も可能です。

この記事を最後まで読めば、自分の CSV データに対して数行のコードで確率的な予測(信頼区間付き)が出せるようになります。所要時間は約 15 分。Python が動く環境があれば GPU は不要です。


PatchTST-FM-r2 とは? ── 3 行でわかる概要

時系列版「ファウンデーションモデル」という発想

LLM が大量のテキストで事前学習するように、PatchTST-FM-r2 は大量の時系列データで事前学習されています。推論時にはデータを入力するだけで予測が返ってきます。「モデルを育てる」から「モデルを借りる」へのパラダイム転換です。

スペック早見表

項目 内容
パラメータ数 約 385M
最大コンテキスト長 8,192 ステップ
公開日 2026年9月9日
ライセンス Apache 2.0 / OpenMDW 1.0 デュアル
提供元 IBM Granite

なぜ今このモデルが注目されるのか

精度(GIFT-Eval ゼロショット第 2 位)と商用利用可能性を両立している点が希少です。競合モデルの多くが非商用ライセンスに限定されているなか、Apache 2.0 で PoC から本番導入まで一気通貫で使える点が最大の差別化ポイントになっています。


アーキテクチャ解説 ── Conformer が長期と短期をつなぐ

実装だけ知りたい方は、この章を飛ばして「導入手順」へ進んでください。

ベースとなる PatchTST のおさらい

PatchTST は時系列をパッチ(一定長の区間)に分割して Transformer に入力する手法です。画像認識における ViT がピクセルをパッチに分割するのと同じ発想で、時系列の局所的なパターンをトークンとして扱います。

r2 の最大の進化 ── Conformer ブロックの採用

PatchTST-FM-r2 の中核は、Conformer ブロックです。音声認識分野で実績のある Conformer を時系列に転用しており、「Attention は遠くを見る、Convolution は近くを見る」という役割分担が特徴です。

コンポーネント 担当する役割
マルチヘッド自己アテンション 長距離の依存関係(季節性・トレンド)
時間的畳み込み(カーネル {5,5,3,3}) 短距離のローカルパターン(急なスパイク)
ハーフステップ FFN(前後 2 層) 表現能力の強化

ブロック数は前世代(r1)の 20 から 30 に拡張され、正規化層も追加されています。

予測をなめらかにする 50% オーバーラップパッチ

パッチ長 16・ストライド 8 で 50% 重複させながらパッチを切り出し、ハミング窓で重み付けします。推論時は Overlap-and-Add 方式でパッチをつなぎ合わせるため、パッチ境界で予測値が不連続になる問題が解消されています。

99 分位数予測ヘッドで「不確実性」を出力する

r2 は点予測ではなく分布を返す確率的予測に対応しています。10 パーセンタイル・中央値・90 パーセンタイルといった分位点を同時に取得できるため、在庫計画やキャパシティプランニングにそのまま活用できます。


GIFT-Eval ベンチマーク結果を読み解く

GIFT-Eval とは

複数ドメイン・複数周波数を横断する時系列予測の標準評価基盤です。追加学習なし(ゼロショット)で複数データセットを公平に比較できる設計になっており、時系列ファウンデーションモデルの事実上の標準ベンチマークとなっています。

スコア(2026年9月8日時点)

指標 スコア(幾何平均) ゼロショット全体順位
CRPS 0.467 第 2 位
MASE 0.6846 第 2 位

MASE はナイーブ予測(直前値を繰り返す)を 1.0 としたときの相対誤差です。0.6846 はナイーブ予測の 68% 程度の誤差しかないことを意味し、値が小さいほど優秀です。CRPS は確率予測の精度指標で、点予測の MAE を分布全体に拡張したものです。

「商用利用可能モデルの中では第 1 位」という立ち位置

Chronos-2・Timer-S1・Toto と比較したとき、PatchTST-FM-r2 は商用利用可能なライセンスを持つモデルの中では最高クラスの精度を達成しています。精度最優先なら全体首位を狙う選択肢もありますが、業務導入を前提とするなら Apache 2.0 の安全性が判断を大きく左右します。

なお、事前学習データに GIFT-Eval のテストセットを含めていないことが明示されており、ベンチマーク数値の信頼性も担保されています。


【実践】HuggingFace Hub から導入する手順

STEP 0 ── 前提環境を確認する

  • Python 3.9 以上
  • RAM 8GB 以上(推奨 16GB)
  • GPU は不要(CPU でも動作します)

仮想環境を作成してから進めることを推奨します。

python3 -m venv .venv
source .venv/bin/activate  # Windows の場合: .venv\Scripts\activate

STEP 1 ── granite-tsfm をインストールする

# pip installもPythonスクリプト内に統合する(下記Pythonコードを参照)

PatchTSTFMForPrediction クラスは 0.3.9 以降で対応しています。バージョン指定なしでインストールすると古いバージョンが入る可能性があるため、必ず >=0.3.9 を指定してください。

インストール後、モデルは初回実行時に ~/.cache/huggingface に自動ダウンロードされます(約 1.5GB)。オフライン環境の場合は事前に huggingface-cli download ibm-granite/granite-timeseries-patchtst-fm-r2 でキャッシュしておきましょう。

STEP 2 ── モデルをロードする

import subprocess
import sys

# python3コマンドに依存せず、現在のPythonインタープリタでインストールする
subprocess.check_call([sys.executable, "-m", "pip", "install", "granite-tsfm>=0.3.9"])

from tsfm_public import PatchTSTFMForPrediction

model = PatchTSTFMForPrediction.from_pretrained(
    "ibm-granite/granite-timeseries-patchtst-fm-r2"
)

STEP 3 ── 予測対象のデータを準備する

必要なのは「タイムスタンプ列」と「ターゲット列」だけです。ここでは ETTh1 データセットの HUFL(高圧負荷)列を使います。

import pandas as pd

# サンプルデータの取得
url = "https://raw.githubusercontent.com/zhouhaoyi/ETDataset/main/ETT-small/ETTh1.csv"
df = pd.read_csv(url, parse_dates=["date"])
df = df.sort_values("date").reset_index(drop=True)

print(df[["date", "HUFL"]].tail())

DataFrame はタイムスタンプ昇順でソートされている必要があります。欠損値がある場合は事前に補完または除去してください。


【実践】ゼロショットで予測を実行する

STEP 4 ── パイプラインを組み立てる

from tsfm_public import TimeSeriesForecastingPipeline

pipe = TimeSeriesForecastingPipeline(
    model=model,
    timestamp_column="date",
    target_columns=["HUFL"],
    context_length=512,
    prediction_length=64,
    quantile_levels=[0.1, 0.5, 0.9],
    freq="1h",
)

各パラメータの意味と決め方は以下のとおりです。

引数 意味 決め方のコツ
context_length 参照する過去の長さ 季節周期の 2〜3 倍を目安(最大 8,192)
prediction_length 予測する未来の長さ 業務上必要な先読み期間
quantile_levels 出力する分位点 0.1/0.5/0.9 で 80% 信頼区間
freq データの時間粒度 1h1d など pandas 準拠

STEP 5 ── 推論を実行する(ファインチューニング不要)

# 末尾 512 点を入力として予測
forecast = pipe(df.iloc[-512:])
print(forecast.head())

返り値は dateHUFL_0.1HUFL_0.5HUFL_0.9 といった列を持つ DataFrame です。_0.5 が中央値(点予測に相当)、_0.1_0.9 が 80% 信頼区間の下限・上限を表します。

STEP 6 ── 予測結果を可視化する

import matplotlib.pyplot as plt

# 過去の実測値(直近 200 点)
history = df.iloc[-200:][["date", "HUFL"]]

fig, ax = plt.subplots(figsize=(14, 5))

# 実測値
ax.plot(history["date"], history["HUFL"], label="実測値", color="steelblue")

# 中央値予測
ax.plot(forecast["date"], forecast["HUFL_0.5"],
        label="予測(中央値)", color="tomato", linestyle="--")

# 80% 信頼区間
ax.fill_between(
    forecast["date"],
    forecast["HUFL_0.1"],
    forecast["HUFL_0.9"],
    alpha=0.25, color="tomato", label="80% 信頼区間"
)

ax.set_title("PatchTST-FM-r2 によるゼロショット予測")
ax.set_xlabel("日時")
ax.set_ylabel("HUFL")
ax.legend()
plt.tight_layout()
plt.show()

STEP 7 ── 精度を確認する(ホールドアウト検証)

ゼロショットで十分か判断するために、末尾 64 点を隠して予測し MASE を計算します。

import numpy as np

# 検証用データ分割
context = df.iloc[-(512 + 64):-64]   # 過去 512 点(コンテキスト)
actuals = df.iloc[-64:]["HUFL"].values  # 隠した 64 点(正解)

forecast_val = pipe(context)
predicted = forecast_val["HUFL_0.5"].values

# MASE 計算
naive_errors = np.abs(np.diff(context["HUFL"].values))
mae = np.mean(np.abs(predicted - actuals))
mase = mae / np.mean(naive_errors)

print(f"MASE: {mase:.4f}")
# 1.0 未満であればナイーブ予測より優秀

MASE が 1.0 を大きく下回れば、ゼロショットのまま運用可能です。さらに精度を求める場合はファインチューニングを検討してください。


応用編 ── 実務で使うためのポイント

複数系列(マルチアイテム)をまとめて予測する

id_columns を指定することで、店舗別・SKU 別などの複数系列を一括予測できます。

pipe_multi = TimeSeriesForecastingPipeline(
    model=model,
    timestamp_column="date",
    id_columns=["store_id", "sku_id"],   # 系列識別子
    target_columns=["sales"],
    context_length=512,
    prediction_length=7,
    freq="1d",
)

従来手法との使い分け

実際の開発現場では、すべてのケースでファウンデーションモデルが最適とは限りません。

手法 向いているケース
Prophet / ARIMA 系列数が少なく、解釈性が最優先
PatchTST-FM-r2(ゼロショット) 系列数が多い・学習データが乏しい・すぐ試したい
専用モデルの学習 十分な学習データがあり、最後の数% を詰めたい

ベストプラクティスとして、まずゼロショットで MASE を計測し、許容精度を満たさない場合にのみファインチューニングや専用モデルの学習を検討するという進め方を推奨します。


ライセンスと商用利用の注意点

Apache 2.0 / OpenMDW 1.0 のデュアルライセンス

PatchTST-FM-r2 は Apache 2.0OpenMDW 1.0(Linux Foundation がモデル配布向けに整備したライセンス)のデュアルライセンスです。商用利用・再配布・改変はすべて許可されており、社内の法務レビューも通しやすいライセンス体系です。

競合モデルの多くが非商用限定ライセンスを採用しているなか、業務導入のリスクが低い点が ibm-granite/granite-timeseries-patchtst-fm-r2 の最大の実務的メリットです。

利用時のチェックリスト

  • NOTICE ファイルを同梱・表示する(Apache 2.0 の要件)
  • 改変した場合は変更箇所を明示する
  • 元のライセンス条文をコピーして配布物に含める

よくある質問(FAQ)

Q: ファインチューニングは本当に不要? ゼロショットのままで多くのユースケースに対応できます。ただし、業界固有の特殊なパターンがある場合は、少量のデータでファインチューニングすることでさらに精度が向上します。

Q: 商用案件で使って問題ない? Apache 2.0 ライセンスのため、商用利用・再配布・改変すべて可能です。社内展開・SaaS 組み込みともに問題ありません。

Q: 不確実性(信頼区間)はどう取得する? quantile_levels=[0.1, 0.5, 0.9] のように分位点を指定するだけです。0.10.9 の間が 80% 信頼区間に相当します。

Q: r1 と r2 の違いは? 主な変更点は 3 つです。① Conformer ブロックの採用、② ブロック数の 20→30 への拡張と正規化層の追加、③ 確率的予測(分位数出力)への対応。

Q: GPU がなくても動く? 動作します。385M パラメータのモデルですが、推論は CPU でも実行可能です。ただし、数百系列を一括予測する場合は GPU を推奨します。

Q: データが短い(数十点しかない)場合は? context_length をデータ点数以下に設定してください。ただし、データが極端に少ない場合は精度が低下することがあります。この場合は Prophet など軽量な手法の併用も検討してください。


まとめ

この記事では、IBM Granite が公開した時系列予測ファウンデーションモデル ibm-granite/granite-timeseries-patchtst-fm-r2 の概要から実装までを段階的に解説しました。

  • ゼロショットで確率的な時系列予測が数行のコードから実行できる
  • GIFT-Eval で CRPS 0.467 / MASE 0.6846、商用利用可能モデル中では最高クラスの精度
  • Apache 2.0 ライセンスのため PoC から本番導入まで一気通貫で使える
  • Conformer ブロックにより長期トレンドと短期スパイクを同時に捉えられる

次の一歩は、自社データで pipe() を実行し MASE を計測することです。ゼロショットで許容精度に届けば、そのまま運用を開始できます。届かない場合はファインチューニングに進む、という段階的なアプローチで取り組んでみてください。

参考リンク

関連記事

Rustの「Never型(!)」がついに安定化 — 10年越しの型システム進化を解説

Rustの「Never型(!)」がついに安定化 — 10年越しの型システム進化を解説

Rustの「Never型(!)」がついに安定化 — 10年越しの型システム進化を解説 はじめに: の「型」を、あなたは説明できますか? 上記の関数の戻り値型 を見て、すぐに意味を説明できるRustエンジニアは、おそらく中級者以上でしょう。「絶対に値を返さない関数の型」と答えられれば合格です。では、これはなぜ型として成立するのでしょうか?そして、なぜこの型の完全な安定化に10年もかかったのでしょう...

KimiやDeepSeekに話しかけたら、実はClaudeだった──Anthropicが暴いたAI「蒸留攻撃」の全貌

KimiやDeepSeekに話しかけたら、実はClaudeだった──Anthropicが暴いたAI「蒸留攻撃」の全貌

KimiやDeepSeekに話しかけたら、実はClaudeだった──Anthropicが暴いたAI「蒸留攻撃」の全貌 あなたがKimiに送ったあの質問、本当にKimiが答えていましたか? 2026年9月10日、AIスタートアップAnthropicは業界に衝撃を与える「脅威インテリジェンスレポート(2026年9月版)」を公開しました。そのレポートが明らかにしたのは、私たちユーザーが普段から使っている...

Meta Muse 徹底解説|「あなた専用AIエージェント」は個人データをどこまで見ているのか

Meta Muse 徹底解説|「あなた専用AIエージェント」は個人データをどこまで見ているのか メール、カレンダー、決済、健康アプリ——あなたの日常を支えるあらゆるアプリに接続するパーソナルAIエージェントが、2026年9月8日、現実のものになりました。Metaが正式ローンチした「Muse」です。 「便利そう」と感じる方もいれば、「さすがにそこまでは……」と身構える方もいるでしょう。その両方の感覚...

VoiceStudio 音声クローニング完全ガイド|ElevenLabs代替のローカルAIで動画吹替まで【2026年版】

VoiceStudio 音声クローニング完全ガイド|ElevenLabs代替のローカルAIで動画吹替まで【2026年版】

VoiceStudio 音声クローニング完全ガイド|ElevenLabs代替のローカルAIで動画吹替まで【2026年版】 ElevenLabsに毎月$22以上の課金を続けていますか?あるいは、音声データをクラウドに送ることに不安を感じていますか? 本記事では、完全ローカル動作のオープンソース音声スイート「VoiceStudio(OmniVoice Studio)」を使って、3〜15秒の音声から声を...

コメント

0/2000