システムトレードの為のXGBoost入門

Python
スポンサーリンク
スポンサーリンク

XGBoostとは?

XGBoost(エクストリーム・グラディエント・ブースティング)は、データ分析や機械学習で非常に人気の高いアルゴリズムの一つです。特に、正確で効率的な予測が求められる場面でよく使われます。

XGBoostの特徴:

  • 高い精度:複数の決定木(予測モデル)を組み合わせて予測を行うため、精度が高いです。
    決定木とは、データを条件に基づいて分割しながら進む、ツリー構造のモデルです。分岐を繰り返すことで予測や分類を行います。
  • 速い計算速度:内部で効率的な計算手法を用いており、大量のデータにも対応できます。
  • 柔軟性回帰分析分類問題、さらにはランキング問題にも対応しています。
    回帰分析とは、数値を予測する分析手法です。例えば、明日の株価や気温を予測する際に使われます。
    分類問題とは、データをカテゴリーに分ける問題です。例えば、スパムメールかどうかを判別する場合に使います。
    ランキング問題とは、データを順位付けする問題です。検索エンジンの結果を並べる際に使われます。

システムトレードとXGBoost

システムトレードでは、株価や通貨の変動を予測するために過去のデータを使います。このようなデータは非常に複雑で、パターンを見つけるのが難しいですが、XGBoostはそのような複雑なパターンを学習して予測に活かすことができます。

XGBoostを使った予測の手順

XGBoostを使って予測を行う手順を、具体的に説明します。


1. データを準備する

最初に、予測に使うデータを準備します。例えば、株価のデータがある場合、「今日の株価」と「明日の株価」という形で整理します。

  • 特徴量(入力): 特徴量とは、モデルに与える「データの特徴」を指します。今回の場合、今日の株価が特徴量に該当します。
  • ターゲット(出力): 明日の株価

2. データを訓練用とテスト用に分ける

次に、データを学習に使う部分(訓練データ)と、その学習が正しいかを評価する部分(テストデータ)に分けます。

  • 訓練データ: モデルを学習するために使うデータ訓練データとは、モデルが「データのパターン」を学習するために与えられるデータのことです。
  • テストデータ: モデルの性能を評価するために使うデータテストデータとは、学習したモデルがどれだけ正確に予測できるかを確認するために使用するデータです。

3. モデルを作成して学習させる

XGBoostモデルを設定し、訓練データを使って「予測方法」を学習させます。このステップでは、モデルがデータから規則を見つけ出します。

モデルとは、データのパターンや規則を学習し、新しいデータに対して予測や判断を行うための仕組みやアルゴリズムのことです。XGBoostでは、複数の決定木を組み合わせたモデルが使用されます。

4. テストデータで予測を行う

学習が終わったモデルを使って、テストデータの「入力」から「出力」を予測します。


5. 予測結果を評価する

最後に、実際の値(明日の株価)と予測した値を比べて、どれだけ正確に予測できたかを確認します。

PythonでXGBoostを使ってみる

必要なライブラリのインストール

まずはXGBoostを使うために、Python環境にライブラリをインストールします。

pip install xgboost pandas scikit-learn matplotlib

pipとは?

pipは、Pythonにおけるパッケージ管理ツールです。このツールを使うと、Pythonで必要なライブラリやツールを簡単にインストールしたり、アップデートしたりすることができます。

特徴:

  1. 簡単なコマンド操作
    コマンドラインやターミナルでpip install ライブラリ名と入力するだけでライブラリをインストールできます。
  2. 公式パッケージリポジトリ(PyPI)へのアクセス
    pipはPyPI(Python Package Index)という公式のライブラリ集からパッケージを取得します。PyPIには数十万ものライブラリが登録されています。
  3. 依存関係の管理
    インストールしたいライブラリが他のライブラリを必要とする場合、その依存関係も自動で処理してインストールします。

