0
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?

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

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

事前準備

事前準備では、

  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 とパスワードを入力してログインする
    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_idproject_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")
#存在するファイルを確認
!ls
#ライブラリのインポート
import pandas as pd
import matplotlib.pyplot as plt

#「df」にcsvファイルを格納
df = pd.read_csv("ETTh1.csv")
#表示して格納できているか確認
df
#HULLのプロットを可視化
plt.plot(df["Date"], df["HULL"], linestyle="-")
plt.grid()
#HULLのヒストグラムを可視化
plt.hist(df["HULL"])
plt.grid()
#線形補間後のデータをcsvファイルにしてプロジェクト内に保存
wslib.save_data("ETTh1_1.csv", df.to_csv(index=False).encode(), overwrite=True)
  • 基本的に自動保存だが、念のために左上の上書き保存マークを押して保存

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

予測

ノートブックの作成

  1. 新規資産 をクリック

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

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

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

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

  6. preprocessing.pyと同様、自動的にproject_idproject_access_token が入力される

実行

#プロジェクトに保存したcsvファイルをノートブックにダウンロード
wslib.download_file("GE_RMS_1.csv")
#存在するファイルを確認
!ls
#ライブラリのインポート
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
#「df」にcsvファイルを格納
df = pd.read_csv(filepath_or_buffer="GE_RMS_1.csv")
#使用しないので「No」のcolumnsを除外
df.drop(columns=["No"], inplace=True)
#表示して格納、除外できているか確認
df
#定義
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}")

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