分からないことが多すぎる 未来永劫 株価を予測することが可能!? 試行錯誤編
回帰による日経平均株価の予測への挑戦は始まったばかり
前回行った回帰による日経平均株価の予測は、残念な結果となりました。
詳細は、下記を参照ください。
しかし、回帰による日経平均株価の予測への挑戦は始まったばかりです。
今回の記事では、説明変数を増やして、回帰による日経平均株価の予測を行った結果を紹介します。
ちなみに、AIモデルの構造は、前回作成した4層Affineの構造を使用します。
説明変数に5日分の日経平均株価を使用した場合
東京株式市場における1週間に相当する5日分の日経平均株価を説明変数に割り当て、回帰による日経平均株価の予測をAIモデルに行わせてみました。
説明変数と目的変数の関係
説明変数
n~(n+4)日目の日経平均株価(始値、高値、安値、終値)
目的変数
(n+5)日目の日経平均株価(始値、高値、安値、終値)
上記において、nは自然数
つまり、AIモデルは過去5日分の日経平均株価から翌営業日の日経平均株価を予測します。
この場合の学習曲線を以下に示します。
Training errorとValidation Errorは、相変わらず高い数値となっています。
続いて、学習済みAIモデルに対して、2024年2月1日から2024年5月31日の日経平均株価を予想させ、予測値と実際の日経平均株価とを比較しました。
始値の正解値(実際の日経平均株価)とAIモデルの予測値を比較した結果が以下となります。
上記のグラフにおいて、縦軸が株価([円]), 横軸が年月日です。
前回の結果では、AIモデルの予測値が右肩下がりとなっていましたが、今回は右肩上がりでした。
以下、高値、安値および終値に対しても比較した結果を記載します。
検証する前は、実際の日経平均株価のようにジグザグな値動きになることを期待したのですが、見事に裏切られました。
説明変数に割り当てた過去5日分の日経平均株価が不十分である可能性を検証するため、説明変数を過去20日分に増やして結果を確認しました。
説明変数に20日分の日経平均株価を使用した場合
東京株式市場における1カ月に相当する20日分の日経平均株価を説明変数に割り当て、回帰による日経平均株価の予測をAIモデルに行わせてみました。
説明変数と目的変数の関係
説明変数
n~(n+19)日目の日経平均株価(始値、高値、安値、終値)
目的変数
(n+20)日目の日経平均株価(始値、高値、安値、終値)
上記において、nは自然数
つまり、AIモデルは過去20日分の日経平均株価から翌営業日の日経平均株価を予測します。
この場合の学習曲線を以下に示します。
説明変数を20日に増やした場合の学習曲線は、一見すると、5日の場合と比べ各Errorが低下したようにも見えます。
しかし、縦軸のスケールが異なっているからそう見えるだけで、実質はそれほど変わっていません。
続いて、始値、高値、安値および終値に対する正解値(実際の日経平均株価)とAIモデルの予測値を比較した結果を以下に示します。
今度は、AIモデルの予測値が右肩下がりとなりました。
ただし、単純な右肩下がりではなく、2024年2月1日からの数日間は少し上昇しているように見えます。
そこで、説明変数を5日および20日とした場合のAIモデルの予測値から終値のみを抽出し、グラフにしてみました。
上記は、説明変数を5日とした場合のAIモデルが予測した終値のグラフです。
上記は、説明変数を20日とした場合のAIモデルが予測した終値のグラフです。
確かに、説明変数を20日とした場合は、2024年2月1日からの数日間は少し上昇しています。
以上の結果から、どうやら説明変数の期間を増やすことで予測精度が改善しそうだと感じました。
このため、説明変数の期間を40日とした場合も確認しました。
説明変数に40日分の日経平均株価を使用した場合
説明変数の期間を40日とした場合、1日の日経平均株価が4値であるため、パラメーター数が160個となります。
そこで、AIモデルで使用している各AffineのOutShapeパラメーターを100から400に変更しました。
この場合の学習曲線を以下に示します。
続いて、始値、高値、安値および終値に対する正解値(実際の日経平均株価)とAIモデルの予測値を比較した結果を以下に示します。
さらに、終値に対するAIモデルの予測値をグラフにし、下記に示します。
説明変数の期間を40日としたことで、回帰による予測値の複雑性が増しているように見えます。
8層Affine構造 + 説明変数に40日分の日経平均株価を使用した場合
さらに、AIモデルの構造を4層Affineから8層Affineに増やして、説明変数は40日のままで検証を行いました。
下記に、検証で使用した8層AffineのAIモデルの構造図を示します。
8層Affine構造のAIモデルを学習させたときの学習曲線は、下記となります。
学習曲線は、学習初期のErrorが大きすぎて、分かりにくい状況になっています。
私の勝手な推測ですが、8層、かつ、OutShapeパラメーターが400なので、初期Errorが大きくなってしまうと思われます。
各Errorは、緩やかに右肩下がりの状況が続いているようにも見えますが、もしかしたら頭打ちになっているかもしれません。
続いて、始値、高値、安値および終値に対する正解値(実際の日経平均株価)とAIモデルの予測値を比較した結果を以下に示します。
8層Affine構造 + 説明変数40日の組み合わせでは、再び、AIモデルの予測値が右肩上がりの直線になってしまいました。
AIモデルの予測値から終値のみを抽出し、グラフにして確認したものが下記となります。
複雑な値動きをする終値を期待していたのですが、残念ながら単調増加のグラフでした。
しかし、2024年2月1日からの数日間は、AIモデルの予測値が実際の日経平均株価の値と近いような気もします。
そこで、上記の4つのパターンに対して、2024年2月1日から2024年2月7日までの5営業日のみにおける終値の推移を比較してみました。
上記のグラフにおいて、横軸は年月日、縦軸は日経平均株価([円])を表しています。
また、各線の割り当ては、以下の通りです。
各線の割り当て
青色: 実際の日経平均株価の終値
橙色: 4層Affine構造 + 説明変数5日におけるAIモデルが予測した終値
黄色: 4層Affine構造 + 説明変数20日におけるAIモデルが予測した終値
緑色: 4層Affine構造 + 説明変数40日におけるAIモデルが予測した終値
紫色: 8層Affine構造 + 説明変数40日におけるAIモデルが予測した終値
実際の日経平均株価の終値に近いのはどれか、ということですが…。
4層Affine構造 + 説明変数40日(緑色)の値動きはそれらしく見えますが、数値のズレは大きいと感じます。
一方で、4層Affine構造 + 説明変数20日(黄色)は、数値としては一番近そうですが、値動きが単調なのが気になります。
また、2024年2月1日と2024年2月2日の2日間に限定すれば、下記の2つが高い予測精度であると言えそうです。
4層Affine構造 + 説明変数20日(黄色)
4層Affine構造 + 説明変数40日(緑色)
結果を受けて
以上の結果から、私が感じたことをまとめると次の通りです。
結果より、私が感じたこと
説明変数の期間およびAIモデルの中間層の層数と予測精度の関連性が今ひとつ理解できない
いずれにせよ、現状では長期の株価予想は難しそう
仮に数日程度の予想がそれなりの精度で可能ならばバックテストに使える
説明変数にテクニカル指標(移動平均線、等)を加えたらどうなるか
他のAI構造(LSTM, 等)のAIモデルも試してみたい
良く分からないことばかりの状態ですので、引き続き、アレコレ試していきたいと思います。
また、学習データおよび評価データを手作業で用意するのが徐々に面倒になってきたので、別途、専用のPythonプログラムを用意しようと思います。