上記のコマンドを実行すると:

  • xgboost: 機械学習用ライブラリ
  • pandas: データ操作用ライブラリ
  • scikit-learn: 機械学習ツールキット
  • matplotlib: グラフ描画用ライブラリ

これらが自動的にインストールされます。

補足:pipのよく使うコマンド

  • インストール: pip install ライブラリ名
  • アップデート: pip install --upgrade ライブラリ名
  • アンインストール: pip uninstall ライブラリ名
  • インストール済みのライブラリを確認: pip list

サンプルコード:株価データを使った予測モデルの作成

以下は、架空の株価データを使って予測モデルを作るPythonコードです。

# 必要なライブラリをインポート
import pandas as pd  # データ操作用ライブラリ。データを表形式で扱うことができる。
import numpy as np  # 数値計算用ライブラリ。配列や行列の操作、乱数生成などが可能。
from sklearn.model_selection import train_test_split  # データを訓練用とテスト用に分割するためのメソッドを提供。
from xgboost import XGBRegressor  # XGBoostの回帰モデルを使用するためのクラス。
import matplotlib.pyplot as plt  # グラフを描画するためのライブラリ。

# 1. データの作成
# ランダムに生成した株価データ(架空のデータを使用)
np.random.seed(42)  # 乱数シードを固定。これにより結果を再現可能にする。
data = pd.DataFrame({  # DataFrame(表形式のデータ)を作成。
    "day": np.arange(1, 101),  # 1日目から100日目までのデータを生成。np.arangeは連続した数値を作る。
    "price": np.sin(np.arange(1, 101) / 10) * 10 + np.random.normal(0, 1, 100)  
    # 株価の変動を模倣するデータを作成。サイン波を基にランダムなノイズを加える。
})
# 今回の目標は、ある日の株価(特徴量)から次の日の株価(ターゲット)を予測すること。

# 特徴量(入力)とターゲット(出力)の準備
data["next_day_price"] = data["price"].shift(-1)  # 翌日の株価を新しい列として作成。shift(-1)でデータを1行上にずらす。
data = data[:-1]  # 最終行を削除。次の日の値がないため予測のターゲットとして使えない。
X = data[["price"]]  # 今日の株価を特徴量(入力データ)として選択。
y = data["next_day_price"]  # 翌日の株価をターゲット(出力データ)として選択。

# 2. データを訓練用とテスト用に分割
# train_test_splitを使ってデータを訓練用(学習用)とテスト用(評価用)に分割する。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# test_size=0.2: データの20%をテスト用にする。
# random_state=42: 分割の乱数を固定して結果を再現可能にする。

# 3. XGBoostモデルの構築
# XGBoostの回帰モデル(XGBRegressor)を作成する。
model = XGBRegressor(
    n_estimators=100,  # 決定木の数を指定(今回は100本の木を使用)。
    learning_rate=0.1,  # 学習率を指定(モデルが更新される速さを調整)。
    max_depth=3,  # 決定木の深さを指定(深くしすぎると過学習のリスクがある)。
    random_state=42  # モデルの乱数を固定して結果を再現可能にする。
)
# モデルの学習
model.fit(X_train, y_train)  # fitメソッドを使って、訓練データ(X_train, y_train)でモデルを学習させる。

# 4. 予測
# 学習済みモデルを使って、テストデータ(X_test)の入力値から予測を行う。
y_pred = model.predict(X_test)  # predictメソッドを使用して予測値を生成。

# 5. 結果の可視化
# 実際の株価(y_test)と予測した株価(y_pred)を比較するグラフを作成。
plt.figure(figsize=(10, 6))  # グラフのサイズを指定(幅10インチ、高さ6インチ)。
plt.plot(y_test.values, label="Actual Prices (実際の価格)", marker='o')  
# 実際の価格をプロット(oマーク付き)。y_test.valuesでデータを取得。
plt.plot(y_pred, label="Predicted Prices (予測価格)", marker='x')  
# 予測した価格をプロット(xマーク付き)。
plt.legend()  # グラフの凡例を表示。
plt.title("Actual vs Predicted Stock Prices (実際の価格と予測価格)")  
# グラフのタイトルを設定。
plt.xlabel("Index")  # X軸のラベルを設定。
plt.ylabel("Stock Price")  # Y軸のラベルを設定。
plt.show()  # グラフを画面に表示。

