1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

watsonx.aiの時系列基盤モデルGranite Time Seriesで予測をしてみた

1
Last updated at Posted at 2025-09-30

はじめに

この記事では、Granite Time Series をwatsonx.ai 上のJupyter Notebook で使うためのハンズオンです。
今回使用するデータは、以下です。ダウンロードしてローカルに置いておくとスムーズです。

データ:https://raw.githubusercontent.com/zhouhaoyi/ETDataset/main/ETT-small/ETTh1.csv

watsonx とは

業務にAI を組み込むことにより、企業のさまざまな業務領域でAI のインパクトを拡大、加速するためのプラットフォームおよびAI アシスタントソリューション(公式より)
https://www.ibm.com/jp-ja/products/watsonx

watsonx.ai とは

従来の機械学習と、基盤モデルを活用した新しい生成AI 機能の両方を学習・検証・調整・導入できるAI 構築のための次世代の企業向けスタジオ(公式より)
https://www.ibm.com/jp-ja/products/watsonx-ai

Granite Time Series とは

IBM が提供するGranite モデルシリーズのひとつで、時系列データに対応した基盤モデルです。時系列基盤モデルは言語に特化した大規模言語モデルと同様に、膨大な時系列データを用いて事前学習されています。従来の時系列予測モデルとは異なり、特定のタスクに特化せず幅広い時系列予測タスクに対応可能となっており、さらに少ないデータからでも精度の高い予測が可能となっています。
Granite 時系列データ分析モデルは他社と比べて軽量なモデルとなっています。
Granite モデルはオープンなモデルであることが特長のひとつとなっており、このモデルも他のGranite モデルと同様にモデルの情報やトレーニングデータを公開しています。
https://www.ibm.com/granite/docs/models/time-series/
https://huggingface.co/ibm-granite/granite-timeseries-ttm-r2

想定されるユースケース

  • シミュレーション・計画立案
    • 需要予測に基づいた生産計画や在庫管理を最適化し、無駄を削減
    • 再生可能エネルギーの発電量予測を活用した需給バランス調整で安定供給を実現
  • 制御や最適化への直接活用
    • リアルタイム制御ループに組み込み、自動的にパラメーターを最適化
    • AIによる継続的な効率改善で、人手に頼らない安定運用を可能に
  • 異常検知
    • 現時点での挙動が「いつもと違う」ことを早期に検知
    • 必要に応じてパラメーター調整やアラートで即時対応し、ダウンタイムを防止
  • シナリオ分析
    • 「もし◯◯が起きたら?」という条件を変えた未来をシミュレーション
    • 需給ショック、気象変動、設備トラブルなどのリスクを事前に把握し、対策を検討

ハンズオン事前準備

ハンズオン事前準備では、

  1. IBM Cloud へのログイン
  2. apikey の取得

を実施します。apikey は、ハンズオン本編で使用します。

