AI Model: RJFC について
目的
昨年まで実験稼働していた RCKH モデルを停止したので、この機会に別のモデル(コード名 RJFC)を開発して試してみる。
ディープラーニングを用いた RCKH モデルの運用を次の理由で昨年停止しました。
・東証の市場名の再編などがあって、市場カテゴリも使用して学習していた RCKH がそのままでは使えなくなった
・ある程度実験の目的は果たしていたので、再学習するのも面倒だった
・RCKH に使っていた株価のデータは細かい指標も取得していたが有料でそこそこ高かった(年間数万円)
今回新モデル RJFCを開発したのは、お金をかけずに取得できる基本的な始値、終値、高値、安値、出来高のみで予測できるモデルを作成したいと思ったことがきっかけです。
アプローチ
今回は「窓を開けると必ず戻す」法則に着目してみました。特に下図のように下窓が開いたときに本当に窓が戻るのであれば、下窓で買えば必ず儲けが出ることになります。
この法則は本当なのか?
2018/1/4〜2022/9/5 までの4年半の全銘柄の日足422万件のデータを使用して、下方向に3%以上下落して窓が開いたレコードを数えると64,715件ありました。下方向に前日終値より3%以上終値が下落して窓の開く確率は 1.5%程度となります。毎日50〜60銘柄は下方向に3%以上の窓を開けていることになります。
では、開いた窓はどれくらいで埋まる(閉まる)のでしょうか? 閉まるまでの日数の分布をグラフにしました。
※日数は日付の差になっているので、例えば金曜に窓を開けて翌月曜に戻した場合には1日ではなく3日になります。本当は開場日の日数差の方が厳密なのですがいろいろ計算が面倒なので、ざっくり傾向を見るなら単なる日数の引き算でもいいかと。
これを見ると直近で窓を埋める場合と1000日以上かかっている場合の2極化しているようです。なお、1000日以上のところにある高い棒は集計期間中に窓が閉まらなかった銘柄を示しています(本来日数は計算できないのですがグラフ化できるように便宜的に右端に集まるように擬似的な大きな値を与えてあります)。
もう少し詳しく見ていきます。
30日以内に窓埋めする範囲を拡大してみました。すると、2日目で窓埋めする回数が最も多く、ついで1日後、3日後と続きます。窓を開けると窓が埋まるという印象があるのはこのためなのかと思います。
一方で、何ヶ月も埋まらない窓もあることは事実ですので分かりやすいように、
・1週間以内
・2週間以内
・1ヶ月以内
・1ヶ月より長く埋まらない
の4カテゴリに分けて分布を見てみました。
このグラフを見て分かる通り、1ヶ月より長く窓が埋まらない確率は51.3% もあります。窓を埋めるのに何ヶ月も待つというスタンスもあるとは思いますが、個人的には長くても1ヶ月以内に窓を埋めてほしいと思いますので、今回作成する AI モデルも1ヶ月以内に窓を埋められるかどうかを予測することにしました。
さて、窓を1ヶ月以内に埋められるかどうかを適当に予測すると、ちょうど半々くらいになって当てずっぽうと変わらなくなってしまいます。窓を埋めるパターンを見つけられる確率をあげるためには窓を埋められる場合と埋められない場合、どこかに違いがあると仮定してその特徴を探っていくことになります。
今回使用できる変数としては、始値、終値、高値、安値、出来高だけですのでそれらを使用してなんらかの特徴量を作成して AI に学習させることとなります。
例えば、窓の下落率と窓埋め日数には関係があるでしょうか?
これは箱ひげ図というものですが、横軸が下窓を開けた株価の下落率、縦軸が窓を埋めるのにかかった日数の分布となっています。色がついている箱の下端と上端の中に全体の50%のデータが入り、箱の中の横線は中央値を示します。
これを見ると、下落率が大きい(窓が大きい)ほど窓を埋める日数が長くなる傾向が見て取れます。ただし、下落率が9%程度(0.91まで)までは箱も小さく下に集っていますし、中央値の線もかなり下の方にあるため短期で窓が閉まる可能性が高いことを示しています。
別の特徴量の例ですが、窓を開けた日の始値と終値の比率と窓を埋めるのにかかった日数の箱ひげ図です。これを見ると窓は開いたが始値よりも終値が3%以上高かった場合、特に7%以上高かった場合に窓が埋まる確率が他より高くなりそうです。
このようにしてさまざまな特徴量を作成して、あとは AI を学習させることで窓が1ヶ月以内に埋まるパターンをできるだけ高い確率で見つけられるようになっていくはずです。
今回の学習モデルには Light GBM という勾配ブースティングを使用した決定木を用いました。
目的変数は1ヶ月以内に窓が埋まるかどうかの2値分類予測、説明変数は株価の値から作成した34種類の特徴量を使用しました。
機械学習用のデータは最終的に64,715件からスクリーニングした46,525件を用意し、学習用29,776件、学習時検証用7,444件、テスト用9,305件に分けて学習しました。
学習を終えたモデルをテストデータ9,305件で評価したところ下図のような混同行列になりました。
1ヶ月以内に窓を埋めると予測したパターンが予測が 1 になっている列なので、1369 + 3694 = 5063件、そのうち3694件が実際に1ヶ月以内に窓を閉めているので、73% 程度の正解率になります。
もともと当てずっぽうでやると50%くらいの確率になっていたので、だいぶ正解確率が上がったということになります。
この確認をバックテストといいます。
バックテストはあくまでも過去に対するテストですので、未来にもこのモデルが通用するかを実際に確かめるために 2023/10/18 より PoC 運用を開始します。
※2024/5/21 アップデート
現在の窓埋め正解率は 74% 程度ですので、バックテストとほぼ同じ精度になっているようです。つまり、少なくとも時期に依存しないある程度汎用的なモデルになっていると考えられます(値動きの構造や投資の方法が年月をかけて変化するとモデルの再学習が必要になる可能性があります)