おそらくこれがシンプルなElman-net構造では? 日経平均株価を予測する回帰について
Elman-net構造をシンプルに実現したい
前回の記事では、Elman-net構造のフィードバックループの結合部におけるデータの個数に着目し、日経平均株価の回帰に対する検証を行いました。
学習データのInputパスからのデータの個数とフィードバックループのデータの個数を共に100個としたのですが、検証結果は微妙なものとなりました。
詳細は、下記の記事を参照ください。
その後、Elman-net構造をもう少しシンプルにしたいとアレコレ考えていたのですが、一つの構造を思いつきました。
シンプルにしたElman-net構造のAIモデル
今回の検証で使用するシンプルにしたElman-net構造のAIモデルは、下記となります。
RecurrentInputおよびRecurrentOutputの間を4層Affine構造とすることで、純粋に4層Affine構造をRNN化した構成となりました。
また、Inputパスのデータの個数が8個に対して、フィードバックループのデータ個数を4個としました。
唯一の疑問点は、SliceとSquaredErrorを直接接続するとエラーが出力される点です。
エラーメッセージは、下記となります。
ValueError: could not broadcast input array from shape (64,4) into shape (64,1,4)
エラーの内容は、高さ64, 幅4からカラーチャネル数64, 高さ1, 幅4の形に送信できません、的なことだと思われます。
しかし、私の理解では、Sliceから出力されるデータのフォーマットは、高さ1, 幅4です。
また、Sliceから出力されるデータのフォーマットは、私がSquaredErrorに入力したいデータのフォーマットと同じです。
このため、何も問題ないと私は考えているのですが、上記のエラーが出力されます。
なぜ、このようなエラーが出力されるのか、理解できません。
(? _ ?)
しょうがないので、Reshape_Outputを追加し、高さ1, 幅4のデータを単に4個のデータに変換することで、エラーへの対策としました。
構成を見直したElman-net構造のAIモデルに対する検証結果
今回の検証では、前回と同じ学習データおよび評価データを使用しています。
先ず始めに、説明変数に恐怖指数(VIX)を使用した場合の学習曲線を以下に示します。
グラフの縦軸はログスケールです。
VALIDATION ERRORの最小値は、0.001091でした。
また、AIモデルの評価結果から、実際の日経平均株価と予測値の終値に対して逆標準化を行いRMSEを算出した結果は、273.99円でした。
続いて、説明変数にS&P500を使用した場合の学習曲線を以下に示します。
VALIDATION ERRORの最小値は、0.001246でした。
また、AIモデルの評価結果から、実際の日経平均株価と予測値の終値に対して逆標準化を行いRMSEを算出した結果は、285.69円でした。
結果に対する考察
前回までの検証結果と今回の検証結果をまとめたものを以下に記載します。
説明変数に恐怖指数(VIX)を使用した場合
4層Affine構造(学習データ5日分)
終値(逆標準化)に対するRMSE: 282.44円
VALIDATION ERRORの最小値: 0.001091
LSTM構造(学習データ1日分)
終値(逆標準化)に対するRMSE: 286.20円
VALIDATION ERRORの最小値: 0.001070
Elman-net構造(学習データ1日分)
終値(逆標準化)に対するRMSE: 280.87円
VALIDATION ERRORの最小値: 0.001065
Elman-net構造(学習データ個数見直し、学習データ1日分)
終値(逆標準化)に対するRMSE: 277.49円
VALIDATION ERRORの最小値: 0.001108
Elman-net構造(シンプル構成、学習データ1日分) ★今回の結果★
終値(逆標準化)に対するRMSE: 273.99円
VALIDATION ERRORの最小値: 0.001091
説明変数にS&P500を使用した場合
4層Affine構造(学習データ5日分)
終値(逆標準化)に対するRMSE: 283.07円
VALIDATION ERRORの最小値: 0.001043
LSTM構造(学習データ1日分)
終値(逆標準化)に対するRMSE: 276.14円
VALIDATION ERRORの最小値: 0.001168
Elman-net構造(学習データ1日分)
終値(逆標準化)に対するRMSE: 283.32円
VALIDATION ERRORの最小値: 0.001077
Elman-net構造(学習データ個数見直し、学習データ1日分)
終値(逆標準化)に対するRMSE: 286.55円
VALIDATION ERRORの最小値: 0.001129
Elman-net構造(シンプル構成、学習データ1日分) ★今回の結果★
終値(逆標準化)に対するRMSE: 285.69円
VALIDATION ERRORの最小値: 0.001246
説明変数に恐怖指数(VIX)を使用した場合は、今回のElman-net構造のAIモデルによる予測精度が最も高く(RMSEが最も低く)なりました。
しかし、説明変数にS&P500を使用した場合は、前回行ったLSTM構造のAIモデルによる予測精度よりも僅かに高く(RMSEが最も低く)なりましたが、誤差レベルでした。
こうしてみると、説明変数に恐怖指数(VIX)を使用した場合はElman-net構造と、また、説明変数にS&P500を使用した場合はLSTM構造との相性が良いようです。
なぜ、このような結果になるのかは、全く分かりません。
とはいえ、そうであれば、次回は、今回のElman-net構造をLSTMに適用した場合にどうなるかを確認したいと思います。