디플레이티드 샤프 비율: 백테스트 '승자' 중 다중 검정에서 살아남는 것은 몇 개인가?
"환상 없는 백테스트" 시리즈의 일부입니다.
📄 이 글은 하나의 연구 논문으로 발전했습니다. 아래의 모든 숫자는 통제된 실측값을 구축하는 하나의 결정론적 스크립트에서 나옵니다 — 순수 노이즈 서치, 엣지를 심어둔 서치, 그리고 실제 상관된 파라미터 그리드를 만든 다음, 여기에 디플레이티드 샤프 비율, Harvey-Liu 다중 검정 헤어컷, White의 Reality Check / Hansen의 SPA를 실행하여 각 방법의 거짓 발견율과 검정력을 직접 측정합니다. 논문은 deflated-sharpe.marketmaker.cc에서 온라인으로(인터랙티브 버전 + PDF) 읽을 수 있으며, 코드와 데이터는 github.com/suenot/deflated-sharpe-search에 있습니다.
파라미터 스윕을 돌립니다. 빠른 길이 16개, 느린 길이 40개, 이동평균 크로스오버 조합 640개. 그리드가 끝나고 셀 하나가 빛납니다: 연율화 샤프 3.9, 단일 검정 p-value . 유의성의 0이 열두 개. 무언가를 찾아낸 것입니다.
아니면 아무것도 찾지 못했고, 서치가 당신을 위해 그것을 찾아낸 것입니다.
파라미터 서치는 검정이 아닙니다. 그것은 N번의 시도 중 가장 운이 좋았던 것을 찾아내는 기계이며, 더 많은 시도를 줄수록 그 승자는 더 운이 좋아 보입니다 — 그 아래 진짜 엣지가 있든 없든 상관없이. best-of-N 샤프는 선택에 의해 부풀려집니다 — 천 명 중 가장 키가 큰 사람이 커 보이는 것과 같은 방식으로: 큰 키가 실재해서가 아니라, 당신이 검색을 했기 때문입니다. 승자 옆에 인쇄된 단일 검정 통계 — p-value, t-통계량, "유의한가?" — 는 하나의 사전 등록된 가설을 위해 설계된 것입니다. 서치의 생존자에게 그것을 먹이면 매번, 자신 있게, 거짓말을 합니다.
이 글은 그것이 얼마나 심하게 거짓말을 하는지 정확히 측정한 다음, 그것을 바로잡는 세 가지 도구를 측정합니다. 요점 전체는 통제된 실측값입니다: 우리는 답을 알고 있는 수익률을 생성합니다 — 때로는 엣지가 전혀 없는 순수 노이즈, 때로는 알려진 강도로 심어둔 엣지 — 그래서 "이 방법이 옳았는가?"가 판단이 아니라 사실이 되도록 합니다. 여기 결론부터 먼저 제시합니다. 정직한 답이 항상 "발견 없음"인 known-null 서치에서, 각 검정이 늑대가 나타났다고 외치는 빈도는 다음과 같습니다:
| 검정 | known-null 서치에서의 거짓 발견율 | 판정 |
|---|---|---|
| 나이브 "최고 샤프가 유의한가?" | 1.000 | 매번 발견을 선언함 |
| Deflated Sharpe Ratio (DSR ≥ 0.95) | 0.001 | 통제됨 |
| Harvey-Liu 헤어컷 — Bonferroni | 0.057 | ~통제됨 |
| Harvey-Liu 헤어컷 — Holm | 0.057 | ~통제됨 |
| Harvey-Liu 헤어컷 — BHY | 0.007 | 통제됨 |
| White's Reality Check (부트스트랩) | 0.022 | 통제됨 |
서치당 전략 1,000개, 각 1,000개의 관측치, 2,000번의 독립적인 null 서치, 모든 곳에서 진짜 샤프 = 0. 합성 iid 정규분포 수익률, seed 0, α = 0.05, 연 252개 기간. 나이브 검정의 거짓 발견율은 높은 것이 아닙니다 — 정확히 1입니다.
따끔할 때까지 첫 번째 행을 읽으십시오. 순수한 노이즈에서 5%의 빈도로 발동해야 마땅한 검정이 **100%**의 빈도로 발동합니다 — 순수한 노이즈를 보여준 것이 아니라 순수한 노이즈 천 번 추출의 최댓값을 보여줬기 때문이며, 천 명의 동전 던지기꾼의 최댓값은 항상 천재처럼 보입니다. 나머지 모든 행은 이것을 알고 이를 보정하는 방법입니다. 이것이 이 글 전체입니다: 첫 번째 행이 왜 1.000인지, 나머지는 왜 그렇지 않은지, 그리고 좋은 방법들조차 정직함을 유지하기 위해 두 번째 보정이 필요한 단 하나의 지점(마지막 절)이 어디인지.
1막 — 함정: 서치는 무(無)에서 샤프를 제조한다

