株価予測AI 研究開発ツール – インストール & 使用マニュアル
重要な法的免責事項
【必読】本ツールをご使用になる前に必ずお読みください
免責事項・利用規約
本ツールは、教育および研究開発目的のみに提供される実験的なソフトウェアです。以下の条件を理解し同意の上でご使用ください:
- 開発段階のソフトウェア: 本スクリプトは調整前の初期開発段階にあり、実用化には大幅な改修が必要です
- 投資助言の否定: 本ツールの出力は投資助言、投資勧誘、または金融商品の推奨を構成するものではありません
- 完全免責: 本ツールの使用により生じた一切の損害、損失について開発者は責任を負いません
- リスクの承認: 株式投資には元本割れリスクが伴います。投資判断は利用者の自己責任において行ってください
- 精度の限界: 機械学習モデルによる予測は確実性を保証するものではありません
- 法的準拠: 利用者の居住地域の金融商品取引法等に準拠した使用をお願いします
学術・教育利用の推奨用途
- 機械学習アルゴリズムの学習
- データサイエンス手法の研究
- プログラミング技術の習得
- 金融データ分析の理解
技術的概要
このツールは、Yahoo Financeから株価データを自動取得し、OHLCチャート画像を生成してCNN(畳み込みニューラルネットワーク)で翌日の株価上昇/下落パターンを分析する実験的AIシステムです。
研究開発機能
- Yahoo Finance APIを利用した公開データ取得
- テクニカル指標の自動計算(移動平均、RSI、MACD、ボリンジャーバンドなど)
- 画像認識技術を応用したチャートパターン分析
- EfficientNetアーキテクチャによる深層学習実装
- GPU/CPU環境対応とメモリ使用量最適化
1. インストール手順
1.1 必要なソフトウェア
- Python 3.8以上
- CUDA対応GPU(推奨、CPUでも動作可能)
1.2 依存パッケージのインストール
# 基本的なライブラリ
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
pip install numpy pandas matplotlib seaborn
pip install scikit-learn
pip install yfinance
pip install Pillow
# テクニカル指標ライブラリ(推奨)
pip install ta
# または requirements.txt を作成して一括インストール
pip install -r requirements.txt
1.3 requirements.txt の内容例
torch>=2.0.0
torchvision>=0.15.0
numpy>=1.21.0
pandas>=1.3.0
matplotlib>=3.5.0
seaborn>=0.11.0
scikit-learn>=1.0.0
yfinance>=0.2.0
Pillow>=9.0.0
ta>=0.10.0
1.4 ファイル配置
project_folder/
├── stock_predictor.py # メインスクリプト
├── requirements.txt # 依存パッケージリスト
└── README.md # このマニュアル
2. 基本的な使用方法
2.1 データダウンロードとチャート生成のみ
python stock_predictor.py --symbol 7203.T --save-images
2.2 学習付きの完全実行
python stock_predictor.py --symbol 7203.T --train --epochs 30 --batch-size 16
2.3 GPU使用時の推奨設定
python stock_predictor.py --symbol 7203.T --train --batch-size 32 --model-size b0 --auto-batch-size
2.4 CPU強制使用(GPU不具合時)
python stock_predictor.py --symbol 7203.T --train --force-cpu --batch-size 8
3. コマンドラインオプション詳細
3.1 基本設定
オプション | デフォルト | 説明 |
---|---|---|
--symbol | 7203.T | 銘柄コード(例:7203.T=トヨタ、AAPL=Apple) |
--period | 5y | データ期間(1y, 2y, 5y, max) |
--output-dir | ./stock_output | 出力ディレクトリ |
3.2 チャート設定
オプション | デフォルト | 説明 |
---|---|---|
--window | 60 | チャートの日数(60日分のローソク足) |
--horizon | 1 | 予測期間(1=翌日予測) |
--threshold | 0.01 | 上昇判定閾値(1%以上の上昇を「上昇」とする) |
--img-size | 224 | 画像サイズ(224×224ピクセル) |
3.3 学習設定
オプション | デフォルト | 説明 |
---|---|---|
--train | False | 学習実行フラグ |
--epochs | 50 | 学習エポック数 |
--batch-size | 32 | バッチサイズ |
--lr | 1e-4 | 学習率 |
--model-size | b0 | モデルサイズ(b0=軽量、b4=高性能) |
3.4 高度な設定
オプション | 説明 |
---|---|
--auto-batch-size | GPU容量に応じた最適バッチサイズ自動検出 |
--use-preprocessed | 前処理済みテンソル使用(高速化) |
--regenerate-tensors | テンソルの強制再生成 |
--save-images | サンプル画像の保存 |
--image-samples 50 | 保存する画像数 |
--force-cpu | CPU強制使用 |
4. 出力ファイルの説明
4.1 ディレクトリ構造
stock_output/
├── stock_model_7203_T_b0.pth # 学習済みモデル
├── training_history.csv # 学習履歴
└── tensors/ # 前処理済みデータ
├── train_tensors.pt
└── val_tensors.pt
work/ # サンプル画像(--save-images使用時)
├── up_samples/ # 上昇パターンのチャート
│ ├── chart_up_001_idx_120.png
│ └── ...
└── down_samples/ # 下落パターンのチャート
├── chart_down_001_idx_45.png
└── ...
4.2 学習済みモデル(.pthファイル)
- PyTorchの学習済みモデル
- 後で予測に使用可能
- 銘柄名とモデルサイズが名前に含まれる
4.3 学習履歴(training_history.csv)
epoch,train_loss,val_loss,train_acc,val_acc
1,0.6931,0.6825,0.5123,0.5234
2,0.6543,0.6234,0.5456,0.5678
...
5. 出力メッセージの解説
5.1 データ取得段階
INFO:__main__:Downloaded 1260 days of data for 7203.T
INFO:__main__:Technical indicators calculated using ta library
- データ取得成功とテクニカル指標計算完了
5.2 チャート生成段階
INFO:__main__:Generating chart images (optimized)...
INFO:__main__:Will generate 1200 chart images
INFO:__main__:Using 4 worker processes for chart generation
INFO:__main__:Successfully generated 1200 chart images
INFO:__main__:Label distribution: {0: 589, 1: 611}
- チャート画像生成の進行状況
- ラベル分布(0=下落、1=上昇)
5.3 学習段階
INFO:__main__:Using GPU: NVIDIA GeForce RTX 3080
INFO:__main__:Train samples: 960, Validation samples: 240
INFO:__main__:Using preprocessed tensor datasets for faster training
5.4 エポック毎の進行状況
Epoch 15/50 (12.3s) - Train Loss: 0.5234, Train Acc: 0.7456 - Val Loss: 0.5678, Val Acc: 0.7123
GPU Memory: 2.1GB used, 2.8GB reserved
5.5 最終結果
INFO:__main__:Final validation metrics:
INFO:__main__:Accuracy: 0.7172 # 全体精度(71.72%)
INFO:__main__:Precision: 0.5945 # 適合率
INFO:__main__:Recall: 0.7172 # 再現率
INFO:__main__:F1 Score: 0.6331 # F1スコア
INFO:__main__:AUC: 0.5108 # ROC-AUC値
INFO:__main__:Confusion Matrix:
[[103 5] # 真の下落103件、誤判定5件
[ 36 1]] # 誤判定36件、真の上昇1件
6. トラブルシューティング
6.1 GPU メモリ不足エラー
RuntimeError: CUDA out of memory
対処法:
# バッチサイズを減らす
python stock_predictor.py --symbol 7203.T --train --batch-size 8
# 軽量モデルを使用
python stock_predictor.py --symbol 7203.T --train --model-size b0
# CPU使用に切り替え
python stock_predictor.py --symbol 7203.T --train --force-cpu
6.2 データ取得エラー
ValueError: No data found for symbol XXXX
対処法:
- 銘柄コードの確認(7203.T、AAPL、MSFT等)
- インターネット接続の確認
- Yahoo Financeでの銘柄存在確認
6.3 メモリ不足(一般的)
MemoryError
対処法:
# データ期間を短縮
python stock_predictor.py --symbol 7203.T --period 2y
# ウィンドウサイズ縮小
python stock_predictor.py --symbol 7203.T --window 30
# 画像サイズ縮小
python stock_predictor.py --symbol 7203.T --img-size 128
6.4 学習結果の解釈における注意
チェックポイント(研究開発観点):
- データ量が統計的に有意か(最低100サンプル以上推奨)
- ラベル分布の偏りが結果に与える影響
- 学習率等のハイパーパラメータの妥当性
- 注意: 良好な学習結果が得られても実際の予測精度を保証しません
7. 応用的な使用例
7.1 学術研究における複数銘柄分析例
# 日本株(研究用データセット構築)
python stock_predictor.py --symbol 7203.T --train # トヨタ(自動車業界)
python stock_predictor.py --symbol 6758.T --train # ソニー(電子機器業界)
python stock_predictor.py --symbol 9984.T --train # ソフトバンク(通信業界)
# 米国株(国際比較研究用)
python stock_predictor.py --symbol AAPL --train # Apple(技術株)
python stock_predictor.py --symbol MSFT --train # Microsoft(技術株)
python stock_predictor.py --symbol GOOGL --train # Google(技術株)
注意: これらは研究目的の実験例であり、投資推奨ではありません
7.2 短期取引用設定
# より短期の予測(閾値0.5%)
python stock_predictor.py --symbol 7203.T --train --threshold 0.005 --window 30
7.3 高精度モード(GPU必須)
# 大きなモデルで長期学習
python stock_predictor.py --symbol 7203.T --train --model-size b4 --epochs 100 --batch-size 16
8. 結果の解釈方法
8.1 精度指標の見方
- Accuracy (0.7172): 全予測の71.72%が正解
- Precision (0.5945): 上昇予測の59.45%が実際に上昇
- Recall (0.7172): 実際の上昇の71.72%を正しく予測
- AUC (0.5108): 0.5に近いのでランダム予測に近い(要改善)
8.2 混同行列の見方
[[103 5] ← 下落の予測結果
[ 36 1]] ← 上昇の予測結果
- 左上(103): 下落を正しく予測
- 右上(5): 下落を上昇と誤予測
- 左下(36): 上昇を下落と誤予測
- 右下(1): 上昇を正しく予測
8.3 実験的な性能評価基準
※ 以下は研究開発における参考値であり、実用性を保証するものではありません
- Accuracy > 0.6: 研究段階での基礎的な学習成果
- AUC > 0.6: 統計的に有意な可能性のある相関検出
- F1 Score > 0.6: クラス分類における基本的なバランス
重要: これらの数値は学術研究における相対的な評価指標であり、実際の投資における有効性を示すものではありません。
9. カスタマイズのヒント
9.1 新しいテクニカル指標の追加
add_technical_indicators
メソッドを編集して独自指標を追加可能
9.2 チャートのカスタマイズ
ChartRenderer
クラスで色合いやレイアウトを変更可能
9.3 予測期間の調整
--horizon 3
で3日後の予測に変更可能
10. 重要な制約事項と技術的限界
10.1 研究開発段階の制約
- 本ツールは実験的な研究開発段階にあります
- 商用利用や実際の投資判断には適していません
- アルゴリズムの改良・検証が継続的に必要です
- 予測精度の向上には専門的な調整が必要です
10.2 技術的限界の認識
- 過去データによる学習のため、将来の市場変動を保証しません
- ブラックスワンイベント等の予期せぬ市場変動は予測困難です
- 機械学習モデルには本質的に誤差が含まれます
- 統計的手法の限界により完全な予測は不可能です
10.3 データ依存性について
- Yahoo Finance公開データの品質・可用性に依存
- 株式分割・配当等の調整処理は実装されていません
- リアルタイムデータではなく遅延が含まれます
- データ欠損時の補完処理は基本的な手法のみ実装
10.4 システム運用上の注意
- GPU使用時は適切な冷却環境を確保してください
- 長時間実行時はシステムリソースの監視が必要です
- CPUモードでは処理時間が大幅に増加します
- 大量データ処理時はディスク容量に注意してください
10.5 法的・倫理的責任の明確化
本ツールの使用者は以下を理解し同意するものとします:
- 開発者の免責: いかなる使用結果についても開発者は法的責任を負いません
- 自己責任原則: 全ての使用は利用者の完全な自己責任において行われます
- 適切な使用: 教育・研究目的の範囲内での使用に留めてください
- 法令遵守: 各国の金融商品取引法等を遵守してください
- 第三者への影響: 本ツールの結果を第三者に提供する際は十分な注意が必要です
10.6 推奨される追加研究項目
本ツールをより実用的なレベルに改善するには、以下の研究開発が必要です:
- リスク管理機能の実装
- より高度なテクニカル分析手法の導入
- ファンダメンタル分析要素の組み込み
- 市場環境変化への適応機能
- バックテスト機能の強化
- ポートフォリオ理論の適用
学術利用における推奨事項
本ツールを学術研究で使用する場合:
- 研究倫理委員会での承認取得を推奨
- 結果発表時は本ツールの限界を明記
- 再現性確保のため実行環境を詳細に記録
- 統計的有意性の検証を別途実施
最終確認:本マニュアルを読み終えた時点で、利用者は本ツールが研究開発段階の実験的ソフトウェアであることを十分理解し、一切の投資判断には使用しないことに同意したものとみなします。
おまけ
素人の方にも分かるように、このスクリプトが翌日の株価を予測できる仕組みを説明しますね。
🧠 人間の投資判断との比較で理解しよう
人間の投資家がやっていること
- チャートを見る → ローソク足の形、線の向きを観察
- パターンを覚える → 「この形の後は上がることが多い」という経験
- 判断する → 明日買うか売るか決める
このAIがやっていること
- チャート画像を見る → 人間と同じようにチャートを「画像」として認識
- パターンを学習する → 過去1000枚以上のチャートで「この形の後は上がった/下がった」を記憶
- 予測する → 新しいチャートを見て「明日は上がりそう/下がりそう」を判断
📊 具体的な仕組み
ステップ1: 過去データで「正解」を作る
例:2023年1月10日のチャート → 翌日(1月11日)実際に上がった ✅
例:2023年1月15日のチャート → 翌日(1月16日)実際に下がった ❌
ステップ2: AIに大量の「問題と正解」を教える
- 問題: 60日分のチャート画像
- 正解: その翌日に実際に上がったか下がったか
- 学習量: 約1000問以上
ステップ3: 新しいチャートで予測
- 今日までの60日チャートを見せる
- AI「このパターンは過去に○○%の確率で上がってた」
- 「だから明日は上がりそう」と予測
🎯 なぜ画像として扱うのか?
従来の方法(数値データ)
終値: 2500円、出来高: 100万株、RSI: 65...
→ 人間には分かりにくい
このスクリプトの方法(画像データ)
チャート画像 → 人間が見るのと同じ
→ ローソク足の形、線の傾き、ボリンジャーバンドの位置など
→ 視覚的パターンを総合判断
🔍 AIが見ているパターンの例
上昇パターンの特徴(AIが学習している例)
- ローソク足が右肩上がり
- 移動平均線より価格が上
- RSIが適度に高い(50-70)
- 出来高が増加傾向
下落パターンの特徴
- ローソク足が右肩下がり
- 移動平均線より価格が下
- RSIが低い(30-50)
- 出来高が減少傾向
🤖 CNNの「目」の仕組み
人間の目
- 全体を見る → 「なんとなく上向きだな」
- 細部を見る → 「この赤いローソク足が気になる」
- 総合判断 → 「明日は下がりそう」
AIの目(CNN)
- 第1層: 線や点などの基本図形を認識
- 第2層: ローソク足や移動平均線などの形を認識
- 第3層: チャート全体のパターンを認識
- 最終層: 「上がる/下がる」の判断
💡 実際のコード部分を簡単に説明
1. データ準備部分
# 過去の株価データをダウンロード
df = ticker.history(period="5y")
# 「正解」を作る:翌日実際に上がったかどうか
future_return = df['close'].shift(-1) / df['close'] - 1
labels = (future_return > 0.01).astype(int) # 1%以上上昇=1、それ以外=0
2. チャート画像生成部分
# 60日分のデータでチャート画像を作る
def render_ohlc_chart(self, df):
# ローソク足を描画
# 移動平均線を描画
# RSI、MACDを描画
return image_array # 画像として出力
3. AI学習部分
# EfficientNet(画像認識AI)を使用
model = efficientnet_b0(pretrained=True)
# 大量のチャート画像と正解を学習
for epoch in range(50):
for chart_image, label in train_data:
prediction = model(chart_image) # 予測
loss = criterion(prediction, label) # 正解との差
# 予測精度を向上させる
🎪 例えて言うなら…
料理の達人を育てるようなもの
- 見た目で判断: 焼き色、香り、音を総合的に判断
- 経験を積む: 1000回以上の成功・失敗体験
- パターン認識: 「この見た目なら美味しい」という直感
株価予測AIも同じ
- チャートの見た目で判断: 形、色、線の傾きを総合判断
- 経験を積む: 1000枚以上のチャートで成功・失敗学習
- パターン認識: 「この形なら上がる」という「AI直感」
⚠️ 重要な注意点
人間の投資家でも100%予測できないように、AIも完璧ではありません
- 成功率70% = 10回予測して7回当たる程度
- 株式市場は複雑 = チャート以外の要因(ニュース、経済情勢)も影響
- 過去のパターン = 将来も同じとは限らない
でも、ランダムに予測するより遥かに賢い判断ができる、というのがこのAIの価値なのです。