楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用してリアルタイムで株価などのデータを取り込んでいます。リアルタイムで売買ができるように Python で強化学習のアルゴリズムを利用したシステム開発に日々取り込んでいます。
毎日のように生成 AI とのやりとりをしていますが、StableBaselines3 (SB3) に関するやりとりで残しておきたい内容を備忘録としてまとめました。
過学習の兆候と判断基準 (PPO)
SB3 の PPO エージェントで過学習を判断する主なポイントは、報酬の過剰な安定化と汎化性能の低下です。特に、訓練環境では高報酬だが、テスト環境や初期状態の変化に弱くなる場合は過学習の兆候です。
以下に、Stable Baselines3 (SB3) で PPO エージェントの過学習を判断するための具体的な観察ポイントを整理します。
- 報酬の過剰な安定化
- 訓練中のエピソード報酬が早期に頭打ちになり、変動がほぼなくなる。
- しかし、テスト環境や初期状態のランダム化で報酬が著しく低下する。
- → 汎化能力が失われ、特定の状態に最適化されすぎている可能性。
- KL 散度の急激な低下
- PPO では KL 散度(旧ポリシーと新ポリシーの差)を監視しており、これが極端に小さくなると、ポリシーがほぼ変化しなくなっていることを示す。
- → 学習が停滞しているか、過学習で探索が止まっている可能性。
- エピソードの行動パターンが固定化
- 行動が単調で、環境の変化に対応できない。
- 例えば、Volume の変化に対して反応が鈍くなる。
- → 過去の報酬履歴に依存しすぎて、柔軟性が失われている。
- 訓練と評価の報酬差が拡大
- eval_env を使って定期的に評価した際、訓練環境と評価環境で報酬に大きな差が出る。
- → 過学習の典型的な兆候。
- 学習曲線の過剰な滑らかさ
- tensorboard で ep_rew_mean や value_loss を可視化した際、極端に滑らかな曲線が続く。
- → 探索が止まり、同じ軌道ばかりを繰り返している可能性。
対策と改善案
- 環境のランダム化
- 初期状態やノイズを導入して汎化性能を高める。
- Early Stopping
- eval_callback で評価報酬が一定期間改善しない場合に学習停止。
- 正則化の強化
- ent_coef(エントロピー係数)を高めて探索を促進。
- 学習率の調整
- learning_rate をスケジューリングして過学習を抑制。
- 複数環境での訓練
- VecEnv を使って多様な状態を経験させる。
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- PyQtGraph - Scientific Graphics and GUI Library for Python
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation

0 件のコメント:
コメントを投稿