가장 깨끗한 형태의 함정부터 시작합니다. 수익률이 독립적인 표준정규분포 노이즈인 전략 개를 생성합니다 — 드리프트도 없고, 스킬도 없고, 모두의 진짜 샤프가 정확히 0입니다. 각각 개의 관측치를 가집니다. 이제 모든 파라미터 서치가 하는 일을 합니다: 최선의 것을 남깁니다.
1000개 중 최선의 관측치당 샤프는 평균 0.1027이며, 이를 연율화하면 1.63입니다(도출: ). 결코 작은 숫자가 아닙니다. 연율화 샤프 1.63은 전략에 자금이 투입되고, 논문으로 작성되고, 배분이 이루어지게 만드는 종류의 결과입니다. 이것은 드리프트를 0으로 맞춰놓은 난수 생성기에서 나온 것입니다.
이제 그 승자를 나이브 유의성 검정에 넘깁니다 — 모든 백테스트 라이브러리가 공짜로 출력해주는 바로 그것입니다. 샤프를 t-통계량으로 변환하고(), 단측 p-value를 구하고, 이면 발견이라고 부릅니다:
이 노이즈 승자들의 단일 검정 p-value 중앙값은 0.000686입니다 — 엣지가 전혀 없는 전략치고는 "유의성"의 0이 세 개입니다. 그리고 2,000번의 독립적인 null 서치 전체에서, 나이브 검정은 모든 경우에서 발견을 선언합니다: 거짓 발견율 1.000. "부풀려졌다"가 아닙니다. "조금 높다"도 아닙니다. 구조상 단일 귀무가설에서 많아야 5%의 확률로만 맞는 검정이, 서치의 승자에게는 100%의 확률로 틀립니다.
이름을 붙이고 나면 그 메커니즘은 그리 은밀하지 않습니다. 나이브 검정은 "귀무가설 하에서 이 샤프가 우연히 나올 수 있었는가?"를 묻습니다 — 데이터를 보기 전에 고른 전략에게는 공정한 질문입니다. 하지만 당신이 이 전략을 고른 것은 그것이 천 개 중 가장 높은 샤프를 냈기 때문입니다. 당신은 최댓값에 조건을 건 것이고, 최댓값의 표본추출 분포는 단일 추출의 표본추출 분포와는 전혀 다릅니다. 이것은 우리의 미래 참조 편향 분류가 반대편에서 진단했던 것과 동일한 질병입니다 — 그곳에서는 한 바(bar)의 누출이 노이즈에서 샤프 15를 제조했고, 여기서는 누출이 전혀 없이 순전히 선택만으로 서치가 노이즈에서 샤프 1.63을 제조합니다. 메커니즘은 다르지만 증상은 동일합니다: 근사해 보이지만 아무 의미도 없는 샤프.
숫자 1.63이 중요하니 기억해 두십시오. 이것이 이 서치의 노이즈 천장입니다: 엣지가 0인 전략 1,000개 중 가장 운 좋은 것이 낼 것으로 기대해야 할 샤프입니다. 서치의 승자에 대한 정직한 검정이라면 그것을 0과 비교할 것이 아니라 바로 이 값과 비교해야 합니다 — 천 번을 들여다볼 때 운만으로 만들어내는 결과와 말입니다.
2막 — 도구 상자: 서치의 값을 매기는 세 가지 방법