サンプルコード解説

以下に示すコードは、Pythonを用いてXGBoostを使い、株価データを予測する流れを示しています。各ステップごとのコードに日本語コメントアウトを追加し、基礎的な文法事項を含めてわかりやすく解説します。

ライブラリのインポート

import pandas as pd  # データ操作用ライブラリ。表形式データを扱う。
import numpy as np  # 数値計算用ライブラリ。配列操作や乱数生成に使用。
from sklearn.model_selection import train_test_split  # データを訓練用とテスト用に分割するためのメソッド。
from xgboost import XGBRegressor  # XGBoostの回帰モデルを作成するクラス。
import matplotlib.pyplot as plt  # グラフ描画用ライブラリ。データの可視化に使用。

解説

  • import pandas as pd: Pandasをpdという名前で使えるようにします。Pandasは、表形式のデータを読み込んだり操作したりするためのライブラリです。
    importは、Pythonで外部ライブラリやモジュール(Pythonファイルやパッケージ)をコード内に取り込むためのキーワードです。
    asは、インポートしたライブラリやモジュールに別名(エイリアス)を付けるキーワードです。
    別名を付けることで、コード内でそのライブラリを短く簡潔に呼び出すことができ、読みやすさや使いやすさが向上します。
    これを使うことで、他のPythonコードやライブラリの機能を自分のプログラム内で利用できるようになります。
  • import numpy as np: NumPyをnpという名前で使えるようにします。numpyは数値計算や配列操作をするためのライブラリです。
  • train_test_split: train_test_splitはデータセットを学習用(訓練用)と評価用(テスト用)に分割するメソッドです。
    sklearn.model_selectionモジュールという、scikit-learnライブラリの中にある「データを分割するためのツール群」が含まれたモジュールからインポートしています。
  • XGBRegressor:XGBRegressorXGBoostの回帰モデルを構築するためのクラスです。
    機械学習アルゴリズムを提供するライブラリであるXGBoostからインポートしています。
  • matplotlib.pyplotは、Matplotlibライブラリ内のグラフ描画機能を提供するサブモジュールです。
    as pltと記述することによって、Matplotlibのpyplotpltという短い名前で使えるようにします。

冒頭の記述で、使えるようにしたPythonのライブラリやモジュールをまとめると以下のようになります。

インポート文インポート元種類用途
import pandas as pdライブラリライブラリ表形式のデータ操作
import numpy as npライブラリライブラリ数値計算・配列操作
from sklearn.model_selection import train_test_splitモジュールメソッドデータ分割
from xgboost import XGBRegressorライブラリクラス回帰モデルの構築
import matplotlib.pyplot as pltサブモジュールサブモジュールグラフ描画

データの作成

np.random.seed(42)  # 乱数のシード値を固定して結果を再現可能にする。
data = pd.DataFrame({  # DataFrame(表形式のデータ構造)を作成。
    "day": np.arange(1, 101),  # 1から100までの連続した数値を生成し、"day"列に格納。
    "price": np.sin(np.arange(1, 101) / 10) * 10 + np.random.normal(0, 1, 100)  
    # サイン波を基に、ランダムなノイズを加えた架空の株価データを"price"列に格納。
})
1. np.random.seed(42)
  • np.random.seedは、乱数を生成する際の「種」を固定するメソッドです。
  • 乱数は本来、毎回異なる値が生成されますが、シード値を設定すると、同じコードを実行するたびに同じ乱数列が生成されます。
  • これにより、結果が再現可能になり、他の人と同じコードを共有したときに同じ結果を得ることができます。

以下に示すコードのそれぞれの部分について、もっと細かくわかりやすく説明します。


1. np.random.seed(42)

