バックテストで良い戦略を見つけた後にbotterが最初にやるべき残差分析
AlpacaTechの北山です。
前回の記事には想像以上の反応をいただきました。ありがとうございます。
反応の中に、「よくわからなかったけど、とりあえずこれをFableで読ませて、自分の戦略を評価させてみる」みたいなものを見かけました。もう、最近は手法やコードはむしろブログで書くのは無駄で、概念や実務で重要なアプローチを書いておけばよい時代ですね。その時に渡せばいい記事として、もうちょい深掘りをしておきます。
英語圏のクオンツ界隈では"Is this just beta?"(それ、ただのベータでは?)、"Is this just momentum?"(それ、ただのモメンタムでは?)が定型句になっています。
新しい戦略やシグナルを見せると、まずこう聞かれます。Redditのr/quantやr/algotradingでも「新しいシグナルを既知ファクターに回帰して残差を取ったら、エッジが消えた/残った」という報告が定期的に上がっていて、扱いとしては、盛り上がる議論のテーマというより、やって当然のチェック項目です。
そして、この質問に答えるのに高度な数学やライセンスの必要なリスクモデルは要りません。道具は線形回帰一本。必要なのは、自分の戦略のできの悪いコピーを自分で作る、という発想だけです。
一方、日本語のXで「寄与度分解」を検索して出てくるのは、ほぼCPIと日経平均の寄与度でした。海外クオンツでは標準実務なのですが、日本語圏ではほとんど言語化されていないようです。もったいないので、今回はこのクオンツの標準的な実務を、手順から最近の研究の動きまでまとめておきます。
バックテストでいい感じの戦略ができた後の1stアクション
バックテストでいい感じの戦略ができたとしましょう。見つけたに違いない、と思う瞬間です。みんな記憶にあると思います。
そこで喜ぶ前にやる手順がこれです。
- 同じユニバースで、ものすごくオーソドックスな基本戦略を作る。等金額ポートフォリオ、単純なモメンタム上位の買い、市場へのベータ1。そのくらい素朴なものでOK
- 自分の戦略の日次(あるいは週次)リターンを、この基本戦略のリターンに線形回帰する
- R²と残差を見る
R²が高ければ、その戦略は基本戦略の変種です。この基本戦略のセレクションが腕の見せ所で、単純なんだけど、これにちかいんじゃないの?というのを選ぶテクニックが重要になります。
前回、ファンドマネージャーへの評価として「それはあなたのスキルではなく、モメンタムに賭けていただけですね」という言い回しを紹介しましたが、この回帰は同じ評価を自分自身に下すための道具です。凝った特徴量や複雑なモデル、ハイパーパラメータチューニング。その全部を通した出力が、等金額の単純な戦略にR² 0.8で説明されてしまうことは普通にあります。
逆に、残差の側にシャープレシオが残っていれば、そこが基本戦略では説明できない部分、つまり銘柄選択の妙やタイミングの良さです。凝った実装の価値を、全体のシャープレシオではなく残差のシャープレシオで評価していきます。
この考え方自体は新しいものではなく、SharpeのReturns-Based Style Analysisや、ファクター回帰後のresidual alphaとして昔からある枠組みで、多重共線性や残差の系列相関といった解釈上の注意点まで、ひととおり先人が踏んだ地雷が議論されています。定型実務というのは、こういう蓄積があるということです。このあたりも、こういうキーワードを書いておけば、あとは生成AIが調べてくれるはずです😀
残差の読み方
では残差のシャープレシオが高ければ安心かというと、そうでもありません。
残差分析の本当の使い道は、勝ちの説明ではなく負けの説明にあります。全期間で見れば安定してプラスの残差が、特定の局面でだけ崩れているなら、そこがその戦略の構造的な弱点です。そしてこの弱点は、全体のシャープレシオやドローダウンの数字をいくら眺めても見えません。基本戦略の寄与と混ざってしまうからです。回帰で基本戦略の成分を剥がして初めて、負けた月のうち「市場に負けた分」と「自分の工夫が裏目に出た分」を分けて数えられるようになります。
前回書いた外れ値除外(直近ボラティリティ上位5〜10%を切る、直近の急落銘柄を切る)は、実はこの発想の銘柄単位版です。残差が効かないとわかっている領域から、あらかじめ退場しておく。今回の話は、それをポートフォリオ全体と時間方向に広げたものです。残差が崩れる局面を特定できれば、その局面でエクスポージャーを落とすという、最も素朴で最も効くリスク管理につながります。
残差が崩れる「局面」とは何なのか
素朴には、残差の時系列をドローダウンの日付と突き合わせて眺めるだけでも多くのことがわかります。ただ、海外ではこの標準実務そのものが、ここ1〜2年でもう一歩先に進んでいます。残差や寄与度を全期間の平均で見るのではなく、レジーム(市場状態)で条件付けて見る方向です。
たとえば2025年のRegimeFolioという論文は、VIXベースでボラティリティ・レジームを分類すると、セクターベータや銘柄間相関がレジームごとに大きく変わることを定量的に示しています。ベータや相関が変わるなら、当然、同じ戦略の残差の振る舞いもレジームごとに変わります。
また同じ2025年には、Shapley値を拡張してリターンではなくリスクそのものを構成要素に帰属させる枠組みも研究されています。「なぜ負けたか」を分解する道具立ては、アルファには直接関係しないので、最新手法がすぐに論文化されます。現役のアルファはまず論文になりませんが、リスク分析やファクターの研究は、AQRのような著名な実務家チームからもアカデミアからも頻繁に出てくる領域です。
では、レジームとして何を見るか。為替ではボラティリティで条件付けることが多いのですが、株式やマルチアセットではもっと多面的です。
僕がよく使うものを挙げると、
- ファクターリターンの局面(ファーマフレンチなどの代表的なファクターが効いている時期か、崩れている時期か)
- この前紹介したリバーサル・モメンタム
- ボラティリティ(実現、インプライド、短期・長期・イントラデイ)
- デイリーリターンのSkew(これは結構レアかもです)
- 銘柄間の平均ペアワイズ相関と、その上昇モメンタム(短期の平均相関が長期を上回って上昇しているか)
- 市場間・取引所間の相関構造
このあたりです。ただし、全部を見る必要はありません。前回の外れ値除外がボラティリティと短期リバーサルの2つで十分に効いたのと同じで、自分の戦略の残差が反応するレジームは、やってみるとだいたい2、3個に絞れます。単一指標の閾値でも十分実用になります。
さいごに
手順としては、これだけです。自分がこれに似てるんじゃないの?という基本戦略のコピーを作る。回帰して残差を取る。残差のシャープレシオで工夫の価値を測り、残差が崩れる局面をレジームで特定し、その局面でエクスポージャーを落とす。道具は線形回帰と、レジーム指標が2、3個。
次に自分のバックテストで良い数字が出たら、自分の戦略の日次リターンと一緒にこのページを生成AIに投げてください。Fableなら全部やってくれます。
なお、残差で稼げているとして、その次は銘柄やアセットの粒粒の挙動をみていきます。そこもいろいろなテクニックがあるので、まとめていきたいと思います。
こうしたトピックはマケデコというDiscordコミュニティで議論しています。マケデコは株式関連のマーケットAPIを活用し、分析や予測モデルを構築しているコミュニティで、AlpacaTechとJPX総研様とで運営しているものです。興味がありましたら、ぜひご参加ください!
Discussion