シャープレシオの統計的な罠
252個の日次リターンから年率シャープレシオ1.5が得られたとします。これは有意でしょうか。IID正規近似では、年率単位の標準誤差は0.09ではなく約 1.00、近似95%信頼区間は [-0.46, 3.46] です。
この広い区間は、観測頻度のシャープレシオ用に導出された式へ、年率シャープレシオを直接代入するという典型的な誤りを示します。
本章では三つの問いを分けます。
- 一つの戦略のシャープレシオはどれほど不確実か。
- 事前に指定した基準を上回る確率はどれほどか(PSR)。
- 多数の候補から選んだ後でも基準を上回るか(DSR)。
どの統計量も、ライブ運用での成功を証明するものではありません。リーケージ、誤った価格、取引コストの欠落、検証データの反復利用は別に検査する必要があります。
1. 一つのSharpe、二つの単位
各期の超過リターンについて:
SR_period = mean(excess return) / std(excess return)
SR_annual = sqrt(A) * SR_period
A は年間の期間数で、日次なら通常252、月次なら12です。IID正規リターンの下で、よく使われる大標本近似は:
SE(SR_period) ≈ sqrt((1 + SR_period² / 2) / N)
推定値を sqrt(A) 倍するなら、標準誤差も同じだけ拡大します。年率単位では:
SE(SR_annual) ≈ sqrt((A + SR_annual² / 2) / N)
最初の式に年率シャープレシオをそのまま入れてはいけません。
日次リターンの例
以下は 推定値 ± 1.96 × SE による近似区間であり、保証ではありません。
| 年率Sharpe | 日次観測数 | 年率SE | 近似95%区間 |
|---|---|---|---|
| 1.0 | 252 | 1.00 | [-0.96, 2.96] |
| 1.0 | 756 | 0.58 | [-0.13, 2.13] |
| 2.0 | 252 | 1.00 | [0.03, 3.97] |
| 2.0 | 756 | 0.58 | [0.86, 3.14] |
観測数が増えれば区間は狭くなります。年率表記へ変えるだけでは情報は増えません。リターンが重複する場合や自己相関を持つ場合、IID区間はなお楽観的になり得ます。Lo(2002)は系列相関がSharpe推論を変える理由を示しています。
2. 単位をそろえた実装
from math import sqrt
from statistics import NormalDist
normal = NormalDist()
def annualized_sharpe_se(sr_annual: float, n: int, periods: int = 252) -> float:
"""IID正規近似。出力は年率Sharpe単位。"""
return sqrt((periods + sr_annual**2 / 2) / n)
def annualized_sharpe_ci(
sr_annual: float, n: int, periods: int = 252, confidence: float = 0.95
) -> tuple[float, float]:
se = annualized_sharpe_se(sr_annual, n, periods)
z = normal.inv_cdf((1 + confidence) / 2)
return sr_annual - z * se, sr_annual + z * se
依存パッケージ不要の検証スクリプトをダウンロードし、verify-sharpe-statistics.py として保存してください。python3 verify-sharpe-statistics.py を実行すると、年率換算と下記PSR/DSRの式を検証できます。
3. PSR:明示した基準を上回る確率
Probabilistic Sharpe Ratioは、標本長、歪度、尖度を考慮し、真のSharpeが基準 SR* を上回る確率を推定します。
PSR(SR*) = Φ(
(SR - SR*) * sqrt(N - 1)
/ sqrt(1 - skew * SR + ((kurtosis - 1) / 4) * SR²)
)
ここで尖度は、正規分布で3となる通常の尖度であり、超過尖度ではありません。SR と SR* は同じ頻度でなければなりません。安全な実装では、両方の年率値を観測頻度へ戻してから式に入れます。
年率Sharpe 1.5、252個のIID正規日次リターン、基準0の場合、PSRは約 93.2% です。片側95%の基準には届きません。また、これは単一試行の計算で、候補選択の影響を含みません。
4. DSR:勝者を選ぶバイアス
多くの戦略を試し、最高Sharpeだけを報告するなら、適切な帰無仮説の基準は必ずしも0ではありません。BaileyとLópez de PradoのDeflated Sharpe Ratioは、試行群のSharpeの期待最大値を基準にしたPSRです。
論文の式1は、試行分布の平均 μ_SR を含む一般的な期待最大値を示します。しかし式2で定義される標準DSRの帰無仮説は真のSharpeがゼロです。その棄却基準では平均項をゼロに置き、K 個のほぼ独立な試行Sharpeのばらつき σ_SR を使います。
SR* = σ_SR * [
(1 - γ) * Φ⁻¹(1 - 1/K)
+ γ * Φ⁻¹(1 - 1/(K * e))
]
γ ≈ 0.5772 はオイラー・マスケローニ定数で、その後 DSR = PSR(SR*) を計算します。ここに試行Sharpeの経験平均を加えると、標準的なゼロ平均帰無仮説のDSRではなく、別の基準検定になります。
重要な条件は二つあります。
- DSRには、パラメータ数だけでなく、試行Sharpeのばらつきが必要です。
- 相関の強いバリエーションは独立試行ではありません。論文は有効独立試行数の推定も扱っています。1またはグリッド総数を機械的に使うと補正を誤る可能性があります。
- 試行が一つだけなら多重検定の基準はゼロで、DSRはゼロ基準のPSRと同じです。
失敗を含む全試行を研究記録に残してください。それがなければ、期待最大Sharpeの基準を誠実に再構築できません。
5. Sharpeレポートに必要な項目
| 項目 | 理由 |
|---|---|
| リターン頻度と年率化係数 | 日次と年率の混同を防ぐ |
| 非重複の観測数 | 実質的な標本数を示す |
| 標本Sharpeと不確実性の手法 | 点推定だけでは誤差が見えない |
| 歪度と通常/超過尖度の区別 | PSRの定義を一致させる |
| 全試行または有効独立試行 | 選択補正を監査可能にする |
| コスト、スリッページ、データ日付 | 統計推論と回測の現実性を分ける |
| 未使用の検証データ方針 | 反復利用した検証データは学習データになる |
「Sharpeが3を超えれば必ず過学習」「ライブSharpeは回測の半分」といった一律の基準は統計法則ではなく、追加調査のきっかけにすぎません。
6. 判断チェックリスト
- リターンの整列、価格、コーポレートアクション、未来情報を確認する。
- 手数料、スプレッド、スリッページ、借株費用、市場インパクトを差し引く。
- Sharpeの頻度を明記し、推定値と不確実性を一緒に変換する。
- IID式を使う前に自己相関と重複観測を調べる。
- 結果を見る前に決めた基準に対してPSRを計算する。
- 全試行を記録し、複数候補から選択する場合はDSRを使う。
- 本当に未使用の検証期間を保ち、その後のライブ証拠は別に報告する。
PSRとDSRは限定された統計的問いへの回答です。証拠のフィルターであり、運用開始の許可ではありません。
一次資料と次の学習
- Andrew W. Lo, The Statistics of Sharpe Ratios(2002):標本分布と系列相関の影響。
- David H. Bailey、Marcos López de Prado, The Deflated Sharpe Ratio(2014):PSR、期待最大値、多重検定補正。
- William F. Sharpe, The Sharpe Ratio(1994):定義と測定期間の整合性。
- 数学・統計の基礎
- バックテストシステムの落とし穴