役割

  • np.random.seedは、乱数を生成する際の「種」を固定するメソッドです。
  • 乱数は本来、毎回異なる値が生成されますが、シードを設定すると、同じコードを実行するたびに同じ乱数列が生成されます。
  • これにより、結果が再現可能になり、他の人と同じコードを共有したときに同じ結果を得ることができます。

import numpy as np

np.random.seed(42)  # シード値を42に固定
print(np.random.rand(5))  # ランダムな数値を5つ生成

出力

[0.37454012 0.95071431 0.73199394 0.59865848 0.15601864]

シード値を固定しているため、このコードを何回実行しても同じ結果が得られます。


2. pd.DataFrame
  • pd.DataFrameは、表形式のデータ(行と列で構成されるデータ)を作成するためのメソッドです。
  • データを辞書形式({キー: 値})で指定することで、複数の列を持つ表を簡単に作成できます。
  • それぞれの「キー」は列の名前、「値」はその列に含まれるデータです。
3. "day"列
  • "day"列には、1日目から100日目までの日数を連続した整数として格納します。
  • この列を作成するために使っているのが、NumPyのnp.arangeメソッドです。

詳細な説明: np.arange(1, 101)

  • np.arangeは、指定した範囲内で連続する数値を生成するメソッドです。
  • np.arange(1, 101)は、1から100までの整数を生成します(101は含まれません)。
