はじめに
最近登場した Kronos-baseは、金融市場の「ローソク足データ」を言語のように扱う初のオープンソース基盤モデルです。
せっかくなので、Google Colab を使って ビットコイン(BTC-USD)の5分足データを学習済みモデルで未来予測してみました。
※投資助言ではありません。技術デモとしてお楽しみください。
手順
1 ランタイム準備
# 任意:GPU確認
!nvidia-smi
2 依存関係のインストール(衝突を回避)
%pip install -U "transformers>=4.42,<5" "accelerate>=0.33,<1" "huggingface_hub>=0.24" \
pandas==2.2.2 numpy==1.26.4 matplotlib yfinance \
--upgrade-strategy only-if-needed --no-cache-dir
# 依存関係チェック(エラーが出なければOK)
%pip check
3 Kronos のコード取得とモデル読み込み
# Kronos ユーティリティの取得
!git clone -q https://github.com/shiyu-coder/Kronos.git
import sys; sys.path.append("/content/Kronos")
from model import Kronos, KronosTokenizer, KronosPredictor
import torch
TOK = "NeoQuasar/Kronos-Tokenizer-base"
MODEL = "NeoQuasar/Kronos-base" # VRAM が厳しければ "NeoQuasar/Kronos-small" に変更
tokenizer = KronosTokenizer.from_pretrained(TOK)
model = Kronos.from_pretrained(MODEL)
device = "cuda" if torch.cuda.is_available() else "cpu"
predictor = KronosPredictor(model, tokenizer, device=device, max_context=512)
device
4 データ取得と前処理(BTC-USD 5分足)
import pandas as pd, numpy as np, yfinance as yf
# 直近3日分の5分足
df = yf.download("BTC-USD", period="3d", interval="5m", progress=False)
# Kronos が期待する列名に整形
df = df.rename(columns={"Open":"open","High":"high","Low":"low","Close":"close","Volume":"volume"})
df = df[["open","high","low","close","volume"]].dropna().reset_index()
# タイムスタンプ列を統一
if "Datetime" in df.columns:
df = df.rename(columns={"Datetime":"timestamps"})
df["timestamps"] = pd.to_datetime(df["timestamps"])
# amount が無いので 0 を入れておく(NaN は不可)
df["amount"] = 0.0
df.head()
5 予測区間の指定(lookback ≤ 512)
# 入力長と予測長
lookback = min(400, len(df)-120) # 512未満に収めるのが安全
pred_len = 60 # 先の60本を予測
x_df = df.loc[:lookback-1, ["open","high","low","close","volume","amount"]].fillna(0)
x_timestamp = df.loc[:lookback-1, "timestamps"]
y_timestamp = df.loc[lookback:lookback+pred_len-1, "timestamps"]
len(x_df), len(x_timestamp), len(y_timestamp)
6 予測の実行
pred_df = predictor.predict(
df=x_df,
x_timestamp=x_timestamp,
y_timestamp=y_timestamp,
pred_len=pred_len,
T=1.0, # 温度(揺らぎ)
top_p=0.9, # nucleus sampling
sample_count=1
)
pred_df.head()
可視化(終値 Close を重ね描き)
import matplotlib.pyplot as plt
hist_close = x_df["close"].to_numpy()
fut_close = pred_df["close"].to_numpy()
plt.figure(figsize=(10,4))
plt.plot(range(len(hist_close)), hist_close, label="history (close)")
plt.plot(range(len(hist_close), len(hist_close)+len(fut_close)), fut_close, label="forecast (close)")
plt.legend(); plt.title("Kronos forecast (BTC-USD, 5m)")
plt.xlabel("steps"); plt.ylabel("price"); plt.show()
結果とグラフ
出力を matplotlib で可視化すると…
青線が「過去の実測値」、オレンジ線が「Kronos の予測値」。
結果は「実際のチャートっぽい動きをしながら、次の値動きを延長して描く」感じで、かなり自然。思わず「AIが未来を見ているみたいだ…!」とワクワクしました。
まとめと感想
・Kronos-base は、金融時系列データに特化したユニークなモデル。
・Colab 上で動かすにはライブラリ整備がちょっと大変だが、解決すればすぐに予測できる。
・ゼロショットでも自然なシナリオを出せるのが面白い。
今後は 株式やFX、ボラティリティ予測、シナリオ生成 にも挑戦できそうです。「AIにマーケットを占わせる」体験は、データ好き・投資好きにはたまらない遊び場になりそうです。
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com
Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。