독립적으로 등장한 세 개의 연구 프로그램이 모두 동일한 해법에 도달합니다: 승자를 0과 비교하는 것을 멈추고, 이 정도 크기의 서치가 운만으로 만들어내는 것과 비교하기 시작하는 것입니다. 이들이 다른 점은 그 비교를 구축하는 방식입니다.
PSR과 디플레이티드 샤프 비율(Bailey & López de Prado, 2012 / 2014)
**확률적 샤프 비율(Probabilistic Sharpe Ratio, PSR)**은 "샤프가 양수인가?"보다 더 날카로운 질문을 던집니다. 표본 길이와 수익률의 형태(왜도, 팻테일)가 주어졌을 때, 진짜 샤프가 벤치마크 를 초과할 확률은 얼마인가를 묻습니다.
여기서 는 표준정규분포의 CDF, 는 왜도, 는 non-excess 관례의 첨도입니다(정규분포 ⇒ ; 여기에 3을 더하지 않고 초과 첨도를 대입하면 디플레이션이 잘못 나옵니다). 으로 두면 PSR은 그냥 유한표본 유의성 검정이 됩니다. 마법은 를 잘 선택하는 데 있습니다.
디플레이티드 샤프 비율은 벤치마크를 0이 아니라 전체 서치의 기대 최대 샤프로 두고 계산한 PSR입니다:
여기서 는 N개 시행 샤프 전체에 걸친 분산이고(서치 자체가 만들어낸 분산), 는 오일러-마스케로니 상수이며, 두 개의 역정규분포 항은 개의 표준정규 추출의 기대 최댓값에 대한 극값이론(Extreme-Value-Theory) 근사입니다. 코드로 보면 인상적이라 하기엔 너무 짧습니다:
def expected_max_sharpe(sr_variance, N, mean_sr=0.0):
"""E[max of N independent SR estimates ~ N(mean_sr, sr_variance)]
(Bailey & LdP 2014)."""
g = EULER_MASCHERONI # 0.5772156649
a = norm.ppf(1.0 - 1.0 / N) # Z^{-1}(1 - 1/N)
b = norm.ppf(1.0 - 1.0 / (N * E)) # Z^{-1}(1 - 1/(N e))
return float(mean_sr + np.sqrt(sr_variance) * ((1.0 - g) * a + g * b))
그러면 DSR은 단순히 그 디플레이트된 바를 적용한 PSR입니다:
def deflated_sharpe(sr_max, sr_estimates, T, skew=0.0, kurt=3.0, N=None):
"""DSR = PSR(sr_max, SR0). Returns (dsr, sr0)."""
v = float(np.asarray(sr_estimates).var(ddof=1)) # dispersion of the search
m = float(np.asarray(sr_estimates).mean())
if N is None:
N = len(sr_estimates)
sr0 = expected_max_sharpe(v, N, mean_sr=m)
return psr(sr_max, sr0, T, skew, kurt), sr0
DSR은 확률입니다. 일 때 발견이라고 선언합니다: 승자의 진짜 샤프가 운으로 낼 수 있는 최선의 기대치를 95% 신뢰도로 능가한다는 뜻입니다. 에 박혀 있는, 결과를 좌우하는 가정을 눈여겨보십시오: 개의 시행이 독립적이라고 취급된다는 점입니다. 5막 전체가 그렇지 않을 때 무슨 일이 일어나는지를 다룹니다.
Harvey-Liu 헤어컷(2015)
Harvey와 Liu는 동일한 문제를 다중 검정 p-value 보정을 통해 공략합니다 — "M번의 검정을 돌렸으니, 나 자신을 속이지 말자"를 위한 고전적인 장치입니다. 개의 단일 검정 p-value 을 정렬하고 이를 부풀립니다:
Bonferroni는 무딘 도구입니다(모든 p-value에 을 곱해 어떤 위양성이든 그 확률을 통제합니다); Holm은 이를 일률적으로 더 강력하게 만든 step-down 사촌입니다. 세 번째인 **Benjamini-Yekutieli(BHY)**는 거짓발견율 — 기각한 것들 중 틀린 것의 기대 비율 — 을 통제하며, 결정적으로 검정들 사이의 임의의 종속성 하에서도 이를 해내는데, 분자에 조화급수 정규화 항을 사용합니다:
이 는 1,000번의 시행이 독립적이라고 가정하지 않는 대가로 BHY가 청구하는 값입니다 — 처럼 증가하는 배수로 FDR 임계값을 부풀립니다. "헤어컷" 자체가 핵심 지표입니다: 보정된 p-value를 다시 샤프로 변환하고, 원래 샤프에서 얼마를 깎아내야 했는지를 보고합니다. 헤어컷 100%는 승자가 다중 검정만으로 완전히 설명된다는 뜻이고, 15%는 대부분 살아남는다는 뜻입니다.
White의 Reality Check와 Hansen의 SPA(2000 / 2005)
세 번째 도구는 분포에 대한 가정을 전혀 하지 않습니다. White의 Reality Check는 모든 규칙의 실제 수익률을 가져와 규칙 전체에 대한 최댓값 통계량을 구성하고, 그 귀무분포를 직접 부트스트랩합니다:
여기서 는 규칙 의 벤치마크 대비 평균 성과입니다. 수익률을 정상 부트스트랩(stationary bootstrap, Politis-Romano — 무작위 길이의 블록을 사용해 리샘플링 후에도 계열 상관이 살아남도록 함)으로 리샘플링하고, 구조상 귀무가설을 만족시키도록 각 추출을 재중심화하고, 추출마다 최댓값을 다시 계산하며, 관측된 값을 능가하는 부트스트랩 최댓값의 비율을 p-value로 보고합니다. Hansen의 SPA는 두 가지 방식으로 RC를 정교하게 다듬습니다: 스튜던트화(각 규칙의 평균을 자신의 표준오차로 나누어, 분산이 큰 규칙 하나가 최댓값을 독차지하지 못하게 함)와, 귀무가설의 일관되고 표본 의존적인 재중심화입니다. 우리 구현은 스튜던트화는 추가했지만 완전한 일관 재중심화 단계는 구현하지 않았습니다 — 그래서 이 글이 SPA형 p-value를 보고할 때마다, 이를 완전한 Hansen SPA가 아니라 스튜던트화된 Reality Check로 읽으십시오. DSR이 "이 승자는 이 서치 안에서 특별한가?"를 묻는 반면, Reality Check는 "내가 시도한 규칙 수를 정직하게 반영한 후에도 최선의 규칙이 현금을 이기는가?"를 묻습니다 — 그리고 시행 횟수를 세는 일 없이 부트스트랩을 통해 상관된 규칙을 자연스럽게 다룹니다. 이 구분을 기억해 두십시오. 마지막 절이 바로 이것에 달려 있습니다.
3막 — 캘리브레이션이 증명의 전부다

아무것도 발견하지 않는 방법 또한 거짓 발견율이 0이 될 것입니다 — 그리고 쓸모가 없을 것입니다. 그래서 이 도구들에 대한 유일하게 의미 있는 검정은 양면적인 것입니다: known-null 데이터에서는 거짓 발견을 이하로 통제해야 하고, known-edge 데이터(다음 절)에서는 여전히 발동해야 합니다. 이번 절은 그 전반부입니다.
각각 1,000개의 제로 엣지 전략에 대해 2,000번의 독립적인 서치를 돌리고, 각 방법이 발견을 선언하는 빈도를 셉니다. 그 횟수를 2,000으로 나눈 것이 거짓 발견율입니다 — 그리고 진실이 엣지 없음이므로, 모든 발견은 거짓입니다:
| 검정 | 거짓 발견율 (α = 0.05) |
|---|---|
| 나이브 유의성 검정 | 1.000 |
| Deflated Sharpe Ratio | 0.001 |
| Harvey-Liu — Bonferroni | 0.057 |
| Harvey-Liu — Holm | 0.057 |
| Harvey-Liu — BHY | 0.007 |
| White's Reality Check | 0.022 |
원칙에 입각한 모든 방법이 5% 선 근처 또는 그 위에 자리 잡습니다 — 두 FWER 헤어컷은 약간 위, DSR/BHY/RC는 그 아래 — 반면 나이브 검정은 100에 자리 잡습니다. (Bonferroni와 Holm이 여기서 동일한 0.057을 내는 것은 우연이 아닙니다: 단 하나의 최선 전략에 대해 Holm의 첫 단계는 이며, 이는 구조상 Bonferroni와 동일하므로, 둘은 하나의 확인이지 두 개가 아닙니다.) 하지만 이 연구 전체에서 가장 깊은 숫자는 이 표에 있지 않습니다 — DSR 열을 만들어내는 디플레이트된 벤치마크입니다. null 서치 전체에 걸쳐 평균을 내면, 는 관측치당 0.1030이 나오고, 이는 연율화하면 1.63입니다(도출: ) — 평균 노이즈 승자가 내는 것과 동일한 1.63입니다(1.63). 이것은 우연이 아닙니다. 전체 아이디어가 작동하고 있다는 뜻입니다:
디플레이트된 바는 노이즈 천장에 정확히 자리 잡습니다. DSR은 서치의 승자에게 0을 이기라고 요구하지 않습니다. 이 정도 크기의 서치에서 운만으로 만들어낼 수 있는 최고 점수를 이기라고 요구합니다 — 여기서는 연율화 1.63입니다. 노이즈 천장과 딱 맞아떨어지는 승자는 DSR ≈ 0.5(동전 던지기)를 기록하며, 이것이 평균 null DSR이 작은 값이 아니라 0.495인 이유입니다. 발견이 되려면, 승자는 1.63을 넘어서야 하고, 그 이상이어야 합니다 — PSR을 0.95 너머로 밀어붙이기에 충분할 만큼.
이것은 전체 논의의 틀을 다시 짭니다. 나이브 검정은 0으로부터의 거리를 측정합니다. 모든 서치가 그 바를 사소하게 통과하므로 이 검정은 쓸모가 없습니다. DSR은 노이즈 천장으로부터의 거리를 측정하며, 그 바를 통과하는 것은 정말로 어렵습니다 — 마땅히 그래야 하듯이 말입니다. Harvey-Liu 헤어컷과 Reality Check는 서로 다른 경로로 동일한 통제에 도달하며(BHY는 배율, RC는 부트스트랩 최댓값 분포), 같은 이웃에 착지합니다: 0.001에서 0.057, 근처 또는 그 값입니다. Bonferroni/Holm의 0.057은 5% 선을 살짝 넘습니다만, 아주 조금입니다: 2,000번의 몬테카를로 서치에서 0.05 근처 FDR 추정치의 표준오차는 약 0.005이므로, 0.057은 보다 대략 표준오차 1.4개 위에 있습니다 — 이는 몬테카를로 노이즈이지 보장이 깨진 것이 아닙니다. "FWER를 통제한다"는 것은 애초에 에서 정확히 맞아떨어지는 약속이 아니라 점근적 약속입니다.
4막 — 검정력: 진짜 엣지를 여전히 지켜내는가?

