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?

金融データもAI時代!Kronos-baseでビットコインの値動きをシミュレーション

Posted at

はじめに

最近登場した 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()

結果とグラフ
スクリーンショット (187).png
出力を matplotlib で可視化すると…
青線が「過去の実測値」、オレンジ線が「Kronos の予測値」。
結果は「実際のチャートっぽい動きをしながら、次の値動きを延長して描く」感じで、かなり自然。思わず「AIが未来を見ているみたいだ…!」とワクワクしました。

まとめと感想

・Kronos-base は、金融時系列データに特化したユニークなモデル。
・Colab 上で動かすにはライブラリ整備がちょっと大変だが、解決すればすぐに予測できる。
・ゼロショットでも自然なシナリオを出せるのが面白い。

今後は 株式やFX、ボラティリティ予測、シナリオ生成 にも挑戦できそうです。「AIにマーケットを占わせる」体験は、データ好き・投資好きにはたまらない遊び場になりそうです。


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium

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?