【株価予測ツール001の概要と目的】
このコードは、株価データと経済指標(失業率)を用いて、翌日の株価が上昇するか下落するかを予測するシンプルなツールです。以下のような目的で作成されています:
- 株価予測の学習: 機械学習(ランダムフォレスト)を利用して株価の動きを予測する仕組みを体験。
- 経済データとの連携: 株価データに加え、失業率などの経済指標がどのように影響を与えるかを分析。
- 投資初心者向け: 株価予測の基礎を学びたい方やPythonに興味がある方が簡単に試せる内容。
このコードを使えば、Python初心者でも株価予測の基本的な流れを理解でき、さらに投資判断に役立つヒントを得ることができます。必要なPythonライブラリをインストールして実行するだけで、簡単に予測結果やグラフを表示できるようになっています。
実行するために必要な環境
このプログラムを動作させるには、以下が必要です:
- Python 3.x の環境
- 必要なライブラリのインストール(
yfinance
,pandas
,pandas-datareader
,scikit-learn
,matplotlib
)
ライブラリのインストールは、以下のコマンドを実行してください:
pip install yfinance pandas pandas-datareader scikit-learn matplotlib
それでは、以下のコードをコピーして実際に試してみてください!
【pythonプログラムコード #001#】
import yfinance as yf
import pandas_datareader as pdr
import pandas as pd
from datetime import datetime
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
日本語フォント設定(必要に応じて変更)
日本語表示をサポートするために、フォントを「Meiryo」に変更します。
plt.rcParams[‘font.family’] = ‘Meiryo’
現在の日付を取得
この日付を使って株価データの取得期間を指定します。
today = datetime.today().strftime(‘%Y-%m-%d’)
株価データの取得
ユーザーに調べたい銘柄コード(ティッカーシンボル)を入力してもらいます。
ticker = input(“銘柄コード(ティッカーシンボル)を入力してください: “)
print(f”\n=== {ticker}の株価データを取得中 ===”)
stock_data = yf.download(ticker, start=”2022-01-01″, end=today)
データが空の場合、プログラムを終了します。
if stock_data.empty:
print(“データが見つかりませんでした。終了します。”)
exit()
マルチインデックスを解除
データフレームの列名が階層化されている場合を解除します。
stock_data.columns = stock_data.columns.get_level_values(0)
経済指標データの取得
失業率データ(Unemployment Rate)を取得します。これは株価予測に役立つ可能性があります。
print(“\n=== 経済指標データを取得中 ===”)
economic_data = pdr.get_data_fred(“UNRATE”, start=”2022-01-01″, end=today)
economic_data.rename(columns={“UNRATE”: “UnemploymentRate”}, inplace=True)
経済データの補間
経済データの日付を株価データに合わせるため、欠損値を埋めます。
economic_data.index.name = “Date” # 統一のためインデックス名を「Date」に変更
economic_data = economic_data.reindex(stock_data.index, method=”ffill”)
データ統合
株価データと経済指標データを1つのデータセットに結合します。
print(“\n=== データを統合中 ===”)
merged_data = pd.concat([stock_data, economic_data], axis=1)
移動平均線の計算
短期(5日)と長期(20日)の移動平均線を計算します。
merged_data[‘SMA_5’] = merged_data[‘Close’].rolling(window=5).mean()
merged_data[‘SMA_20’] = merged_data[‘Close’].rolling(window=20).mean()
翌日の株価が上昇するか下落するかのターゲット変数を作成
merged_data[‘Target’] = (merged_data[‘Close’].shift(-1) > merged_data[‘Close’]).astype(int)
欠損値を含む行を削除します。
merged_data.dropna(inplace=True)
特徴量とターゲット変数を分割
特徴量:株価や失業率、移動平均線など
ターゲット:株価が翌日に上昇するか下落するか(1または0)
features = merged_data[[‘Close’, ‘High’, ‘Low’, ‘Open’, ‘UnemploymentRate’, ‘SMA_5’, ‘SMA_20’]]
target = merged_data[‘Target’]
データ分割
データを訓練用(80%)とテスト用(20%)に分割します。
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)
モデル構築
ランダムフォレストモデルを使用して学習を行います。
print(“\n=== モデルを構築中 ===”)
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
予測と精度の計算
テストデータで予測を行い、モデルの精度を評価します。
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f”\n=== 予測結果 ===\nモデルの精度: {accuracy:.2f}”)
翌日の株価予測
最新のデータを使って翌日の株価が上昇するか下落するかを予測します。
latest_features = features.iloc[[-1]] # 最終行の特徴量を取得
prediction = model.predict(latest_features)
prediction_proba = model.predict_proba(latest_features)
print(f”翌日の株価予測: {‘上昇’ if prediction[0] == 1 else ‘下落’} (確率: {prediction_proba[0][1]:.2f})”)
株価推移と予測結果のグラフ表示
plt.figure(figsize=(10, 6))
plt.plot(merged_data.index, merged_data[‘Close’], label=”終値”, color=”blue”)
plt.title(f”{ticker} 株価推移と予測結果”)
plt.xlabel(“日付”)
plt.ylabel(“株価”)
plt.legend()
plt.grid()
plt.show()
データ保存
統合データをCSV形式で保存します。
merged_data.to_csv(f”{ticker}_merged_data.csv”, encoding=”utf-8-sig”)
print(f”\n統合データを {ticker}_merged_data.csv に保存しました。”)
【実行結果】
C:\Users\user\Desktop\python>4.py
銘柄コード(ティッカーシンボル)を入力してください: tsla
=== tslaの株価データを取得中 ===
[100%**] 1 of 1 completed
=== 経済指標データを取得中 ===
=== データを統合中 ===
=== モデルを構築中 ===
=== 予測結果 ===
モデルの精度: 0.48
翌日の株価予測: 下落 (確率: 0.02)
統合データを tsla_merged_data.csv に保存しました。
【結果グラフ】

コメント