거짓 발견을 통제하는 것은 검정의 절반에 불과합니다 — 모든 것을 기각하는 편집증적인 방법은 완벽한 0.000을 기록하지만 무가치합니다. 나머지 절반: 진짜 엣지가 실제로 있을 때, DSR이 그것을 찾아내는가?
하나를 심습니다. 1,000개 전략으로 이루어진 필드에서, 그중 25개에게 알려진 강도의 진짜 엣지를 부여하고 나머지는 노이즈로 남긴 다음, 서치를 돌려 DSR이 승자를 발견으로 표시하는지 묻습니다. 심어둔 엣지를 약한 것에서 강한 것까지 스윕하면 검정력이 깔끔한 S자 곡선을 그립니다(위양성률은 시종일관 ~0으로 유지됨):
| 심어둔 진짜 샤프 (연율화) | DSR 검정력 | DSR 위양성률 |
|---|---|---|
| 0.79 | 0.005 | 0.000 |
| 1.27 | 0.090 | 0.000 |
| 1.90 | 0.651 | 0.000 |
| 2.54 | 0.998 | 0.000 |
| 3.17 | 1.000 | 0.000 |
곡선이 어디서 꺾이는지를 보십시오. 노이즈 천장 아래 — 진짜 연율화 샤프 0.79, 1.63보다 한참 낮음 — 에서는 DSR이 **0.5%**의 빈도로만 발동하며, 이를 발견이라 부르기를 정확하게 거부합니다: 그 정도로 약한 엣지는 1,000번 시행 서치가 만들어내는 운과 진짜로 구별이 불가능하며, 그렇지 않은 척하는 것은 강력함이 아니라 부정직함입니다. 천장 바로 근처에서 곡선은 가파르게 상승합니다(1.27에서 0.09, 1.90에서 0.65). 연율화 샤프 2.54에 이르면 검정력은 0.998이고, 3.17에서는 완벽한 1.000입니다. 강한 엣지는 사실상 매번 유지되고, 위양성은 0에 고정된 채로 남으며, 50% 검정력 교차점은 연율화 샤프 약 1.73에 위치합니다(1.27과 1.90 행 사이 보간으로 도출) — 1.63 노이즈 천장 바로 위이며, 정직한 바가 있어야 할 정확한 위치입니다: 엣지가 1,000번 시행 서치가 지어내는 것을 앞지르기 시작하는 지점입니다.
이것이 실제로 당신이 원하는 성질이며, S자 곡선으로 표현됩니다: 노이즈 천장 아래의 엣지는 운으로 정확히 배제되고, 그 위에서 여유 있는 엣지는 1에 근접하는 검정력으로 유지된다. 대조적으로 나이브 검정은 진짜 샤프가 0.79일 때조차 심어둔 엣지를 67%의 빈도로 "탐지"합니다 — 하지만 이 숫자는 무의미합니다. 우리는 이미 그것이 존재하지 않는 엣지도 100%의 빈도로 탐지한다는 것을 봤기 때문입니다. 모든 것에 발동하는 검정에는 검정력이 없습니다. 변별력이 없는 것입니다. DSR은 한계적인 엣지(0.79와 1.27 행)에 대한 약간의 민감도를 희생하는 대신 중요한 것을 얻습니다: 그것의 발견은 진짜라는 것.
5막 — 실무자의 함정: 상관된 그리드

