見出し画像

二値分類の過学習対策 AIを使って日経平均株価の予測に挑戦 中間層を4層Affineにしてみた編


前回の記事より、今後の課題を振り返る

前回は、翌営業日の日経平均株価が上がるか、下がるかを予測する二値分類に関して、過学習の状態に陥ってしまったことへの対策としてドロップアウトの効果を確認しました。

過学習対策としてのドロップアウトの効果は確認できました。

しかし、期待していたVALIDATION ERRORを低下させる効果は確認できませんでした。

そこで、過学習を抑え、かつ、VALIDATION ERRORを低下させる目的で、今回はAIモデルの中間層を4層Affine化してみることにしました。

AIモデルに使用したRNN LSTMの構造図

中間層を4層Affine化したLSTMの構造図を下記に示します。

中間層 4層 Affine RNN LSTM AIモデル 構造図
中間層に4層Affineを追加したRNN LSTMによるAIモデルの構造図

上記のAIモデルにおいて、Affine_M1Tanh_M4までが今回変更した中間層になります。

上記のAIモデルの構造を基本としつつ、また、過学習への対策も考慮した結果、中間層の構造を下記のパターンA~Eとして学習および評価を行いました。

中間層 4層 Affine パターンA
中間層に4層Affineを用いた基本的な構造(パターンA)
中間層 4層 Affine 上位 Dropout パターンB
4層Affineの上位にDropoutを追加した構造(パターンB)
中間層 4層 Affine 中間 Dropout パターンC
4層Affineの中間にDropoutを追加した構造(パターンC)
中間層 4層 Affine 下位 Dropout パターンD
4層Affineの下位にDropoutを追加した構造(パターンD)
中間層 4層 Affine 各層 Dropout パターンE
4層Affineの各層にDropoutを追加した構造(パターンE)

パターンA~Eの構造は、次の通りです。

  • パターンA~Eの構造

    • パターンA: 4層Affineの構造のみでDropoutは未使用

    • パターンB: 4層Affineの構造で、Affine_M1の直下にDropout_M1を追加(全体でドロップアウトを1つ使用)

    • パターンC: 4層Affineの構造で、Affine_M2の直下にDropout_M2を追加(全体でドロップアウトを1つ使用)

    • パターンD: 4層Affineの構造で、Affine_M4の直下にDropout_M4を追加(全体でドロップアウトを1つ使用)

    • パターンE: 4層Affineの構造で、各Affineの直下にDropoutを追加(全体でドロップアウトを4つ使用)

ドロップアウトのパラメーターは全てデフォルト値(P=0.5)としています。

また、学習および評価データは、前回使用したものをそのまま使用しました。

AIモデルの学習および評価を実行

パターンA~Eでの学習曲線を下記に示します。

RNN LSTM 4層 Affine 学習曲線 パターンA
パターンAにおける学習曲線
RNN LSTM 4層 Affine 学習曲線 パターンB
パターンBにおける学習曲線
RNN LSTM 4層 Affine 学習曲線 パターンC
パターンCにおける学習曲線
RNN LSTM 4層 Affine 学習曲線 パターンD
パターンDにおける学習曲線
RNN LSTM 4層 Affine 学習曲線 パターンE
パターンEにおける学習曲線

パターンAの学習曲線は、学習の途中でリセットされたかのような、ドロップアウトを使用しない場合に見られる特徴が確認できました。

ドロップアウトを1つ使用するパターンB~Dの学習曲線は、ドロップアウトの挿入位置を上位層から下位層に移動するにつれてVALIDATION ERRORも低下していくことが確認できました。

パターンEの学習曲線は、COSTとTRAINING ERRORに追従するように、VALIDATION ERRORが低下しているように見えます。

期待通りの結果が得られそうな予感がしましたが、混同行列を確認するとそうでもありませんでした。

続いて、パターンA~Eの評価結果における混同行列を以下に示します。

RNN LSTM 4層 Affine 混同行列 パターンA
パターンAにおける混同行列
RNN LSTM 4層 Affine 混同行列 パターンB
パターンBにおける混同行列
RNN LSTM 4層 Affine 混同行列 パターンC
パターンCにおける混同行列
RNN LSTM 4層 Affine 混同行列 パターンD
パターンDにおける混同行列
RNN LSTM 4層 Affine 混同行列 パターンE
パターンEにおける混同行列

