🉐

機械学習モデルでシグナルを設計してから気をつけるべきTips

2023/12/03に公開

過去に株式投資(に限らない内容で書いてますが)シグナルのスコア設計方法や課題設計の仕方を紹介してきましたが、一点、紹介していないテクニックがあったので、マケデコアドベントカレンダー2023のネタとして記載します。ここに記載するTipsの大きなコンセプトは「あらかじめ回避できそうな不必要なリスクは取らない」ということになります。

マーケットにおいて、いくつか過去の観測からわかっていることがありますが、その中でもリターンを最大化するためではなく、ドローダウンを抑えるために必要なテクニックに該当するかと思います。

なお、ここで紹介するリスクもモデルの中で考慮しているから、リスク込みで動かすという考え方もあるのですが、たとえばファクターニュートライズなどのリスクを消す手法を採用していたとしても、このテクニックは追加で検討する価値があります。

というのも、通常のファクターニュートライズは線形モデルを利用するため、どうしても外れ値の部分で効果が弱い(大多数の成分に引っ張られる)ためです。ここで紹介する手法はダイレクトにシグナルをいじるので、リスクコントロールもダイレクトに行うことができます。

なので、リスク考慮済みのモデルを設計している方もアプローチの違いを試してみる価値があるのではないかと思います。

直近ボラティリティが全体の銘柄のなかで非常に大きくなっている銘柄には投資しない

まずはボラティリティに関する部分です。このボラティリティは株式分析に利用する特徴量の中ではめずらしく非常に強い自己相関があります。つまり、直近ボラティリティが高い銘柄はほぼ確実に未来もボラティリティが高いことになります。ボラティリティが高い銘柄は簡単に言うと、上昇するにしても、下落するにしても、大きく動くことになります

ボラティリティはいくつか計算方法がありますが、ここではもっとも計算が簡単な 1dayリターンの時系列の標準偏差 と定義します。過去に計算方法とかは株式分析チュートリアルとかに記載したので参照ください。

https://japanexchangegroup.github.io/J-Quants-Tutorial/#anchor-2.7

大きな価格変動は一般的に多数の値動きから予測モデルをつくるMLBotのようなアプローチでは外れ値に該当することが多く、その部分をうまく扱えるモデルができている可能性はかなり低いと想定されます。つまり直近ボラティリティは取る必要がないリスクです。

直近ボラティリティをどのくらいを直近とするかは難しいですが、直近10営業日から20営業日程度で計算するのがいいのではないかと思います。シンプルに直近20営業日のボラティリティを計算して、上位5-10%は投資対象から除外するだけでもいいし、長期ボラティリティと直近ボラティリティを比較して、直近ボラティリティがぶち上がっているものを除外するアプローチでもいいと思います。

なお、低ボラ効果により、パラメータチューニングやりすぎるとめちゃくちゃシャープレシオが伸びてしまうことがあるので注意してください。

直近リバーサル成分が外れ値的に大きくなっている銘柄にはできるだけ投資しない

リバーサル(株価の下落幅)は最も株式投資で収益貢献が高いファクターになるので、ここは賛否が分かれるアプローチだとおもいますが、基本的にはリバーサルの外れ値は投資対象から除外するのが安全だと考えています。

これもボラティリティと同じく、直近5日営業日から10営業日のリターンを計測して下位5-10%を投資対象から除外するようなアプローチになります。

なお、リバーサルを狙いに行くモデルを意図的に作っているのであれば、話は別です。というか、普通にリターンだけで学習させるとリバーサル成分をかなり利用する(SHAPやImportanceでも確認可能)モデルができあがるのですが、効果が高いリバーサル成分は長期リバーサル成分の方です。ただ、短期的に大きく下落している銘柄も長期リバーサル成分(200営業日のリターンなど)としても普通に特徴量を作るとカウントされてしまうので、短期リバーサル成分の外れ値を意図的に抜いてあげるというアプローチになります。

一般的にリバーサルを狙いすぎるモデルに対するドローダウン抑制に非常に効果がありますが、リターンもかなり減ります。実際の効果はモデル特性に大きく関係するので、バックテストで実施してみて、月間リターンのシャープレシオを見てみるのがいいと思います。

時価総額ファクターのファクターローテーションにどのように対応するかを常に意識しておく

実運用をしてみると、おそらくこれがたぶん最も恐ろしい長期ドローダウンの原因であることに多くの人が気づくと思います。僕もいろんなプロジェクトで痛い目を見てきました。

TOPIXのニューインデックスシリーズのSmallとTOPIX500、TOPIX100などの強い時期を比較するとわかりやすいのですが、これらが強い時期というのはかなり長期間でローテーションします。短いときは1、2ヶ月ですが長いときは半年、1年くらいに小型株優位、大型株優位の相場続きます。

https://www.jpx.co.jp/markets/indices/line-up/files/fac_12_size.pdf

ここで気をつける必要があるのは、時価総額の分布はべき乗則に近い分布をとっているため、時価総額ベースで見ると上位100銘柄の時価総額が極めて大きく、例えばTOPIX 1000に対してランダムに投資しても出来上がるのは小型株モデルになるということです。意図的に大型株への投資を増やさない限りMLBotで作るモデルはほぼ小型株優位になります。

つまり、普通に大型株相場でドローダウンが拡大するリスクが潜在しているということですね。さらに、長期的には小型株効果が存在するため、バックテストでは小型株モデルは良い結果が出てしまいます。

ただし、自分が動かしているモデルは小型株モデルであることを意識しておくことで、いろいろとできる対策が増えますので、これもケアしておくにこしたことはないです。

まとめ

機械学習モデルでシグナルを設計してから気をつけるべきTipsをいくつか紹介しました。これらの記載したテクニックはやりすぎるとカーブフィッティングになるので、あまりやりすぎないほうがいいです。ただし、上に書いたことは、マーケットにおいて長く観測されてきたことであり、これを気にしないのも違うと思うので、どれくらいこれらのテクニックを利用するかはモデル設計者の力量次第になりそうですね。

これらのトピックはマケデコというDiscordコミュニティで扱っております。マケデコは株式関連のマーケットAPIを活用し、分析や予測モデルを構築しているbotterのDiscordコミュニティをJPX総研様、AlpacaJapanの協賛で運営しています。もし、興味ありましたらぜひご参加ください!

https://market-api.dev/

Discussion