私が間違っておりましたm(_ _)m 未来永劫 株価を予測することが可能!? Slice層のパラメーター見直し編
今回はLSTMのSlice層に対するパラメーターを見直した結果を紹介します
前回行った、LSTM構造のAIモデルを使った回帰による日経平均株価の予測では、以下の問題がありました。
前回の記事での問題点
AIモデルの予測が実際の日経平均株価と比べて5営業日分だけ遅く出力される
詳細は、下記の記事を参照ください。
AIモデルの予測がズレる原因として、思い至ったのがLSTMで使用しているSlice層のパラメーター設定でした。
そこで、Slice層のパラメーター設定を変更した場合に結果がどうなるかを確認しました。
LSTMで使用されるSlice層とパラメーター設定
LSTM構造のAIモデルにおいて、Slice層は下記の位置にて使用されています。
Neural Network Consoleでは、LSTM構造を含むRNN(Recurrent Neural Network)の記述方法(パラメーター設定を含む)が特殊です。
今回確認するSlice層の役割は、繰り返し行われる処理(上記のReccurentInput層からReccurentOutput層で挟まれた範囲)で作成されたデータの一部を抽出するというものです。
Slice層のパラメーターは以下の3種類です。
Slice層のパラメーター
Start: 抽出の視点を指定
Stop: 抽出の終点を指定
Step: 抽出の間隔を指定
Neural Network Consoleのマニュアルには、次のように記載されています。
Slice
配列の一部を抽出します
例えば、サイズが「3,48,64」の画像データの中心24×32ピクセルを2ピクセル毎に抽出するには、Startに「0,12,16」を、Stopに「3,36,48」を、Stepに「1,2,2」を指定します
上記の説明において、データのサイズフォーマットは以下の通りです。
データのサイズフォーマット
「解像度, 高さ, 幅」
つまり、サイズが「3,48,64」の画像データとは、解像度が3, 画像の高さが48ピクセル、画像の幅が64ピクセルとなります。
例えば、同サイズでモノクロ画像の場合は「1,48,64」です。
Sliceの説明文だけでは理解できないので、図にしてみました。
上図は、高さ48ピクセル、幅64ピクセルのモノクロ画像(「1,48,64」)をイメージしたものです。
Slice層のパラメーター設定において、Startの「0,12,16」を赤い四角で、Stopの「1,36,48」を青い四角で, Stepの「1,2,2」を★印で示しています。
また、Sliceのパラメーター設定によって切り出される高さ24ピクセル、幅32ピクセルのモノクロ画像は、緑色の四角で示されています。
ただし、あくまで私の理解に基づくものですので、間違っている可能性はあります。
さて、私が作成したLSTMでは、ReccurentInput/ReccurentOutput間で扱われるデータサイズは「5,100」です。
5は5段のRNNを、また、100はAffineのOutShapeパラメーターで指定した数を意味します。
上記を踏まえつつ、前回使用したSlice層のパラメーターと今回見直したパラメーターを以下に示します。
前回と今回のSlice層のパラメーター設定の比較
前回
Start: 0,0
Stop: 1,50 → 以下の説明では1,100とします
Step: 1,1
今回
Start: 4,0
Stop: 5,100
Step: 1,1
私が設定したSliceのパラメーターとイメージ図を以下に示します。
Slice層のパラメーター設定1(前回)
Start: 0,0
Stop: 1,100
Step: 1,1
Slice層のパラメーター設定2(今回)
Start: 4,0
Stop: 5,100
Step: 1,1
前回の結果から、Slice層のパラメーター設定1に基づいて作成したAIモデルの予測値は、実際の日経平均株価より5営業日分ズレていました。
そこで、今回はSlice層のパラメーター設定2に基づいてAIモデルを作成しました。
ちなみに、説明変数の構成は前回と同じです。
説明変数の構成
5日分の日経平均株価 (始値、高値、安値、終値)
Slice層のパラメーター設定2に基づいたLSTM構造のAIモデルによる回帰の学習および評価結果
以下に、学習曲線を示します。
AIモデルの学習にかかった時間は44分18秒でした。
前回の学習曲線では、VALIDATION ERRORが500000前後でしたが、今回は70000程度まで低くなりました。
続いて、日経平均株価の始値、高値、安値、終値に対して、実際の値(正解値)とAIモデルの予測値を比較したグラフを下記に示します。
y__0が始値(正解値), y'__0が始値(予測値)を表しています。
また、グラフの縦軸が日経平均株価([円])を、横軸が営業日の日数を表しています。
y__1が高値(正解値), y'__1が高値(予測値)を表しています。
y__2が安値(正解値), y'__2が安値(予測値)を表しています。
y__3が終値(正解値), y'__3が終値(予測値)を表しています。
Slice層のパラメーター設定に対する結論
今回の確認結果から、Slice層からデータを抽出する場合は、上ではなく下から抽出する必要があることが分かりました。
気がついて良かったです。
学習済みAIモデルの推論による予測値と実際の日経平均株価との比較
続いて、学習済みAIモデルに対して、2024年2月1日から2024年5月31日の日経平均株価を予想させ、予測値と実際の日経平均株価とを比較しました。
始値、高値、安値および終値に対する正解値(実際の日経平均株価)とAIモデルの予測値を比較した結果を以下に示します。
上記は、始値に対する正解値と予測値を比較したグラフです。
縦軸は日経平均株価([円])を、横軸は日付を表しています。
学習済みAIモデルの推論による始値の予測値は、右肩下がりの単調減少となっていることが確認できました。
上記は、高値に対する正解値と予測値を比較したグラフです。
上記は、安値に対する正解値と予測値を比較したグラフです。
上記は、終値に対する正解値と予測値を比較したグラフです。
推論に関しては、全然ダメでした。
単純にLSTM構造のAIモデルを使用しただけでは、回帰による日経平均株価の予測精度を向上させることができないことが分かりました。
次回は、4層Affine化したLSTM構造のAIモデルを使って、回帰による日経平均株価の予測を行いたいと思います。