
二値分類の過学習対策 AIを使って日経平均株価の予測に挑戦 学習データマシマシ編
前回の記事より、今後の課題を振り返る
前回は、翌営業日の日経平均株価が上がるか、下がるかを予測する二値分類に関して、過学習の状態に陥ってしまったことへの対策の検討を行いました。
一般的に、過学習への対策は以下の通りです。
過学習への対策
学習データ(説明変数)の見直し
AIモデルの見直し
前回は、学習データの見直しとして、ローソク足の情報(終値、始値、高値、安値)を5日分まとめてAIモデルに入力しました。
その結果、僅かではありますが、Accuracy(分類精度)が50.29%から56.73%に改善しました。
今回は、さらなる学習データの見直しを進めることで、過学習の改善を図りたいと思います。
学習データの内容
前回の学習データと今回の学習データの内容を以下に示します。
学習データの内容
前回の学習データ
下記のデータを5営業日分まとめて1セットとしてAIモデルに入力
ローソク足(終値、始値、高値、安値)
1行20列のベクトルデータ
ローソク足の最大値、最小値に基づきMin-Max正規化を実施
今回の学習データ
下記のデータを5営業日分まとめて1セットとしてAIモデルに入力
ローソク足(終値、始値、高値、安値)
移動平均(5, 25, 75日)
ボリンジャーバンド(±2σ, ±1σ, 中心線)
MACD(MACD, MACDシグナル)
1行70列のベクトルデータ
下記のグループ毎にMin-Max正規化を実施
グループ1: ローソク足、移動平均
グループ2: ボリンジャーバンド
グループ3: MACD
AIモデルに使用したRNN LSTMの構造図
学習データのフォーマットに合わせてパラメーターを修正したLSTMの構造図を下記に示します。

前回使用したAIモデルに対する修正箇所は、下記の2カ所です。
AIモデルの修正箇所
InputのSizeを70に修正
ReshapeのOutShapeを5,14に修正
Reshapeで1行70列のベクトルデータを5行14列のベクトルデータに変換しています。
そして、RecurrentInputおよびRecurrentOutputで挟まれた層では、分割された1行14列のベクトルデータに対して、処理を合わせて5回行います。
AIモデルの学習および評価を実行
修正したAIモデルに今回作成したRNN用の学習データを学習させた際の学習曲線を下記に示します。

学習の途中でリセットのような状況が確認される点も含めて、前回の結果と類似した形状となりました。
続いて、今回の評価結果に対する混同行列を示します。

比較のため、下記に前回の評価結果に対する混同行列を示します。

期待とは裏腹に、Accuracy(分類精度)が56.73%から51.20%に低下してしまいました。
今回は、学習データの情報量をかなり増やしたので、過学習が少しは改善されるだろうと期待していました。
しかし、結果は若干の性能低下でした。
もしかしたら、検討の方向性が間違っているのかもしれません。
二値分類のこれまでの経緯を振り返ると、AIモデルの構造を変えたことによる効果が大きかった事実があります。
このため、過学習に対しても、AIモデルの構造に対する検討に注力した方が良いのかもしれません。
今後の課題
過学習への対策として、AIモデルの構造を見直したいと思います。
インターネットで過学習への対策について調べてみると、ドロップアウトと呼ばれる手法が紹介されていました。
ドロップアウトとは、多層化されたニューラルネットワーク内のノードをランダムで不活性にするというものです。
ノードを不活性にするとは、要するに学習させないということです。
幸いなことに、Neural Network ConsoleにはDropoutが用意されていました。
改めて、Neural Network Consoleの利便性の高さを実感しました。
次回は、過学習に対するドロップアウトの効果について検証したいと思います。
AIモデルのデータについて
今回作成したAIモデルのデータは、Googleドライブにて共有しています。
URL: https://drive.google.com/drive/folders/1VFJ6m5QV2tD2OGHVBBXgc0_jMiaqzP1D?usp=drive_link
N225_LSTM_Affine100N_BB-MACD_5Days.sdcproj
Neural Network Console用のプロジェクトファイル