4層Affineならどうでしょう? 未来永劫 株価を予測することが可能!? LSTMで今度こそ予測精度向上を図りたい編
今回はLSTMを4層Affine化した効果を検証します
今回は、LSTMを4層Affine化したAIモデルの予測性能を評価します。
ちなみに、私が考えるLSTMを4層Affine化する、とは下記のイメージです。
RecurrentInput/ReccurentOutput間で繰り返し処理されるのは、3層Affineが対象となります。
最終段の100ベクトル → 4ベクトル(始値、高値、安値、終値)に使用するAffineも数えて、4層Affineと呼んでいます。
つまり、中間層が3層Affineで、出力層が1層Affineの合計4層Affine構造となります。
4層AffineのLSTMで評価する説明変数の構成
今回は、下記の3種類の説明変数を用いて、4層Affine化したLSTMの予測精度の評価を行います。
評価する説明変数の構成
5日分の日経平均株価 × 5段のRNN
1日分の日経平均株価およびテクニカル指標 × 5段のRNN
5日分の日経平均株価およびテクニカル指標 × 5段のRNN
日経平均株価は、始値、高値、安値、終値の4値です。
また、テクニカル指標は、移動平均、ボリンジャーバンド、MACD, RSI, ストキャスティクスです。
評価結果1: 説明変数の構成が5日分の日経平均株価 × 5段のRNNの場合
以下に、説明変数の構成が5日分の日経平均株価 × 5段のRNNの場合における学習曲線を示します。
学習曲線の縦軸は、ログスケールで表示されています。
学習曲線から、VALIDATION ERRORの最小値が70000弱であることが確認できます。
続いて、AIモデルの評価結果に対する実際の日経平均株価と予測値の比較を行います。
下記は、実際の日経平均株価の終値(y__3)とAIモデルの終値に対する予測値(y'__3)を比較したグラフです。
グラフの縦軸は日経平均株価([円])を、横軸は評価期間における営業日の日数を表しています。
また、上記の差分を算出し、グラフ化したものが下記となります。
グラフの縦軸は終値の差分([円])を、横軸は評価期間における営業日の日数を表しています。
上記の差分のグラフから、AIモデルの終値に対する予測値は、実際の終値に対して±800円の範囲で収まっていることが確認できます。
さらに、終値に対するRMSE(Root Mean Squared Error, 二乗平均平方根誤差)を算出すると、319.34円となりました。
ちなみに、RMSEの算出式は、下記となります。
$${RMSE = \sqrt{\frac{1}{n}\sum\limits_{i=1}^{n}(y_i-\hat{y}_i)^2}}$$
$${y_i}$$が日経平均株価の終値(y__3)に、$${\hat{y}_i}$$がAIモデルの終値に対する予測値(y'__3)に相当します。
評価結果2: 説明変数の構成が1日分の日経平均株価およびテクニカル指標 × 5段のRNNの場合
以下に、説明変数の構成が1日分の日経平均株価およびテクニカル指標 × 5段のRNNの場合における学習曲線を示します。
学習曲線の縦軸は、ログスケールで表示されています。
学習曲線から、VALIDATION ERRORの最小値が70000弱であることが確認できます。
続いて、AIモデルの評価結果に対する実際の日経平均株価の終値(y__3)と終値に対する予測値(y'__3)を比較した結果を以下に示します。
上記の差分を算出し、グラフ化したものが下記となります。
上記の差分のグラフから、AIモデルの終値に対する予測値は、実際の終値に対して±800円の範囲で収まっていることが確認できます。
さらに、終値に対するRMSEを算出すると、321.65円となりました。
評価結果3: 説明変数の構成が5日分の日経平均株価およびテクニカル指標 × 5段のRNNの場合
説明変数の構成が5日分の日経平均株価およびテクニカル指標 × 5段のRNNの場合は、説明変数の要素数が多くなってしまいます。
このため、中間層のAffine(Affine_M1~Affine_M3)に対するOutShapeパラメータを100から500に増やしました。
この変更に伴い、他のパラメーターも調整しました。
パラメーターを変更したAIモデルの構造図は次の通りです。
以下に、説明変数の構成が5日分の日経平均株価およびテクニカル指標 × 5段のRNNの場合における学習曲線を示します。
学習曲線の縦軸は、ログスケールで表示されています。
流石に、説明変数およびAffineのOutShapeパラメーターが増加したため、AIモデルの学習時間が11時間10分24秒まで伸びました。
さて、肝心のVALIDATION ERRORの最小値ですが、数値的には70000弱でこれまでのケースと変わらないレベルでした。
続いて、AIモデルの評価結果に対する実際の日経平均株価の終値(y__3)と終値に対する予測値(y'__3)を比較した結果を以下に示します。
上記の差分を算出し、グラフ化したものが下記となります。
上記の差分のグラフから、AIモデルの終値に対する予測値は、実際の終値に対してほぼ±800円の範囲で収まっていることが確認できます。
さらに、終値に対するRMSEを算出すると、321.81円となりました。
比較対象として4層Affine構造のAIモデルに対する評価結果を振り返る
比較対象として、過去に行った4層Affine構造のAIモデルに対する評価結果を下記に示します。
説明変数はの構成は、下記の通りです。
評価する説明変数の構成
5日分の日経平均株価およびテクニカル指標
学習曲線は、以下の通りです。
VALIDATION ERRORの最小値は70000強であり、LSTM構造のAIモデルを使った場合と比べると、少し大きい印象です。
続いて、AIモデルの評価結果に対する実際の日経平均株価の終値(y__3)と終値に対する予測値(y'__3)を比較した結果を以下に示します。
上記の差分を算出し、グラフ化したものが下記となります。
上記の差分のグラフから、AIモデルの終値に対する予測値は、実際の終値に対してほぼ±800円の範囲で収まっていることが確認できます。
さらに、終値に対するRMSEを算出すると、328.04円となりました。
結果に対する考察
終値に対するRMSEの値を整理すると、以下の通りです。
終値に対するRMSEの値
LSTM構造(4層Affine)
5日分の日経平均株価 × 5段のRNNの場合 → 319.34円
1日分の日経平均株価およびテクニカル指標 × 5段のRNNの場合 → 321.65円
5日分の日経平均株価およびテクニカル指標 × 5段のRNNの場合 → 321.81円
(参考)4層Affine構造
5日分の日経平均株価およびテクニカル指標の場合 → 328.04円
終値に対するRMSEの値は、AIモデルの構造の違い(4層Affine構造、あるいは、LSTM構造(4層Affine))に関係なく、およそ320円前後でした。
また、学習曲線におけるVALIDATION ERRORの最小値にも大きな差分は見られませんでした。
このため、VALIDATION ERRORの最小値と終値に対するRMSEの値には相関関係が成り立ちそうです。
現状は、何をやってもVALIDATION ERRORの最小値が70000前後であり、終値に対するRMSEが320円程度となります。
これ以上の予測精度の向上を図るには何をすれば良いのか、全く見当もつきません。
とりあえず、今回の結果から、説明変数にテクニカル指標を加えなくても、特に予測精度には影響がなさそうだということが分かりました。
このため、説明変数の構成として、もう少し日数を増やしたり、あるいは、RNNの段数を増やしたりした場合に予測精度がどうなるかを確認してみます。