見出し画像

私が間違っておりましたm(_ _)m 未来永劫 株価を予測することが可能!? Slice層のパラメーター見直し編


今回はLSTMのSlice層に対するパラメーターを見直した結果を紹介します

前回行った、LSTM構造のAIモデルを使った回帰による日経平均株価の予測では、以下の問題がありました。

  • 前回の記事での問題点

    • AIモデルの予測が実際の日経平均株価と比べて5営業日分だけ遅く出力される

詳細は、下記の記事を参照ください。

AIモデルの予測がズレる原因として、思い至ったのがLSTMで使用しているSlice層のパラメーター設定でした。

そこで、Slice層のパラメーター設定を変更した場合に結果がどうなるかを確認しました。

LSTMで使用されるSlice層とパラメーター設定

LSTM構造のAIモデルにおいて、Slice層は下記の位置にて使用されています。

LSTM Slice
LSTM構造(一部抜粋)で使用される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の説明文だけでは理解できないので、図にしてみました。

Slice層 パラメーター設定 イメージ図
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層 パラメーター設定 1 イメージ図
Slice層のパラメーター設定1のイメージ図
  • Slice層のパラメーター設定2(今回)

    • Start: 4,0

    • Stop: 5,100

    • Step: 1,1

Slice層 パラメーター設定 2 イメージ図
Slice層のパラメーター設定2のイメージ図

前回の結果から、Slice層のパラメーター設定1に基づいて作成したAIモデルの予測値は、実際の日経平均株価より5営業日分ズレていました。

そこで、今回はSlice層のパラメーター設定2に基づいてAIモデルを作成しました。

ちなみに、説明変数の構成は前回と同じです。

  • 説明変数の構成

    • 5日分の日経平均株価 (始値、高値、安値、終値)

Slice層のパラメーター設定2に基づいたLSTM構造のAIモデルによる回帰の学習および評価結果

以下に、学習曲線を示します。

Slice層 パラメーター設定 2 LSTM 回帰 学習曲線
Slice層のパラメーター設定2に基づいたLSTMによる回帰の学習曲線

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モデルを使って、回帰による日経平均株価の予測を行いたいと思います。

いいなと思ったら応援しよう!