LSTM構造のAIに対して説明変数を30日分にするとどうなるの? 明日の日経平均株価が陽線か陰線を予測するAI編
今回はLSTM構造のAIに対して説明変数を30日分とした場合にどうなるかを検証します
翌営業日のローソク足が陽線か、あるいは、陰線かを予測(二値分類)するAIを検討しているのですが、予測精度が低く、困っていました。
そこで、ChatGPTに二値分類を行うAIの構造について聞いてみました。
ChatGPTの回答をまとめると、以下の通りです。
二値分類にオススメのAI構造は、下記の3種類
LSTM or GRU構造 → 短期のトレンド向け
CNN(1D CNN)-LSTM構造 → 複雑なパターン向け
Transformer構造 → 複雑なパターン向け
説明変数は、30日程度
中間層は2~3層で、各層のユニット数は50~100程度
過学習対策にはDropoutを使用
1D CNNは5日ごとの変動パターンを検出
ChatGPTとのやり取りに関する詳細は、下記の記事を参照ください。
ChatGPTからの回答には、説明変数を30日程度とする情報がありました。
そこで、4層Affine構造のAIを使用し、説明変数を30日とした場合の効果を確認しました。
結論として、予測精度が56.0%から58.4%に向上しました。
予測精度の向上は僅かではありますが、説明変数を30日とするのは、方向性として正しそうです。
そこで、今回は、ChatGPTの回答に含まれるLSTM構造のAIに対して、説明変数を30日とした場合の効果を確認したいと思います。
学習および評価を行うAIは2タイプ
学習および評価に使用するAIは、下記の3タイプです。
タイプA: RNN 5段構成のAI構造
タイプB: RNN 30段構成のAI構造
RNN(Recurrent Neural Network)の構造について、補足します。
RNN 5段構成とは、下図のように5つの再帰的な結合を有する構成です。
RNN 30段構成の場合は、横方向に各層が30個並んでいる状態となります。
以下に、タイプAのAI構造図を示します。
タイプAは、RNN 5段構成ですので、RecurrentInputからRecurrentOutputまでの間に挟まれた各レイヤーには"x5"と付加されているのが確認できます。
RNN 30段構成の場合は、"x30"となります。
また、ChatGPTの回答に従い、中間層を3層構造(Affine_M1~Affine_M3)とし、各層のユニット数(パラメータ数?)は10~100としています。
タイプAの学習および評価結果の詳細
以下に、タイプAの学習曲線を示します。
学習が進むにつれ、COSTおよびTRAINING ERRORは順調に減少していますが、VALIDATION ERRORは上昇しているのが確認できます。
つまり、過学習の状態です。
VALIDATION ERRORの最小値は、0.688936でした。
続いて、混同行列を以下に示します。
予測精度は、52.4%でした。
AIの予測がy'=1(翌営業日のローソク足が陽線)に偏っているのが確認できます。
タイプBの学習および評価結果の詳細
以下に、タイプBの学習曲線を示します。
VALIDATION ERRORの最小値は、0.680610でした。
RNNを30段構成に増やしたことで、VALIDATION ERRORの上昇が抑えられていることが確認できます。
ただし、COSTおよびTRAINING ERRORの減少も抑えられています。
続いて、混同行列を以下に示します。
予測精度は、54.8%でした。
今度は、AIの予測がy'=0(翌営業日のローソク足が陰線)に若干偏っています。
結果に対する考察
LSTM構造のAIに対して30日分の説明変数を与えた場合、RNNの段数が少ないと過学習が進むことが確認できました。
LSTM構造の場合は、単純に説明変数の期間だけではなく、RNNの段数も意識する必要がありそうです。
これまでは、過学習への対策としてDropoutを挿入してきました。
しかし、RNNの段数を増やすことで同様の効果が得られそうだということが分かりました。
これは、大きな収穫だと感じています。
現時点で、ChatGPTの回答に対する未確認項目は、以下の通りです。
GRU構造
CNN(1D CNN)-LSTM構造
Transformer構造
次回は、1D CNN構造について、アレコレ試してみたいと思います。