見出し画像

予測結果が遅れてくるよ 未来永劫 株価を予測することが可能!? 五里霧中編


今回は日経平均株価の予測が1営業日遅れる原因について調査します

前回のLSTMに対する検証で、AIモデルの予測値がなぜか1営業日遅れて出力される問題に遭遇しました。

つまり、AIモデルに当日の日経平均株価の情報を入力すると、本来であれば翌営業日の日経平均株価の情報を期待しているのに、前営業日の日経平均株価の情報が出力されるという状況です。

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

今回は、私のNeural Network ConsoleでのRNNの理解が間違っていて、AIモデルの構造に何らかの誤りが含まれているという懸念点を切り分けるため、単純なAIモデルを使った検証を行います。

例えば、単純なAIモデルの予測値が1営業日遅れて出力さなければ、私の作成したRNN構造のAIモデルに何らかの原因があると考えられます。

一方で、単純なAIモデルの予測値が1営業日遅れて出力された場合は、今のところ、お手上げ状態です。

検証に使用する単純なAIモデルと説明変数

単純なAIモデルとして、下記の2層Affine構造を使用します。

2層Affine AIモデル
2層Affine構造のAIモデル

また、説明変数は1日分の日経平均株価とします。

つまり、上記のAIモデルに当日の日経平均株価の情報を入力することで、AIモデルの出力として翌営業日の日経平均株価の情報を期待しています。

単純なAIモデルと説明変数による評価結果

2層Affine構造のAIモデルに対して、説明変数として1日分の日経平均株価を入力し、学習させた場合の評価結果を示します。

始めに、学習曲線です。

学習曲線 2層Affine構造 1日分 日経平均株価
学習曲線(2層Affine構造、1日分の日経平均株価)

学習曲線の縦軸は、ログスケールで表示されています。

学習時間は、わずか3分4秒でした。

学習曲線から、VALIDATION ERRORの最小値が60000強でした。

これまでの結果では、およそ70000前後でしたので、少し小さくなりました。

続いて、AIモデルの評価結果に対する実際の日経平均株価と予測値の比較を行います。

下記は、実際の日経平均株価の終値(y__3)とAIモデルの終値に対する予測値(y'__3)を比較したグラフです。

終値 実際の値 予測値 比較 2層Affine構造 1日分 日経平均株価
終値に対する実際の値と予測値の比較(2層Affine構造、1日分の日経平均株価)

グラフの縦軸は日経平均株価([円])を、横軸は評価期間における営業日の日数を表しています。

AIモデルの終値に対する予測値(y'__3)が実際の日経平均株価の終値(y__3)に対して、右方向にズレているように見えます。

続いて、上記の差分を算出し、グラフ化したものが下記となります。

終値 差分 2層Affine構造 1日分 日経平均株価
終値の差分(2層Affine構造、1日分の日経平均株価)

グラフの縦軸は終値の差分([円])を、横軸は評価期間における営業日の日数を表しています。

上記の差分のグラフから、AIモデルの終値に対する予測値は、実際の終値に対してほぼ±800円の範囲で収まっていることが確認できます。

さらに、終値に対するRMSE(Root Mean Squared Error, 二乗平均平方根誤差)を算出すると、320.69円となりました。

残念ながら、これまでの結果とほぼ同じでした。

つまり、AIモデル予測値が実際の日経平均株価に対して遅れていると思われます。

早速、結果に基づいて確認を行うことにしました。

下記は、実際の終値(y__3)と翌営業日の終値に対する予測値(y'__3[翌])を比較したグラフです。

2層Affine 終値 実際 予測値 翌営業日 比較 1日分 日経平均株価
終値に対する実際の値と予測値(翌営業日)の比較(2層Affine構造、1日分の日経平均株価)

続いて、実際の終値(y__3)と翌営業日の終値に対する予測値(y'__3[翌])の差分をグラフにしたものが下記となります。

2層Affine 終値 実際 予測値 翌営業日 差分 1日分 日経平均株価
終値に対する実際の値と予測値(翌営業日)の差分(2層Affine構造、1日分の日経平均株価)

さらに、実際の終値(y__3)と翌営業日の終値に対する予測値(y'__3[翌])のRMSEを算出したところ、21.31円となりました。

結果に対する考察

RNN構造を使う、使わないに限らず、AIモデル予測値が実際の日経平均株価に対して1営業日分遅れていることが確認できました。

この結果は、正しいものなのか、それとも、何かが間違っているのか、全く分かりません。

Neural Network Consoleのバグを疑い、Neural Network Consoleのウェブサイトにてバージョンを確認したところ、以下の通りでした。

  • Neural Network Consoleのバージョン

    • 私が使用しているもの: Neural Network Console version 2.7.8490.25016

    • 最新リリースバージョン: 3.1.0(2024.01.31リリース)

メジャーバージョンが上がっていましたが、リリースノートが見つけられず、詳細は分かりませんでした。

また、exeファイルのサイズは、かなり巨大化しています。

  • exeファイルのサイズ

    • バージョン2.7.8: 1.2GByte

    • バージョン3.1.0: 2.4GByte

折角なのでバージョン3.1.0をダウンロードし、同じ検証を行うことにしました。

現時点でのNeural Network Consoleの最新バージョンは3.1.8762.30564でした。

ちなみに、ダウンロードおよびファイルの解凍にはかなりの時間を要しました。

Neural Network Console version 3.1.8での検証結果

検証結果は、Neural Network Consoleのバージョンに依存せず、同じでした。

  • RMSEの値

    • 実際の終値(y__3)と終値に対する予測値(y'__3): 320.69円

    • 実際の終値(y__3)と翌営業日の終値に対する予測値(y'__3[翌]): 21.31円

ということは、現在の状況は正しいと理解すべきなのでしょう。

それにしても、何故、AIモデルに当日の日経平均株価の情報を入力すると、前営業日の日経平均株価の情報が出力されるのでしょうか。

また、何故、様々な構造のAIモデル、あるいは、説明変数の構成においても、結果がほとんど同じになるのでしょうか。

しばらく考えたいと思います。

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