部品から動く最適化器へ
紙の上の最小分散ポートフォリオにはルールがありません。実際の運用はロングオンリーで全額投資、取引にはコストがかかります。そのルールの効果を見る唯一の方法は、最適化器を自分で作り、見ていない日でテストすることです。この総仕上げでは、スキルの3つの考え方を使います。ループには勾配降下法、ロングオンリーの予算ルールには射影、取引には L1 の上限です。必要なのは NumPy だけで、ライブラリのソルバーは使えません。
射影勾配降下法は、分散 wᵀΣw(勾配は 2Σw)に通常の勾配ステップを踏み、その結果を射影 Π で最も近いロングオンリー・全額投資のポートフォリオに戻します。ステップ幅 1/L(L=2λₘₐₓ(Σ) はヘッセ行列の最大固有値)は常に安定です。{w≥0, Σw=1} への射影には厳密な答えがあります。ベクトルを降順に並べ、累積和から1を引き、並べた値がなお累積和を k で割った値を上回る最後の位置 ρ を見つけ、θ をその累積和を ρ+1 で割った値とし、max(v-θ,0) を返します。すべてのウェイトを同じ量だけずらし、負になるものをゼロで切ります。
ターンオーバーは取引の L1 ノルム ‖w-w₀‖₁ です。実行可能性を保ったまま上限 τ 以下に抑えるには、現在のポートフォリオ w₀ から最適化器の目標 wₜ へ向かう道のりのうち割合 α だけ進みます。ロングオンリー・全額投資の2つのポートフォリオを結ぶ線分上の点もロングオンリー・全額投資で、L1 ノルムは線分に沿って線形に増えるので、取引量はちょうど min(差,τ) になります。各リバランスにはターンオーバーの c 倍のコストがかかり、バックテストはそれを保有ブロックの最初の日から引きます。ブロックのウェイトはそれ以前の日だけを使い、報告する結果はつなげたコスト控除後の標本外の日のボラティリティとリターンです。
- 射影勾配降下法:勾配ステップ 2Σw(幅 1/L)の後に単体への射影。
- ターンオーバー上限:目標へ向かう割合 α=min(1,τ/差) だけ進み、ポートフォリオは実行可能なままです。
- 誠実なバックテスト:直近
window日で推定し、step日保有し、コストを引いて、つなげた標本外の数値を報告します。
ラボ:採点される内容
- 単体への射影20点
- 射影勾配降下法25点
- ターンオーバー上限15点
- コスト付きローリング・バックテスト25点
- 方針の比較15点