4. "price"列
  • "price"列には、株価を模倣した架空のデータを格納します。
  • このデータは、次の2つの要素を組み合わせて作られています:
    1. サイン波(np.sin
      時間経過に伴う周期的な変動を表現します。
    2. ランダムノイズ(np.random.normal
      実際の株価のように、予測できない変動を追加します。

詳細な説明: np.sin(np.arange(1, 101) / 10) * 10

  • np.sin: 数学の三角関数サイン(sin)」を計算するメソッドです。
    • サイン波は波のような形をした周期的なデータを作ります。
  • np.arange(1, 101) / 10: サイン波の入力値を調整します。これにより波の周期が適切に調整されます。
  • * 10: 波の高さを10倍にしてスケールを大きくします。

詳細な説明: np.random.normal(0, 1, 100)

  • np.random.normal: 正規分布(ガウス分布)に基づくランダム値を生成するメソッドです。
  • (0, 1):
    • 平均(mu)が0、標準偏差(sigma)が1の正規分布に基づいて乱数を生成します。
  • 100: ランダムな値を100個生成します。

最終的な"price"列の生成

  • サイン波(np.sin)にランダムノイズ(np.random.normal)を加えて、実際の株価のような動きを模倣します。

特徴量とターゲットの準備

data["next_day_price"] = data["price"].shift(-1)  # "price"列の値を1行上にずらし、翌日の株価として"next_day_price"列に格納。
data = data[:-1]  # 最後の行を削除(次の日のデータが存在しないため)。
X = data[["price"]]  # 特徴量(入力データ)として"price"列を選択。
y = data["next_day_price"]  # ターゲット(出力データ)として"next_day_price"列を選択。
shift(-1)
  • shift(-1)は、列データ全体を指定された行数分だけ上にずらすメソッドです。
  • このコードでは、data["price"]の値を1行上にずらし、新しい列としてdata["next_day_price"]を作成しています。
  • これにより、「今日の価格(price列)」に対応する「翌日の価格(next_day_price列)」を作り出します。

具体的な動作

元のprice列が以下のようなデータだったとします:

price
100
101
102

shift(-1)を適用すると、データは1行分上に移動します:

price (shifted)
101
102
NaN

一番下の行にはデータがないため、NaN(空の値)が挿入されます。

この記述の目的は、「今日の価格(price列)」から「翌日の価格(next_day_price列)」を予測するためのターゲットデータを作成です。

data[:-1]

  • data[:-1]は、スライス操作を使ってdataから最後の1行を削除します。
    スライスstart:endの形式でデータを切り取る操作で、[:-1]は「最後の1行を除いたすべての行」を意味します。
  • shift(-1)を適用した結果、最後の行には対応する「翌日の価格」が存在しないため、モデルで利用するデータとしては不要です。
  • そのため、この行を削除してデータの整合性を保ちます。

処理の流れ

  • 元のデータ
price  next_day_price
100    101
101    102
102    NaN

data[:-1]を適用↓

price  next_day_price
100    101
101    102

X(特徴量)
  • X = data[["price"]]は、dataからprice列を取り出して特徴量として格納しています。
  • モデルに入力するデータ(特徴量)は、「今日の価格(price)」です。

特徴量とは?

  • 特徴量とは、モデルが学習に使用するデータのことで、「予測に必要な情報」を表します。
  • 今回の場合、「今日の価格」が翌日の価格を予測するために必要な情報と考えられています。

Xの内容

  • Xは以下のようなデータを持つ列です
price
100
101

y(ターゲット)
  • y = data["next_day_price"]は、dataからnext_day_price列を取り出してターゲットとして格納しています。
  • ターゲットとは、モデルが予測しようとするデータのことです。

ターゲットとは?

  • モデルは、特徴量をもとにターゲットを予測するように学習します。
  • 今回の場合、「翌日の価格」がターゲットです。

yの内容

  • yは以下のようなデータを持つ列です
next_day_price
101
102

データの分割

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# データを訓練用(80%)とテスト用(20%)に分割する。
# test_size=0.2: テストデータの割合を20%に設定。
# random_state=42: 分割のランダム性を固定して再現性を確保。
train_test_split

  • train_test_splitは、与えられたデータを「学習用データ訓練用)」と「評価用データ(テスト用)」に分割するためのメソッドです。
  • モデルが学習したデータと評価するデータを分けることで、学習が正しく行われたか、過剰に覚えすぎていないかを確認できます。
    • 学習用データ: モデルがパターンを学習するために使用。
    • 評価用データ: モデルが未知のデータに対してどの程度正確に予測できるかをテストするために使用。

test_size=0.2
  • test_size=0.2は、データ全体の20%をテスト用データに割り当てる設定です。
  • 残りの80%は学習用データとして使用します。
  • テスト用データは少なすぎても多すぎてもいけません。一般的には20〜30%が適切です。
  • テスト用データが少ない場合、モデルの性能を十分に評価できなくなるリスクがあります。
  • テスト用データが多すぎる場合、学習用データが不足してモデルが十分に学習できない可能性があります。

random_state=42
  • random_state=42は、データ分割のランダム性を固定するための設定です。
  • データの分割には乱数が使われるため、通常、同じコードを実行しても異なる分割が生成されます。
  • random_stateを指定すると、分割の順序が固定され、毎回同じ結果が得られるようになります。

X_train と y_train


X_test と y_test
  • X_test: テスト用データの特徴量(入力データ)です。
  • y_test: テスト用データのターゲット(出力データ)です。
  • モデルの性能を評価するために使用されます。

X_testには「今日の株価」データの20%が含まれます。

y_testには、それに対応する「翌日の株価」データの20%が含まれます。


モデルの構築と学習

model = XGBRegressor(
    n_estimators=100,  # 決定木の数を100本に設定。
    learning_rate=0.1,  # 学習率を0.1に設定(モデルの更新の速さを調整)。
    max_depth=3,  # 決定木の深さを3に設定(深すぎると過学習のリスクがある)。
    random_state=42  # ランダム性を固定して結果を再現可能にする。
)
model.fit(X_train, y_train)  # 訓練データ(X_train, y_train)を使ってモデルを学習。
XGBRegressor

XGBRegressorは、XGBoostライブラリを使用して回帰モデルを構築するためのクラスです。このクラスを利用することで、与えられたデータに基づいて予測を行うモデルを簡単に作成できます。回帰モデルとは、連続的な数値を予測するためのモデルの一種で、今回の例では「翌日の株価」を予測するために使用されています。

n_estimators=100

n_estimators=100は、使用する決定木の数を指定しています。

決定木とは、データを分割しながら予測を進めるアルゴリズムの一つで、XGBoostでは複数の決定木を組み合わせて精度を高めています。

この場合、100本の決定木を使って予測モデルを構築する設定です。木の数を増やすと、モデルがより多くのデータパターンを学習できるようになりますが、計算量が増えるため、適切な値を選ぶ必要があります。

learning_rate=0.1

learning_rate=0.1は、学習率を調整するパラメータです。

学習率とは、モデルが新しいデータから学習する速度を指します。この値を大きくするとモデルの学習が早く進みますが、不安定になる可能性があります。

一方、値を小さくすると学習は安定しますが、完了するまでに時間がかかります。0.1は一般的に標準的な値として使われています。

max_depth=3

max_depth=3は、各決定木の深さを指定します。深さとは、決定木がデータをどれだけ細かく分割するかを表します。深い木ほど複雑なパターンを学習できますが、過剰に適合(過学習)してしまうリスクがあります。この設定では深さを3に制限し、モデルが必要以上に複雑にならないようにしています。

random_state=42

random_state=42は、ランダム性を固定するための設定です。XGBoostは内部で乱数を使用してデータを分割したり、モデルを構築したりしますが、この設定を指定すると乱数の結果が固定され、同じコードを何度実行しても同じ結果が得られます。これは、結果を再現可能にするために非常に重要です。

model.fit(X_train, y_train)

最後に、fitメソッドを使ってモデルを学習させます。ここでは、訓練用データであるX_train特徴量)とy_train(ターゲット)を渡します。fitメソッドを実行すると、XGBoostのアルゴリズムが訓練データを基に予測に必要なルールやパターンを学習します。これにより、モデルがデータの規則性を理解し、未知のデータに対して適切な予測を行えるようになります。