混同行列を確認したところ、y'=0列(翌営業日の日経平均株価が下がる)の予測がされたケースと予測されなかったケースの2つに分かれていました。

パターンA~Cでは、y'=0列を対象とした予測が行われていました。

一方で、パターンD, Eでは、y'=0列を対象とした予測がほとんど行われていませんでした。

過去の検証結果では、y'=0列、あるいは、y'=1列の予測がされない状況、つまり、どちらか一方に予測が偏ってしまう状況は、LSTMの構造を使用しないケースで散見されました。

こうした結果から、ドロップアウトは最終層に挿入すると、LSTMの効果である過去の記憶を打ち消してしまう可能性があると推測されます。

過学習に対する考察

これまでいろいろと検証してきましたが、Accuracy(分類精度)が55%程度で頭打ちとなる状況が続いています。

裏を返せば、VALIDATION ERRORが0.68程度で下限となる状況です。

学習曲線からは過学習が確認されているため、過学習への対策をアレコレ行ってきました。

改めて、過学習の主な要因をインターネットで調べたところ、次の通りです。

  • 過学習の主な要因

    • 学習データの不足や偏り

    • AIモデルの選択が不適切

学習データに関しては、不足を疑い、ボリンジャーバンドやMACDを追加しました。

また、AIモデルに関しては、これまでの検証結果から、株価予測にはLSTMの構造が適しているという感覚を得ることができました。

ここで気になるのが、学習データの偏りです。

学習データと評価データは、日経平均株価のローソク足データを加工して用意しています。

参照している日経平均株価の期間は、2004年1月5日から2024年1月31日までとなります。

  • 学習データと評価データの内訳

    • 学習データ

      • 前半の約4700日分(およそ2004年5月~2023年5月)

      • 日経平均株価の値幅はおよそ7,000~31,000円

    • 評価データ

      • 後半の約140日分(およそ2023年6月~2024年1月)

      • 日経平均株価の値幅はおよそ30,500~37,000円

今更ですが、学習データと評価データの間に大きな隔たりがあるような気がします。

しかし、上記の隔たりが問題となるなら、右肩上がりで変化する何かをAIモデルで予測することは困難となりそうです。

ですが、流石にそんなことはないような気がします。

ふと、学習データと評価データの隔たりについて、影響を確認する方法を思いつきました。

  • 学習データと評価データの隔たりによる影響を確認する方法

    • 学習データを2分割する

      • 前半の約4700-140日分のデータを新たな学習データとする

      • 後半の約140日分のデータを新たな評価データとする

この場合、新たな学習データと評価データにおける日経平均株価の値幅は次のようになります。

  • 新たな学習データと評価データにおける日経平均株価の値幅

    • 新たな学習データ: 日経平均株価の値幅はおよそ7,000~30,800円

    • 新たな評価データ: 日経平均株価の値幅はおよそ25,500~31,500円

現状よりは、学習データと評価データの隔たりが解消されると考えられます。

今後の課題

新たな学習データと評価データを使用することで、日経平均株価の値幅に対する隔たりの影響を確認します。

使用するAIモデルは、条件を簡素化する目的で、以前作成した中間層を1層のAffineとするLSTMを使用します。

AIモデルのデータについて

今回作成したAIモデルのデータは、Googleドライブにて共有しています。

URL: https://drive.google.com/drive/folders/1Gzlp4AjWt2Z7ttBIwKqJT9_-P7dapVaP?usp=drive_link

  • N225_LSTM_4Affine100N_BB-MACD_5Days.sdcproj

    • Neural Network Console用のプロジェクトファイル(パターンA)

  • N225_LSTM_4Affine100N_Dropout-1_BB-MACD_5Days.sdcproj

    • Neural Network Console用のプロジェクトファイル(パターンB)

  • N225_LSTM_4Affine100N_Dropout-2_BB-MACD_5Days.sdcproj

    • Neural Network Console用のプロジェクトファイル(パターンC)

  • N225_LSTM_4Affine100N_Dropout-4_BB-MACD_5Days.sdcproj

    • Neural Network Console用のプロジェクトファイル(パターンD)

  • N225_LSTM_4Affine100N_Dropout_BB-MACD_5Days.sdcproj

    • Neural Network Console用のプロジェクトファイル(パターンE)


この記事が気に入ったらサポートをしてみませんか?