【完全ガイド】XGBoostを用いた特徴量重要度の算出と株価予測の実装
本記事では、PythonのライブラリであるXGBoostを活用し、株価予測のための特徴量重要度の算出手法を解説します。これにより、データサイエンスを活用した投資戦略の構築に役立てることができます。
1. 株価データの収集
最初のステップとして、株価データを収集します。ここでは、yfinanceライブラリを使用して、特定の企業の過去の株価を取得します。以下のコードでApple社の株価データをダウンロードします。
import yfinance as yf
# 株式データの取得
ticker = 'AAPL' # 例としてApple社の株
data = yf.download(ticker, start="2015-01-01", end="2023-01-01", progress=False)
# データの表示
print(data.head())
2. データの前処理
収集した株価データについて、前処理を行います。オープン、クローズ、ハイ、ローの情報を基に、新たな特徴量を生成します。ここでは移動平均とボラティリティを計算します。
import pandas as pd
# 簡単な移動平均の計算
data['MA_10'] = data['Close'].rolling(window=10).mean()
data['MA_30'] = data['Close'].rolling(window=30).mean()
# ボラティリティの計算
data['Volatility'] = data['Close'].pct_change().rolling(window=10).std()
# NaNを含む行を削除
data.dropna(inplace=True)
3. 特徴量の選択と重要度計算
次に、XGBoostを用いて特徴量の重要度を計算します。XGBoostは自動的に特徴量の重要度を算出する機能を持ち、モデルの解釈性を高めます。
import xgboost as xgb
from sklearn.model_selection import train_test_split
# 予測変数と目的変数の設定
X = data[['MA_10', 'MA_30', 'Volatility']]
y = (data['Close'].shift(-1) > data['Close']).astype(int) # 次の日の株価が上昇するかどうか
# 学習データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# XGBoost モデルの訓練
model = xgb.XGBClassifier(eval_metric="logloss")
model.fit(X_train, y_train)
# 特徴量の重要度を表示
importances = model.feature_importances_
print("Feature Importances:", importances)
4. 特徴量重要度の可視化
計算した特徴量の重要度を可視化します。これにより、どの特徴が株価予測に最も寄与しているかを直感的に理解できます。
import matplotlib.pyplot as plt
# 特徴量の名前
features = X.columns
# 重要度の可視化
plt.barh(features, importances)
plt.xlabel('Importance')
plt.ylabel('Features')
plt.title('Feature Importance for Stock Price Prediction')
plt.show()
5. 株価予測の実行
特徴量の重要度を確認した後、XGBoostモデルを使用して実際の株価予測を行います。予測結果を基に、モデルの精度を評価します。
from sklearn.metrics import accuracy_score
# テストデータでの予測
y_pred = model.predict(X_test)
# 精度を計算
accuracy = accuracy_score(y_test, y_pred)
print("Model Accuracy:", accuracy)
6. 予測結果の表示と解釈
最後に、実際に予測した株価の上昇について解釈します。XGBoostの結果を踏まえ、投資戦略を考えることが重要です。
predictions = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})
print(predictions.head())
7. 今後の展望
今回の手法を通じて、XGBoostを用いた特徴量重要度の算出と株価予測の流れを理解していただけたかと思います。今後は、より多くのデータを活用したアプローチや、他の機械学習アルゴリズムとの組み合わせ、さらにはニュースやソーシャルメディアデータとの統合を検討することで、さらなる精度向上が期待されます。
8. まとめ
本記事では、XGBoostを用いた株価予測手法の概要を解説しました。データの前処理から特徴量の生成、モデルの学習、予測結果の評価まで、一連の流れを実際にコードを通じて理解していただけたと思います。この手法が今後のトレーディングに役立つことを願っています。
【お知らせ】
システム全体のインフラ構成や、より詳細な統計検証データについては、プロフィール欄に記載のリンク先(技術メディア)にて随時公開しています。