予測

y_pred = model.predict(X_test)  # 学習済みモデルを使い、テストデータ(X_test)で予測を行う。
predictメソッド

predictメソッドは、既に学習が完了したモデルを使用して、未知のデータに対して予測を行うためのメソッドです。モデルは、訓練データを使ってパターンやルールを学習していますが、このメソッドを使うことで、訓練に使っていない新しいデータ(ここではテストデータ)に基づいて出力値を予測できます。

X_test

X_testは、テスト用データの特徴量(入力データ)を格納しています。特徴量とは、モデルが予測を行うために必要な情報を指します。ここでは「今日の株価」のデータが含まれています。テスト用データとして分けられた理由は、このデータが学習中にモデルに渡されておらず、モデルの性能を公平に評価するためです。

y_pred

y_predは、テストデータに基づいてモデルが予測した結果を格納する変数です。具体的には、X_testに含まれる入力データをpredictメソッドに渡すことで、モデルが「この入力データに対する出力はこうなるだろう」と計算して予測した値がy_predに保存されます。たとえば、「今日の株価(X_test)」に対して「翌日の株価(y_pred)」を出力する形です。

この一連の流れにより、モデルが実際のデータをどの程度正確に予測できるかを確認することができます。predictメソッドを用いることで、テストデータが未知のデータである場合でも、そのデータに対してモデルが予測を行い、その性能を測定できる仕組みが成り立っています。

結果の可視化

plt.figure(figsize=(10, 6))  # グラフの描画領域を設定(幅10インチ、高さ6インチ)。
plt.plot(y_test.values, label="Actual Prices (実際の価格)", marker='o')  
# 実際の株価(y_test)をプロット(oマーカー付き)。
plt.plot(y_pred, label="Predicted Prices (予測価格)", marker='x')  
# 予測された株価(y_pred)をプロット(xマーカー付き)。
plt.legend()  # 凡例を表示。
plt.title("Actual vs Predicted Stock Prices (実際の価格と予測価格)")  
# グラフタイトルを設定。
plt.xlabel("Index")  # X軸のラベルを設定。
plt.ylabel("Stock Price")  # Y軸のラベルを設定。
plt.show()  # グラフを画面に表示。
plt.figure