지금까지는 모두 독립적인 전략을 사용했습니다 — 가장 깨끗한 설정이며, DSR의 독립성 가정이 정확히 성립하는 설정입니다. 실제 파라미터 그리드는 그렇지 않으며, 바로 여기서 나이브하게 사용된 도구가 새로운 방식의 오류가 됩니다.
정직한 이동평균 크로스오버 서치를 예로 들어봅시다: 빠른 길이 16개 느린 길이 40개 번의 시행, 각각 755개의 관측치. 이런 그리드는 상관관계에 흠뻑 젖어 있습니다 — fast=45/slow=120과 fast=45/slow=125는 거의 같은 전략이므로, 수익률 스트림이 함께 움직입니다. 640번의 시행에 걸쳐 측정한 평균 쌍별 상관관계: 약 0.61. 이것은 640개의 독립적인 베팅이 아닙니다. 전혀 아닙니다.
사례 A — 랜덤 워크(엣지 없음): 모든 방법이 정확하게 이를 제거한다
순수한 랜덤 워크에 그리드를 돌립니다. 승자는 유혹적으로 보입니다: 파라미터 fast=45/slow=120, 최고 연율화 샤프 0.81, 단일 검정 p-value 0.081. 모든 방법이 이를 꿰뚫어 봅니다:
| 방법 | 결과 | 판정 |
|---|---|---|
| DSR (raw K = 640) | 0.431 | 기각 (< 0.95) |
| Reality Check p | 0.570 | 기각 |
| SPA-type p (studentized RC) | 0.569 | 기각 |
| Harvey-Liu 헤어컷 | 100% | 기각 |
디플레이션이 전혀 필요 없는 단서부터 시작합시다: 이 승자의 보정되지 않은 유한표본 유의성, 즉 -vs-zero조차 겨우 0.918입니다 — 640번의 시행 중 단 하나에 대해서라도 보정하기 전인데도 이미 0.95에 미달합니다. 디플레이션은 이를 완전히 묻어버립니다: 바는 관측치당 , 연율화하면 ~0.91입니다(도출: ) — 승자의 0.81보다 높습니다. 최선의 전략은 노이즈 천장에조차 도달하지 못하고, DSR ≈ 0.43(동전 던지기보다 나쁨)이며, Reality Check, SPA형 검정, 100% 헤어컷 모두 의견이 일치합니다: 여기엔 아무것도 없다. 완벽합니다. 이것은 쉬운 사례이고, 잘 작동합니다 — 그리고 곧 보게 되겠지만, 우리가 시도하는 모든 유효 시행 수에서 기각된 채로 남습니다.
사례 B — 진짜 레짐 엣지: raw DSR이 틀리게 판정한다
이번에는 진짜로 활용 가능한 엣지를 가진 레짐 전환 시리즈에 동일한 그리드를 돌립니다. 승자는 확고합니다: 파라미터 fast=3/slow=55, 최고 연율화 샤프 3.92 — 이것은 인샘플, 선택된 샤프이며, 그 자체로 서치에 의해 선택 편향으로 부풀려져 있지만(진짜 또는 아웃오브샘플 엣지가 아님), 그 기저의 레짐 효과는 진짜입니다 — 단일 검정 p-value는 이고, 디플레이트되지 않은 유의성 -vs-zero는 사실상 1.000입니다. 여기에는 진짜 엣지가 있고 승자는 그것을 찾아냈습니다. 그런데도 raw DSR이 이를 기각하는 것을 지켜보십시오:
| 방법 | 결과 | 판정 |
|---|---|---|
| DSR (raw K = 640) | 0.748 | 기각 (< 0.95) ✗ 과잉 디플레이션 |
| Reality Check p | 0.0024 | 확인 ✓ |
| SPA-type p (studentized RC) | 0.0038 | 확인 ✓ |
| Harvey-Liu 헤어컷 | 15% | 확인 ✓ |
raw DSR의 0.748은 진짜 엣지에 대한 거짓 기각입니다. 그 이유는 이번에는 심하게 위반된 독립성 가정입니다: DSR은 640번의 상관된 시행을 640번의 독립적인 추출로 취급하여 디플레이트된 바를 구축했고, 이는 기대 최댓값 를 관측치당 0.221 — 연율화 ~3.51(도출: )로 부풀립니다. 3.51의 바에 대해, 3.92의 승자는 이를 아주 조금만 통과하며, DSR은 0.748에 착지합니다 — 0.95에 미달합니다. 두 가지 요인이 이 바를 밀어 올립니다: 소수의 유효 시행 대신 원시 개수(640번의 시도), 그리고 시행들 사이의 진짜 스킬 분산 — 일부 파라미터 쌍은 레짐 시리즈에서 실제로 더 뛰어나며, 이는 를 넓혀 를 순수한 운만으로 도달할 수 있는 것보다 더 끌어올립니다. 둘 다 같은 방향으로 작용하며, 바가 결국 너무 높아지는 이유는 그 서치가 진짜로는 640번의 독립적인 시도가 아니었기 때문입니다. 그것은 몇 개의 독립적인 베팅이 640번 반복 표본추출된 것이었습니다.
DSR에 원시 개수 대신 유효 시행 수를 넣어 보십시오. 위에서 쓴 한 줄짜리 함수는 평균 쌍별 상관관계로부터 구하는 조잡한 추정치입니다:
def effective_n_trials(returns_matrix):
"""N_eff = N / (1 + (N-1) * rho_bar), clipped to [1, N].
Correlated trials -> fewer independent bets."""
C = np.corrcoef(returns_matrix, rowvar=False)
rho_bar = max(np.nanmean(C[np.triu_indices(C.shape[0], k=1)]), 0.0)
N = returns_matrix.shape[1]
neff = N / (1.0 + (N - 1) * rho_bar)
return float(min(max(neff, 1.0), N))
이고 일 때, 이는 그리드를 유효 ****번의 시행으로 축소시키고(도출: ), DSR은 1.000으로 뛰어오릅니다. 하지만 그 숫자를 축하하기 전에 멈추십시오. 이것이 이 절 전체에서 가장 약한 증거이기 때문입니다. 에서 디플레이트된 바는 연율화 로 무너지는데 — 이는 사실상 시행 평균이며, 사실상 0입니다. 그 지점에서 디플레이션은 꺼진 상태입니다: 에서의 DSR은 그저 승자의 디플레이트되지 않은 유한표본 유의성(-vs-zero )을 재보고하고 있을 뿐입니다. 판정은 다중 검정 보정에 의해 생산된 것이 아니라 raw 유의성으로부터 물려받은 것입니다. 그리고 랜덤 워크 쪽에서는 정반대의 유보 조항이 붙습니다: 에서의 기각은 그 승자가 애초에 독립적으로도 한계적이었기 때문에만 유효합니다(-vs-zero ). 전체 논증을 1.6에 고정시켜 놓으면 회의론자가 어깨를 으쓱하는 것도 당연합니다: 당신은 보정을 꺼버리고 그 아래 있던 것을 그대로 보고한 것이니까요.
그러니 하나의 추정치에 고정하지 마십시오. 정직한 방법 — 그리고 더 강력한 방법 — 은 를 다섯 가지 서로 다른 표준적인 방식으로 계산하고 전체 밴드에 걸쳐 판정을 읽는 것입니다. 여기 동일한 640번 시행 시그널 그리드에 적용된 다섯 가지 추정량이 있으며, 각각이 함의하는 디플레이트된 바와 그것이 만들어내는 DSR을 함께 보여줍니다:
| 유효 시행 수 추정량 | 디플레이트된 바 (연율화) | DSR | 판정 | |
|---|---|---|---|---|
| 평균 상관관계 | 1.6 | 0.25 | 1.000 | 유지 |
| 참여 비율 | 2.4 | 0.43 | 1.000 | 유지 |
| PCA (분산의 95%) | 16 | 1.85 | 1.000 | 유지 |
| Kaiser (고유값 > 1) | 21 | 2.00 | 0.999 | 유지 |
| Cheverud-Nyholt | 370 | 3.31 | 0.845 | 기각 |
| 원시 그리드 개수(보정 없음) | 640 | 3.51 | 0.748 | 기각 |
추정량: 평균 상관관계는 위에 나온 한 줄짜리 공식입니다. 참여 비율 와 PCA-95%/Kaiser 개수는 상관행렬의 고유값에서 유효 차원을 읽어냅니다. Cheverud-Nyholt는 유전학 문헌에서 나온 고유값-분산 추정량으로, 근사 등상관 하에서 과다 계산하는 것으로 알려져 있습니다.
이제 논지가 명확해집니다. 그리고 그것은 "어떤 보정이든 당신을 구해준다"가 아닙니다. 방어 가능한 중간 지대를 보십시오 — PCA-95%()와 Kaiser()입니다. 이것들은 디플레이션이 꺼진 영역이 아닙니다. 이들은 1.85에서 2.00이라는 연율화 의 실질적인 바를 부과합니다 — 노이즈보다 훨씬 위에 있는 진지한 헤어컷, 16-21개의 유효 시도에 대한 진정한 다중 검정 페널티입니다. 그리고 3.92의 엣지는 여전히 이를 통과합니다(DSR 1.000과 0.999). 이 시그널은 144.8 미만의 모든 에서 DSR을 통과합니다(교차점으로부터 도출). 이것이 실패하는 것은 오직 Cheverud-Nyholt의 에서뿐인데, 이 추정량은 시행이 근사 등상관일 때 과다 계산한다는 것이 증명되어 있습니다 — 그리고 심지어 보정되지 않은 원시 개수 640조차 DSR을 0.748까지만 끌어내릴 뿐, 0까지 끌어내리지는 않습니다. 랜덤 워크 승자는 정확히 동일한 다섯 가지 추정량을 거쳐도 매번 기각됩니다(1을 넘는 어떤 에서도 살아남지 못합니다). 이것이 진짜 결과입니다: 하나의 운 좋은 숫자가 아니라, 표준 유효 시행 수 추정량 전체 밴드에 걸쳐 안정적인 판정 — 이는 그중 어느 하나만 믿는 것보다 훨씬 더 강력한 증거입니다.
가장 조잡한 추정량에 대해 기술적으로 한 가지 유보 조항을 덧붙입니다. 이것이 왜 그 추정량이 밴드의 약한 쪽 끝에 자리하는지를 설명해 주기 때문입니다: 는 사실 상관된 변수들의 평균에 대한 분산 감소 계수입니다(상관관계 하에서 평균을 내는 것이 얼마나 이득이 되는지). DSR의 벤치마크는 극값 양(量)입니다 — 시행들의 기대 최댓값 — 이므로 평균-분산 축소를 시행 수로 사용하는 것은 함수적 불일치입니다: 방향은 맞지만(상관될수록 ⇒ 유효 시행이 더 적음), 최댓값의 분포가 실제로 의존하는 양은 아닙니다. 이것이 바로 밴드 중간의 고유값 기반 추정량들이 더 신뢰할 만한 근거이며, 점이 아니라 밴드가 결과물인 이유입니다.
교훈: 두 도구를 모두 쓰고, DSR에 올바른 N을 넣어라