IBM Cloud にログイン

  1. リンク (https://cloud.ibm.com/login) をクリックし、IBMid とパスワードを入力してログインする
    cloud1.png

  2. ログイン完了
    cloud2.png

apikey の取得

  1. ①管理 をクリック、②アクセス(IAM) をクリック
    cloud3.png

  2. ①API キー をクリック、②作成+ をクリック
    cloud4.png

  3. ①名前 に任意の名前を入力し、②作成 をクリック
    cloud5.png

  4. コピー ダウンロード をして、いつでも使えるようにしておく
    cloud6.png

  5. apikey の取得完了
    cloud7.png

ハンズオン本編

ハンズオン本編では、

  1. watsonx にログイン
  2. プロジェクトの作成
  3. サービスの関連付け
  4. プロジェクト・アクセス・トークンの作成
  5. csv ファイルをプロジェクトへアップロード
  6. 前処理
  7. 予測

を実施します。

watsonxにログイン

  1. リンク (https://dataplatform.cloud.ibm.com/login?context=wx) をクリックし、IBMid とパスワードを入力してログインする
    wx1.png

  2. ログイン完了
    wx2.png

プロジェクトの作成

  1. 左上の①ハンバーガーメニュー から、②すべてのプロジェクトの表示 をクリックする
    pj1.png

  2. 新規プロジェクト+ をクリックする
    pj2.png

  3. ①名前 にxxxxx (xxxxxは任意) を入力し、②作成 をクリックしてプロジェクトの作成は完了
    pj3.png

サービスの関連付け

  1. 左上オレンジの箇所が、自身で入力した名前になっているか確認し、管理 をクリック
    pj4.png

  2. ①サービスおよび統合 をクリックし、②サービスの関連付け をクリック
    pj5.png

  3. ① タイプがWatson Machine Learning のサービスにチェックを入れて、②関連付け をクリック
    pj6.png

プロジェクト・アクセス・トークンの作成

  1. ①アクセス制御 をクリック、②アクセス・トークン をクリック
    pj7.png

  2. 新規アクセス・トークン+ をクリック
    pj8.png

  3. ①名前 に任意の名前を入力し、②アクセス・ロール でEditor を選択、③作成 をクリック
    pj9.png

  4. 作成したアクセス・トークンが表示されたら完了
    pj10.png

csvファイルをプロジェクトへアップロード

  1. ローカルにダウンロードしたETTh1.csv を置いておく

  2. ①資産 をクリック、②資産のインポート をクリック
    as1.png

  3. ①ローカルファイル をクリック、②データアセット をクリック
    as2.png

  4. 参照 をクリックし、ローカルに置いたGE_RMS.csv を選択
    as3.png

  5. 完了 をクリックしてcsvファイルのインポートは完了
    as4.png

前処理

ノートブックを作成

  1. 新規資産 をクリック
    as5.png

  2. ①python を検索バーに入力し、②Python またはR notebooks でのデータおよびモデルの処理 (Jupyter ノートブック・エディター) を選択
    as6.png

  3. ①名前 にpreprocessing.pyを入力し、②作成 をクリック
    as7.png

  4. ランタイムが終了するのを待つ
    as8.png

    1. 99%で3分くらい止まることがあるが、その場合はプロジェクトに戻って再度作成したnotebook を選択する
      an1.png
      an2.png
  5. ①縦の3点リーダー をクリック、②プロジェクト・トークンの挿入 をクリック
    as9.png

  6. 自動的にproject_id やproject_access_token が入力される
    as10.png

ノートブックの操作方法

nb1.png : 上書き保存 (Save and create checkpoint (= ⌘S))
nb2.png : 選択している行の下に1行追加 (Insert cell below (= ⌘B))
nb3.png : この行をカットする (Cut this cell (= ⌘X))
nb4.png : この行をコピーする (Copy this cell (= ⌘C))
nb5.png : この行にクリップボードからペーストする (Paste this cell from the cripboard (= ⌘V))
nb6.png : この行を実行する(Run this cell and advance (=Shift+Enter))
nb7.png : この行の実行を停止させる (Interrupt the kernel)
nb8.png : この行の実行を再開する (Restart the kernel)
nb9.png : この行の実行を再開し、すべての行を実行する(Restart the kernel and run all cells)
nb10.png : 行の種類を選ぶ (select the cell type)

この記事では出力を確認しながら1つずつ行を実行します。

実行

  • 右上のコピーアイコンをクリックするとブロックごとにコピーができます。
  • 1ブロック = ノートブックでの1行 です。
  • コピー(⌘C) したブロックをノートブックにペースト(⌘V) し、実行(Shift+Enter) をします。
#プロジェクトにアップロードしたcsvファイルをノートブックにダウンロード
wslib.download_file("ETTh1.csv")

pro1.png

#存在するファイルを確認
!ls

pro2.png

#ライブラリのインポート
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

#「df」にcsvファイルを格納
df = pd.read_csv("ETTh1.csv")
#表示して格納できているか確認
df

pro3.png

#今回は"HULL"のデータを予測に使用する
timestamp_column = "date"
target_column = "HULL"
#データ数を絞るためにカラム数を指定
context_length = 2000

data = df.iloc[-context_length:]
data

pro4.png

#プロット
plt.figure(figsize=(10,2))
plt.plot(np.asarray(data[timestamp_column], dtype='datetime64[s]'), data[target_column], label="Historical data")
plt.plot(np.asarray(future_data[timestamp_column], dtype='datetime64[s]'), future_data[target_column], label="True", linestyle='dashed')
plt.title("Actual Total Load")
plt.show()

pro5.png

#抽出したデータをcsvファイルにしてプロジェクト内に保存
df1 = pd.merge(data, future_data,  how='outer')
wslib.save_data("ETTh1_1.csv", df1.to_csv(index=False).encode(), overwrite=True)

pro6.png

  • 基本的に自動保存だが、念のために左上の上書き保存マークを押して保存
    pro8.png

  • プロジェクトの資産を見に行くと、ETTh1_1.csvがある
    pro9.png

予測

ノートブックの作成(手順はpreprocessing.pyと同様)

  1. 新規資産 をクリック
    as5.png

  2. ①python を検索バーに入力し、②Python またはR notebooks でのデータおよびモデルの処理 (Jupyter ノートブック・エディター) を選択
    as6.png

  3. ①名前 にforecast.pyを入力し、②作成 をクリック
    as11.png

  4. ランタイムが終了するのを待つ
    as12.png

  5. ①縦の3点リーダー をクリック、②プロジェクト・トークンの挿入 をクリック
    as9.png

  6. 自動的にproject_id やproject_access_token が入力される
    as10.png

実行

#プロジェクトに保存したcsvファイルをノートブックにダウンロード
wslib.download_file("ETTh1_1.csv")

for1.png

#存在するファイルを確認
!ls

for2.png

#ライブラリのインポート
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#「df」にcsvファイルを格納
df = pd.read_csv(filepath_or_buffer="ETTh1_1.csv")
#表示して格納できているか確認
df

for3.png

#定義
timestamp_column = "date"
target_column = "HULL"
#watsonx.aiの設定
from ibm_watsonx_ai import Credentials
credentials = Credentials(
    url="https://us-south.ml.cloud.ibm.com",
    api_key="{自身で取得したapi_key}",
)
#watsonx.aiに接続
from ibm_watsonx_ai import APIClient
client = APIClient(credentials)
client.set.default_project(project_id="{プロジェクト・トークンの挿入で表示されているproject_id}")

for4.png
SUCCESS と表示されればOK

#TTMが使用できるか確認
for model in client.foundation_models.get_time_series_model_specs()["resources"]:
    print('--------------------------------------------------')
    print(f'model_id: {model["model_id"]}')
    print(f'functions: {model["functions"]}')
    print(f'long_description: {model["long_description"]}')
    print(f'label: {model["label"]}')

#使用するモデルにGRANITE_TTM_512_96_R2を定義
ts_model_id = client.foundation_models.TimeSeriesModels.GRANITE_TTM_512_96_R2

for5.png

#TTMの設定
from ibm_watsonx_ai.foundation_models import TSModelInference
ts_model = TSModelInference(
    model_id=ts_model_id,
    api_client=client
)
#TTMのパラメータの設定
from ibm_watsonx_ai.foundation_models.schema import TSForecastParameters
params = TSForecastParameters(
    timestamp_column=timestamp_column,
    freq="1h",
    target_columns=[target_column],
)
#予測
import time
tmp = []
for i in range(len(df)):
    print(i)
    data = df.iloc[i:i+512,]
    if(data.shape[0] != 512):
        break
    response = ts_model.forecast(data=data, params=params)
    time.sleep(0.1)
    tmp.append(response["results"][0])

for6.png

#予測結果をpickleに保管
import pickle
with open(f"{target_column}.pkl", "wb") as f:
    pickle.dump(tmp, f)
#ロードする
with open(f"{target_column}.pkl", "rb") as f:
    tmp = pickle.load(f)
#データ全体(青)と初めの512日分から予測した96日の予測値(オレンジ)のプロット
i = 0
plt.plot(np.asarray(df[timestamp_column], dtype='datetime64[s]'), df[target_column], linestyle="-")
plt.plot(np.asarray(tmp[i][timestamp_column], dtype='datetime64[s]'), tmp[i][target_column], linestyle="-")
plt.grid()

for7.png

#3時間後の予測値を、予測したすべての分プロットするためのデータ準備
i = 2
preds = [
    {"Date": t["Date"][i], target_column: t[target_column][i]}
    for t in tmp
    if t.get("Date") and t.get(target_column)
]
#データ全体(青)と3時間後の予測値(オレンジ)を予測したすべての分プロット
df_preds = pd.DataFrame(preds)
plt.plot(np.asarray(df[timestamp_column], dtype='datetime64[s]'), df[target_column], linestyle="-")
plt.plot(np.asarray(df_preds[timestamp_column], dtype='datetime64[s]'), df_preds[target_column], linestyle="-")
plt.grid()

for8.png

#3時間後の予測結果のデータをcsvファイルにしてプロジェクト内に保存
wslib.save_data(f"ETTh1_2_{target_column}.csv", df_preds.to_csv(index=False).encode(), overwrite=True)

for9.png

  • プロジェクトの資産に予測結果であるETTh1_2_HULL.csv がある
    for10.png
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?