plt.figureは、グラフ全体の描画領域を指定するメソッドです。これにより、グラフのサイズやレイアウトを調整できます。例えば、figsize=(10, 6)のように指定すると、横10インチ、縦6インチのサイズでグラフを描画します。この設定を行うことで、グラフが見やすくなり、データの傾向をより明確に表示できます。

plt.plot

plt.plotは、指定したデータを線やマーカーでグラフにプロットするメソッドです。例えば、実際の株価(y_test.values)と予測された株価(y_pred)をそれぞれ異なる線やマーカーで描画し、それらを比較することができます。線の種類やマーカーをオプションで指定できるため、視覚的に分かりやすいグラフを作成できます。

y_test.values

y_test.valuesは、テストデータにおける「実際の株価」を表します。この値はモデルの予測と比較するために使用され、正確なデータとしてプロットされます。

y_pred

y_predは、モデルが予測した「予測された株価」です。この値をプロットすることで、モデルがどれだけ正確に実際の値を予測できたかを視覚的に確認することができます。

plt.legend

plt.legendは、グラフ内で線やマーカーが何を表しているのかを説明する凡例を表示するメソッドです。例えば、「実際の株価」と「予測された株価」というラベルを設定することで、データの区別が簡単になります。

plt.titl

plt.titleは、グラフ全体のタイトルを設定するメソッドです。タイトルを付けることで、グラフが何を示しているのかを一目で理解できるようになります。

plt.xlabelとplt.ylabel

plt.xlabelplt.ylabelは、それぞれX軸とY軸のラベルを設定するメソッドです。軸ラベルを設定することで、データの単位や内容を明確に伝えることができます。例えば、X軸には「データのインデックス」、Y軸には「株価」を設定します。

plt.show

plt.showは、描画したグラフを画面に表示するメソッドです。このメソッドを呼び出さないと、作成されたグラフが表示されないため、必ず実行する必要があります。

これらのメソッドを組み合わせることで、実際の値と予測値を比較するわかりやすいグラフを作成し、視覚的にモデルの精度を確認できるようになります。

まとめ

この記事では、XGBoostを活用してシステムトレードの予測モデルを構築する手順を詳しく解説しました。株価データを例に、データの準備からモデルの学習、予測、結果の可視化までのプロセスを順を追って説明しています。以下に主要なポイントを振り返ります。

  1. データ準備と特徴量の作成
    データの中から「今日の価格」を特徴量として選び、「翌日の価格」をターゲットとして設定する方法を学びました。この際にshift(-1)data[:-1]を活用し、モデルが学習しやすい形式にデータを整形しました。
  2. 学習用データと評価用データの分割
    train_test_splitを用いてデータを学習用と評価用に分けることで、モデルの性能を公正に評価できる環境を整えました。この段階で、テストデータの重要性や分割の再現性を保つための設定についても触れました。
  3. XGBoostの回帰モデル構築
    XGBRegressorを使って回帰モデルを構築しました。決定木の数(n_estimators)、学習率(learning_rate)、木の深さ(max_depth)などのパラメータ設定を通じて、モデルが効率よくデータを学習できるように調整しました。
  4. モデルの予測と評価
    学習済みモデルを用いて未知のデータに対する予測を行い、結果を確認しました。predictメソッドを使って予測値を取得し、それを実際の値と比較することで、モデルの精度を評価する流れを実践しました。
  5. 結果の可視化
    Matplotlibを使用して、実際の値と予測値をグラフとして可視化しました。これにより、モデルがどの程度正確に予測しているかを直感的に理解できるようにしました。

XGBoostは非常に強力なアルゴリズムで、パラメータの微調整や特徴量の選定次第でさらに精度を高めることが可能です。また、他のデータセットや問題にも応用できる柔軟性があります。今回の例で学んだ基本的な流れを応用し、複雑な予測や他の回帰問題にも挑戦してみてください。

タイトルとURLをコピーしました