사례 B에서 두 가지가 드러나며, 둘 다 논지를 떠받치는 것들입니다:
- 시행이 상관될 때는 원시 그리드 크기가 DSR에 대해 틀린 N이며 — 그렇다고 단 하나의 유효 N이 옳은 것도 아닙니다. 독립성을 가정하는 공식에 640을 대입하면 과잉 디플레이션이 일어납니다: 서치가 실제로 도달한 것보다 훨씬 높은 노이즈 천장을 제조해 그 아래에 진짜 엣지를 파묻어 버립니다. DSR에는 유효 시행 수가 필요합니다 — 하지만 해법은 하나의 추정량을 믿는 것이 아닙니다(가장 조잡한 것은 더더욱 아닙니다. 그것은 근처에서 보정이 꺼져버립니다). 해법은 표준 추정량 전체 밴드(여기서는 1.6에서 370까지)에 걸쳐 판정을 읽고 그것이 안정적인지 확인하는 것입니다. 이 엣지의 경우 그러했습니다: 디플레이션이 진짜로 작동하는 모든 곳에서 유지되었고(-에서 실질적인 연간 1.85-2.00의 바), 과다 계산하는 추정량 아래에서만 실패했습니다. 밴드 전체에 걸쳐 안정적인 판정은 그 어떤 단일 숫자보다 훨씬 강력합니다.
- DSR을 Reality Check와 짝지으십시오. Reality Check와 그 SPA형(스튜던트화된) 사촌이 시행 수 조작을 전혀 하지 않고도 사례 B를 올바르게 판정했다는 점에 주목하십시오(p = 0.0024와 0.0038) — 이들은 가상의 독립적인 베팅을 세는 대신 실제 상관된 수익률 스트림을 리샘플링하기 때문에, 정상 부트스트랩을 통해 종속성을 자연스럽게 다룹니다. 이것이 유효 N을 둘러싼 이 모든 혼란에 대한 결정타입니다: RC는 이 필요 없습니다. DSR과 RC는 서로 다른 질문에 답합니다: DSR은 "이 서치 안에서 승자가 특별한가?"를 묻고(서치가 몇 번의 유효 시도를 거쳤는지 알아야 함), RC/SPA형은 "데이터 스누핑 이후에도 최선의 규칙이 현금을 이기는가?"를 묻습니다(그리고 데이터 자체에서 종속성을 읽어냅니다). 당신은 둘 다 원할 것입니다. 이들이 의견이 엇갈릴 때 — 여기서 raw-count DSR과 RC가 그랬듯이 — 그 불일치는 진단적입니다: 대개 당신의 이 틀렸다는 뜻입니다.
이것은 우리의 속도 사다리와 IPC 세금 연구가 엔지니어링 측면에서 계속 부딪혔던 것과 동일한 구조적 경고입니다 — 거대한 상관된 그리드를 돌리는 빠른 서치는 방대한 수의 독립적인 베팅을 사주는 것이 아니며, 그리드 크기를 시행 수로 취급하는 것은 최적화기와 유의성 검정 양쪽 모두를 속입니다. 곧 나올 백테스트 과적합 확률(PBO)에 대한 자매편은 리샘플링 측면(CSCV)에서 동일한 선택 편향을 공략하며, 여기의 모든 것과 자연스럽게 짝을 이룹니다: DSR은 승자의 값을 매기고, PBO는 절차의 값을 매깁니다.
정직성에 관한 노트
세 가지 유보 조항을 솔직하게 밝힙니다. 통제된 연구의 요점 전체가 그것을 과장하지 않는 데 있기 때문입니다.
- 수익률은 합성 데이터입니다. 캘리브레이션과 검정력 실험에는 iid 정규분포를, 진짜 엣지 사례에는 레짐 전환 프로세스를 사용했습니다 — 시장의 현실성이 아니라 통제된 실측값을 위해 선택된 것입니다. 실제 수익률은 팻테일이고, 자기상관되어 있고, 비정상적이며, PSR의 왜도/첨도 항은 정확히 이 중 첫 번째를 다루기 위해 존재합니다. 여기서의 결과물은 전략이 아니라 캘리브레이션된 방법입니다: 검정이 거짓 발견을 통제한다는 것은 발견할 것이 전혀 없다는 것을 아는 데이터에서 그것을 돌려봄으로써만 증명할 수 있습니다. 그러려면 실측값을 만들어내야 합니다.
- 어떤 유효-N 추정량도 정전(正典)이 아닙니다 — 그래서 우리는 다섯 개를 보고했습니다. 평균 상관관계 한 줄짜리 공식 는 심사자가 읽기 쉽고 방향적으로는 옳지만(상관관계가 클수록 ⇒ 유효 시행이 적어짐), 이것은 평균에 대한 분산 감소 계수입니다 — DSR의 최댓값 벤치마크와는 함수적으로 맞지 않습니다 — 그리고 근처에서는 디플레이션을 완전히 꺼버립니다. 고유값 추정량들(참여 비율, PCA-95%, Kaiser)은 더 잘 맞지만 여전히 발견법적이며, Cheverud-Nyholt는 등상관 하에서 과다 계산합니다. 더 완전하고 원칙에 입각한 접근법은 시행 클러스터링입니다(Bailey & López de Prado의 DSR 부록 3): 모든 것을 하나의 스칼라로 뭉개는 대신 상관 구조에 따라 시행을 그룹화하고 클러스터 수를 세는 것입니다. 우리가 밴드 전체를 보고하는 것은 정확히 그 선택이 확정되지 않았기 때문입니다 — 다섯 가지 추정량 전체에 걸쳐 안정적인 판정이야말로 정직한 주장이며, 단일 추정량 선택에 의존한 주장은 그렇지 않을 것입니다.
- 부트스트랩은 스튜던트화된 Reality Check이지 완전한 Hansen SPA가 아니며, 리샘플 횟수는 실험마다 다릅니다. 이 글이 "SPA형"이라고 말하는 곳은 어디든 규칙별 스튜던트화를 적용한 White의 Reality Check를 의미합니다. Hansen의 완전한 일관적, 표본 의존적 재중심화는 구현되지 않았습니다. 캘리브레이션의 거짓 발견율은 400번의 서치 각각에서 서치당 500번의 정상 부트스트랩 리샘플을 사용합니다. 두 사례 연구의 RC/SPA형 p-value는 각각 5,000번의 리샘플을 사용합니다. 평균 블록 길이는 전체적으로 20입니다(Politis-Romano), , 연율화를 위해 연 252개 기간을 사용합니다. 이 값들을 바꾸면 소수점 셋째 자리 숫자는 움직이지만 — 나이브 1.000 대 원칙에 입각한 0.001-0.057, 노이즈 천장 바로 위에서 50% 검정력에 도달하는 S자 곡선, 그리고 판정을 유효-N 밴드 전체에 걸쳐 읽어야 하는 상관된 그리드의 함정이라는 이야기는 — 움직이지 않습니다.
핵심 요점
- 파라미터 서치는 다중 검정 기계이며, 나이브 유의성 검정은 이를 알아채지 못합니다. 제로 엣지 전략 1,000개에서 최고 연율화 샤프는 평균 1.63이고 단일 검정 p-value 중앙값은 0.000686입니다 — 그리고 "유의한가?" 검정은 100%의 확률로 발견을 선언합니다(거짓 발견율 1.000). 무(無)에서 나온 훌륭한 샤프가, 애초에 올바른 질문을 던진 적이 없는 검정에 의해 유의하다고 인증됩니다.
- 디플레이티드 샤프 비율은 골대를 0에서 노이즈 천장으로 옮깁니다. DSR은 승자를 0이 아니라 , 즉 이 정도 크기의 서치가 운으로 낼 수 있는 최선의 기대치와 비교합니다 — null 사례의 경우 연율화 1.63에 착지하는데, 이는 평균 노이즈 승자가 자리 잡은 바로 그 지점입니다(도출: ). null 거짓 발견율은 0.001이며, Harvey-Liu 헤어컷(Bonferroni/Holm 0.057, BHY 0.007)과 White의 Reality Check(0.022)는 다른 경로로 동일한 통제에 도달합니다.
- 진짜 엣지는 지켜냅니다. DSR의 검정력은 연율화 샤프 ~1.73에서 50% 검정력에 도달하는 S자 곡선을 그립니다 — 1.63 노이즈 천장 바로 위입니다: 진짜 연율화 샤프 0.79에서 0.005, 1.90에서 0.651, 2.54에서 0.998, 3.17에서 1.000이며, 위양성은 시종일관 ~0입니다. 천장 아래의 엣지는 운과 구별 불가능하다고 정확하게 판정되고, 그 위의 엣지는 1에 근접하는 검정력으로 유지됩니다.
- 상관된 그리드는 raw DSR을 무너뜨립니다 — 그리고 어떤 단일 유효-N도 이를 구하지 못합니다. 밴드가 구합니다. 640개 셀짜리 MA 크로스오버(평균 쌍별 상관관계 ~0.61)에서, raw-count DSR은 640번의 상관된 시행이 640개의 독립적인 베팅이 아니기 때문에 진짜(인샘플 선택, 연간 3.92) 엣지를 거짓으로 기각했습니다(0.748 < 0.95). 하지만 해법은 하나의 마법 같은 가 아닙니다 — 가장 조잡한 추정치()에서는 디플레이션이 사실상 꺼져버리고(바 ~연간 0.25) DSR은 그저 raw 유의성을 그대로 반향할 뿐입니다. 진짜 증거는 그 엣지가 표준 추정량 전체 밴드에 걸쳐 유지된다는 것입니다 — 1.6/2.4/16/21에서 DSR 1.000/1.000/1.000/0.999이며, 방어 가능한 PCA-95%/Kaiser 중간대에서 실질적인 연간 1.85-2.00의 바를 포함하여 — 145 미만의 어떤 에서도 살아남고, 과다 계산하는 Cheverud-Nyholt의 370에서만 실패합니다. 랜덤 워크는 모든 추정량에서 기각됩니다. 점이 아니라 밴드를 읽으십시오.
- DSR을 Reality Check와 짝지으십시오. 둘은 서로 다른 질문에 답하기 때문입니다. Reality Check와 그 SPA형(스튜던트화된) 사촌은 시행 수 조작을 전혀 하지 않고도 진짜 엣지를 확인했습니다(p = 0.0024와 0.0038) — 이들은 정상 부트스트랩을 통해 종속성을 자연스럽게 다루며, 이는 유효-N이 논쟁거리일 때 정확한 결정타입니다. DSR은 "이 서치 안에서 승자가 특별한가?"를 묻고, RC/SPA형은 "데이터 스누핑 이후에도 최선이 현금을 이기는가?"를 묻습니다. 둘 사이의 불일치는 당신의 이 틀렸다는 신호입니다. 둘 다 돌리십시오.
서치의 승자는 결백이 증명될 때까지 유죄입니다. 나이브 p-value는 결백의 증거가 아닙니다 — 그것은 서치 자신의 부풀려진 증언이며, 신뢰도의 0이 열두 개인 채로 순수한 노이즈를 옹호할 것입니다. 벤치마크를 운이 만들어내는 수준으로 디플레이트하고, 유효 시행 수를 정직하게 세고, 두 번째 의견을 위해 최댓값을 부트스트랩하십시오. 세 개의 바를 모두 통과하는 것은 실제로 진짜일 수 있습니다. 나이브 바 하나만 통과하는 것은 천 명 중 가장 키가 큰 동전 던지기꾼일 뿐입니다.
전체 실험 — null 캘리브레이션 하니스, 심어둔 엣지 검정력 스윕, 상관된 그리드 서치, 그리고 이 글의 모든 숫자를 하나의 결정론적 스크립트에서 재현할 수 있음 — 은 deflated-sharpe.marketmaker.cc의 자매 논문에 있으며, 코드와 데이터는 github.com/suenot/deflated-sharpe-search에 있습니다.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.