← 기사 목록으로
July 2, 2026
5분 소요

백테스트 과적합 확률: 당신의 서치는 동전 던지기를 이겼는가?

백테스트 과적합 확률: 당신의 서치는 동전 던지기를 이겼는가?
#algotrading
#backtest
#overfitting
#cross-validation
#pbo
#sharpe
#validation
🎯
Part 5 of 7 · Collection
Backtesting Without Fooling Yourself

"환상 없는 백테스트" 시리즈의 일부입니다.

📄 이 글은 하나의 연구 논문으로 발전했습니다. 아래의 모든 숫자는 통제된 실측값을 구축하는 하나의 결정론적 스크립트에서 나옵니다 — 제로 엣지 서치, 엣지를 심어둔 서치, 그리고 랜덤 워크 위의 실제 이동평균 파라미터 그리드를 만든 다음, 여기에 조합적 대칭 교차검증(CSCV)을 실행하여 백테스트 과적합 확률을 추정하고, 선택 절차가 얼마나 잘 일반화되는지를 직접 측정합니다. 논문은 pbo-search.marketmaker.cc에서 온라인으로(인터랙티브 버전 + PDF) 읽을 수 있으며, 코드와 데이터는 github.com/suenot/pbo-search에 있습니다.

디플레이티드 샤프 비율은 당신의 승자를 재판에 세웠습니다: N개의 구성을 서치했다고 할 때, 이 샤프 하나는 운이 살 수 있는 것을 넘어서는가? 이 글은 다른 것을 재판에 세웁니다 — 고르는 행위 그 자체입니다. 당신은 그리드를 돌렸고, 최선의 셀을 남겼고, 다음으로 넘어갔습니다. 하지만 그 선택 자체는 신뢰할 만했습니까? 전체 인샘플/아웃오브샘플 분할을 다른 방식으로 다시 돌린다면, 같은 구성이 여전히 최고로 나올까요 — 아니면 백 개의 동전 중 가장 운 좋은 것에 왕관을 씌운 것뿐일까요?

**백테스트 과적합 확률(Probability of Backtest Overfitting, PBO)**은 Bailey, Borwein, López de Prado & Zhu(2017)가 도입한 개념으로, 정확히 그 질문에 답합니다 — 그것도 대부분의 사람이 보자마자 잘못 읽는 숫자로 말입니다. 이 글에서 가장 중요한 한 문장이니 두 번 읽으십시오:

PBO의 null은 1이 아니라 0.5입니다. 아웃오브샘플 스킬이 전혀 없는 서치는 PBO ≈ 0.5를 기록합니다. 절반은 "절반만 과적합"이 아닙니다 — 절반은 완전한 과적합, 동전 던지기입니다. 당신이 원하는 것은 제로에 가까운 PBO입니다.

여기서 모두가 걸려 넘어집니다. 우리는 확률을 "아무것도 없음"이라는 null에 맞서 읽도록 훈련받았고, 과적합에 대해서는 본능적으로 "결백한" 판독값이 0이라고 말합니다. 그렇지 않습니다. PBO는 당신이 인샘플에서 최선으로 선택한 구성이 아웃오브샘플에서 필드의 하위 절반에 떨어질 확률입니다. 만약 당신의 서치가 일반화되는 것을 진짜로 아무것도 배우지 못했다면, 인샘플 승자는 아웃오브샘플에서 순위 어디에나 있을 확률이 동일합니다 — 그래서 대략 절반의 경우 하위 절반에 떨어집니다. PBO ≈ 0.5는 당신의 선택 절차가 동전 던지기라는 뜻입니다. PBO ≈ 0은 인샘플 승자가 아웃오브샘플에서도 믿을 만하게 승자로 남는다는 뜻입니다 — 선택이 신뢰할 만하다는 것입니다. 아래의 모든 것은 그 하나의 캘리브레이션 사실을, 실측값을 아는 데이터 위에서 구체화하기 위해 만들어졌습니다.

레짐(구성 200개, T = 1000, S = 16) 정체 승자의 인샘플 샤프 아웃오브샘플 샤프 PBO 판정
제로 엣지 필드(iid 노이즈 전략 200개) 순수한 운, 어디에도 엣지 없음 1.98 0.06 0.476 과적합 — 동전 던지기
심어둔 엣지(구성 20개가 연율화 샤프 2.38을 가짐) 진짜, 견고한 스킬 3.73 2.34 0.001 신뢰할 만함
순수한 랜덤 워크 위의 MA 크로스오버 그리드(구성 170개) 유혹적인 신기루 0.97 0.04 0.463 과적합 — 동전 던지기

샤프 비율은 ×√252로 연율화. 세 행 모두 선택된 전략의 샤프를 60개의 몬테카를로 행렬에 걸쳐 평균 냅니다 — 동등한 비교를 위해, 과적합 그리드도 null 및 심어둔 엣지와 동일한 방식으로 채점됩니다. 이 평균 기준에서 그리드의 선택된 인샘플 샤프(0.97)는 실제로 null의 부풀려진 1.98보다 낮으며, 아웃오브샘플 샤프는 살짝 양수인 0.04이고, PBO(0.463)는 ½ 바로 아래에 자리합니다 — 통계적으로 null과 구별되지 않습니다. 극적인 단일 행렬 숫자(그리드 최고 인샘플 샤프 2.33이 아웃오브샘플 중앙값 −0.22로 무너지고 PBO 0.573)는 하나의 대표적인 랜덤 워크 시드에 속하며, 4막에서 명확히 라벨링되어 등장합니다. 모든 숫자는 결과 파일까지 추적됩니다.

세 개의 레짐, 하나의 교훈. 엣지 없는 서치는 노이즈가 iid이든(PBO 0.476) 실제 이동평균 그리드로 위장했든(PBO 0.463) 0.5 동전 던지기 선 위에 자리합니다 — 둘은 통계적으로 구별되지 않으며, 둘 다 결정적입니다. 진짜 엣지는 PBO를 0.001로 떨어뜨립니다. 행렬에 걸쳐 평균 내면 그리드의 선택된 승자는 특별할 것이 없습니다 — 인샘플 샤프 0.97로, null의 부풀려진 1.98보다 낮습니다 — 그리고 이것 자체가 정직한 진단입니다: 엣지 없는 서치는 null처럼 읽힙니다. 드라마는 꼬리에 있습니다. 하나의 대표적인 랜덤 워크 행렬(4막)에서 그리드의 최고 셀은 인샘플 샤프 2.33을 기록합니다 — 심어둔 엣지의 아웃오브샘플 2.34와 사실상 동률입니다 — 그러나 아웃오브샘플에서는 상위만큼이나 자주 하위 절반에 떨어집니다. 근사한 백테스트와 무가치한 선택 사이의 그 간극은 승자 자신의 샤프에서는 보이지 않으며, 절차의 값을 매길 때만 보입니다. 그것이 PBO가 하는 일입니다.

1막 — 절차를 재판에: CSCV가 실제로 하는 일

천 개의 행과 이백 개의 전략 열로 이루어진 키 큰 성과 행렬이 수평으로 열여섯 개의 동일한 블록으로 잘리고, 여덟 개의 블록은 훈련 패널로, 나머지 여덟 개는 테스트 패널로 보내지며, 인샘플 최고 열 하나가 강조되고 그 동일한 열이 아웃오브샘플 순위에서 어디에 떨어지는지를 추적하는 화살표가 그려진 그림

DSR은 모수적입니다: null 하에서 최대 샤프의 분포를 모델링하고 승자의 유의성을 해석적으로 디플레이트합니다. CSCV는 동일한 선택 편향 문제에 대한 비모수적 답입니다 — 최댓값을 모델링하는 대신, 가능한 모든 방식으로 훈련/테스트 분할을 리샘플링하고 인샘플 승자가 계속 이기는지를 경험적으로 지켜봅니다. 분포 가정도 없고, "유효 시행" 개수 세기도 없습니다. 오직: 그 선택이 일반화되는가?

원재료부터 시작합니다. 전략 클래스의 구성 N = 200개를 T = 1000개의 동시적 관측치에 걸쳐 백테스트했습니다. 각 구성의 수익률 시리즈를 하나의 열로 쌓으면 T × N 성과 행렬 M을 얻습니다 — 시간 방향으로 1,000행, 전략 방향으로 200열. 이것이 CSCV가 필요로 하는 유일한 입력입니다.

이제 네 단계로 구성합니다:

  1. 시간을 S = 16개의 서로 겹치지 않는 블록으로 동일한 길이(각 T/S행)로 나눕니다. 블록은 국소적인 시간 구조를 보존합니다 — 수익률에 기억이 있는 순간부터 중요해지는 설계 선택입니다.
  2. 절반의 블록으로 훈련하고 절반으로 테스트하는 모든 방법을 선택합니다. S = 16일 때, 이는 16개 중 8개를 훈련 세트로 고르는 C(16, 8) = 12,870가지 방법 전부입니다; 나머지 8개가 테스트 세트입니다. 여기서 "조합적으로 대칭"이라는 이름이 나옵니다: 각 분할은 거울상을 가지므로(훈련과 테스트를 맞바꿈), 이 방식은 단일 워크포워드가 주는 하나의 특권적인 과거→미래 절단 대신 데이터를 대칭적으로 사용합니다.
  3. 각 분할에서 200개 구성 전부를 인샘플 샤프로 순위 매기고 승자 n*를 고릅니다. 그런 다음 그 동일한 구성 n*가 홀드아웃된 8개 블록에서 아웃오브샘플로 몇 위인지 찾습니다.
  4. 승자의 상대적 아웃오브샘플 순위를 기록하고 이를 로짓으로 변환합니다. PBO는 그 로짓이 ≤ 0인 12,870개 분할의 비율입니다.

이 열거는 코드로 쓰면 아주 작습니다:

from itertools import combinations

combos = list(combinations(range(S), S // 2))   # C(16, 8) = 12,870 splits

각 분할에 대해, rˉnc\bar r^{\,c}_{n^*}NN개 구성 중 인샘플 승자의 아웃오브샘플 순위라고 합시다(순위 1 = 최악, NN = 최선). 이를 상대 순위 ωˉc(0,1)\bar\omega_c \in (0,1)로 정규화하고, 그 로짓 λc\lambda_c를 취한 다음, 분할에 걸쳐 적분합니다:

ωˉc=rˉncN+1,λc=ln ⁣ωˉc1ωˉc,PBO=1#CScCS1{λc0}\bar\omega_c = \frac{\bar r^{\,c}_{n^*}}{N+1}, \qquad \lambda_c = \ln\!\frac{\bar\omega_c}{1 - \bar\omega_c}, \qquad \text{PBO} = \frac{1}{\#C_S}\sum_{c \,\in\, C_S} \mathbf{1}\{\lambda_c \le 0\}

로짓은 그저 편리한 자입니다. λc>0\lambda_c > 0은 승자가 아웃오브샘플에서 상위 절반에 떨어졌다는 뜻이고(상대 순위 ½ 초과) — 인샘플/아웃오브샘플 일관성, 좋은 신호입니다. λc0\lambda_c \le 0은 아웃오브샘플 중앙값 이하에 떨어졌다는 뜻입니다 — 그 분할에서 인샘플 선택이 일반화되지 않았다는 것입니다. PBO는 인샘플 승자가 아웃오브샘플에서 중앙값을 이기지 못한 분할의 비율입니다. 행렬 전체가 이를 결정합니다: MS가 주어지면 PBO는 결정론적입니다 — 리샘플링 시드도 없고, 12,870개 분할 전부가 완전히 열거됩니다.

코드로 보면, 모든 분할에서 모든 구성의 인샘플과 아웃오브샘플 샤프(각각 12,870 × 200인 행렬 R_trR_te)를 구하고 나면, 추정량의 핵심은 여섯 줄입니다:

n_star  = R_tr.argmax(axis=1)                      # in-sample winner, per split
oos_sh  = R_te[rows, n_star]                        # that winner's OWN out-of-sample Sharpe
rank    = (R_te <= oos_sh[:, None]).sum(axis=1)     # its OOS rank among N configs, 1..N
omega   = np.clip(rank / (N + 1.0), 1e-6, 1 - 1e-6) # relative OOS rank in (0,1)
lambdas = np.log(omega / (1.0 - omega))             # logit

pbo = float(np.mean(lambdas <= 0.0))                # fraction of splits with lambda <= 0

여기 없는 것을 눈여겨보십시오: p-value도 없고, 승자의 샤프에 대한 임계값도 없고, null 분포의 모델도 없습니다. PBO는 승자가 좋은지 결코 묻지 않습니다. 인샘플 최선을 고르는 것이 홀드아웃 데이터와의 접촉에서 살아남는 결정인지를 묻습니다. 이것은 당신의 전략이 아니라 당신의 서치가 가진 속성입니다 — 그리고 바로 이 때문에 승자 자신의 통계량이 잡아내지 못하는 것을 잡아냅니다.

2막 — 캘리브레이션이 논증의 전부다: null은 0.5

왼쪽 제로에서 오른쪽 하나까지 이어지는 수평 PBO 다이얼에 정확히 절반 지점에 과적합 선이라 라벨링된 밝은 위험선이 그려져 있고, 그 중간점에서 동전 하나가 회전하며 균형을 잡고 있으며, 제로 엣지 전략의 높은 인샘플 샤프 막대가 아웃오브샘플에서 거의 제로에 가까운 평평한 막대로 무너지는 그림

캘리브레이션할 수 없는 진단은 소문에 불과합니다. 그러니 실제 데이터에서 PBO를 신뢰하기 전에, 답을 아는 데이터에서 두 개의 끝점을 확정해야 합니다: 어디에도 엣지가 없는 필드, 그리고 진짜 엣지가 있는 필드입니다. 첫 번째에서 PBO가 0.5 근처에 착지하지 않고 두 번째에서 0 근처에 착지하지 않는다면, 그것은 무가치합니다.

null 끝점. 독립적이고, 드리프트가 제로이고, 엣지가 제로인 정규분포 노이즈 200개 열로 M을 구축하고 — 모든 구성의 진짜 샤프가 정확히 0입니다 — CSCV를 돌립니다. 그런 행렬 60개에 걸쳐 평균을 냅니다. 선택된(인샘플 최고) 전략은 평균 인샘플 연율화 샤프 1.98을 기록합니다. 작은 숫자가 아닙니다; DSR 글이 측정한 것과 동일한 선택 부풀림입니다 — 200개 노이즈 열 중 최고는 자금이 투입될 만한 전략처럼 보입니다. 아웃오브샘플에서 그 동일한 승자는 연율화 샤프 0.06을 냅니다. 사실상 전부를 되돌려준 것입니다. 그리고 절차에 대한 판정은:

PBOnull=0.476(±0.137)\text{PBO}_{\text{null}} = 0.476 \quad (\pm\, 0.137)

이것이 측정된 동전 던지기입니다. 12,870개 분할 전체에서, 인샘플 승자는 아웃오브샘플 중앙값 아래로 떨어질 확률이 위로 떨어질 확률과 같습니다 — 0.476, ½보다 살짝 아래이며, 몬테카를로 스프레드를 감안하면 0.5와 구별되지 않습니다. 동반 진단도 일치합니다: 선택된 전략의 아웃오브샘플 샤프가 음수일 확률은 0.475입니다 — 순수한 노이즈에서 인샘플 최고를 고르면 아웃오브샘플에서 대략 절반의 경우 돈을 잃습니다. 선택에는 스킬이 없습니다, 찾아낼 스킬이 애초에 없기 때문이며, PBO는 정확히 그것을 보고합니다: 0.5가 과적합 선이고, 순수한 노이즈는 바로 그 위에 앉아 있습니다.

왜 1이 아니라 0.5일까요? 진짜 null 하에서는 200개 열 전부가 교환 가능하기 때문입니다 — 동일한 노이즈 과정에서 나온 통계적으로 상호 교환 가능한 추출입니다. 인샘플 승자는 인샘플에서만 특별합니다; 아웃오브샘플에서는 그저 또 다른 열일 뿐이며, 어디에나 순위 매겨질 확률이 동일합니다. 그래서 그 상대적 아웃오브샘플 순위 ωˉc\bar\omega_c(0,1)(0,1) 위에서 균등분포를 이루고, 로짓 λc\lambda_c는 0을 중심으로 대칭이며, λc0\lambda_c \le 0인 비율은 ½로 수렴합니다. PBO가 1이라면 동전 던지기보다 더 나쁠 것입니다 — 인샘플 성공이 아웃오브샘플 실패를 믿을 만하게 예측한다는 뜻이 되며, 이는 단순한 엣지의 부재가 아니라 능동적인 반지속성 메커니즘을 필요로 합니다(자세한 내용은 정직성에 관한 노트에서).

엣지 끝점. 이제 200개 구성 중 20개가 진짜로 심어둔 엣지 — 관측치당 샤프 0.15, 연율화하면 2.38(도출: 0.15×2522.380.15 \times \sqrt{252} \approx 2.38) — 를 갖고 나머지 180개는 노이즈로 남는 필드를 구축합니다. 동일한 CSCV를 돌립니다. 이야기는 완전히 뒤집힙니다:

인샘플 샤프(연율화) 아웃오브샘플 샤프(연율화) PBO P(OOS 손실)
Null(엣지 0) 1.98 0.06 0.476 0.475
심어둔 엣지(샤프 2.38) 3.73 2.34 0.001 0.0006

심어둔 엣지의 승자는 인샘플 연율화 샤프 3.73을 기록합니다 — 언제나 그렇듯 선택에 의해 부풀려진 것입니다 — 하지만 이번에는 아웃오브샘플 2.34유지합니다, 그리고 PBO는 0.001로 무너집니다. 12,870개 분할 전체에서, 인샘플 승자가 아웃오브샘플 하위 절반에 떨어지는 일은 사실상 없습니다. 아웃오브샘플 손실 확률은 0.0006으로 떨어집니다. 이것이 신뢰할 만한 선택 절차의 모습입니다: 훈련 대 테스트를 어떻게 자르든, 같은 종류의 구성이 계속 이깁니다, 서치가 붙잡을 진짜이고 견고한 효과가 그곳에 있기 때문입니다. 두 끝점 — 노이즈에서 0.476, 진짜 엣지에서 0.001 — 이 캘리브레이션입니다. PBO는 작동합니다.

3막 — 예/아니오 검정이 아니라 연속적인 온도계

가로축이 진짜로 심어둔 엣지의 강도이고 세로축이 PBO인, 아래로 기울어지는 온도계 곡선. 엣지가 제로일 때 대략 절반에서 시작해 엣지가 커짐에 따라 제로를 향해 매끄럽게 하강하며, 선택된 전략의 아웃오브샘플 샤프가 발맞춰 상승하는 거울 곡선이 함께 그려진 그림

두 개의 끝점은 PBO가 노이즈와 엣지를 구별할 수 있다는 것을 증명합니다. 하지만 더 깊은 속성은 그것을 매끄럽게 해낸다는 것입니다. 심어둔 엣지를 없음에서 강함까지 스윕하면 PBO는 0.5에서 0으로 뚝 떨어지지 않습니다 — 단조로운 경사를 따라 미끄러지듯 내려가고, 선택된 전략의 아웃오브샘플 샤프는 한 걸음씩 그것을 맞이하며 상승합니다:

심어둔 진짜 샤프(연율화) PBO 선택된 전략의 OOS 샤프(연율화)
0.00 0.52 −0.05
0.48 0.44 0.19
0.95 0.21 0.81
1.59 0.03 1.65
2.38 0.001 2.48
3.17 0.00 3.29

두 데이터 열을 함께 읽으십시오. 진짜 엣지가 제로일 때 PBO는 0.52이고 선택된 전략은 아웃오브샘플에서 −0.05를 법니다 — 다시 동전 던지기이고, 돈을 잃는 승자입니다. 엣지를 살짝만 더하면(연율화 0.48) PBO는 0.44로 내려갑니다. 연율화 진짜 샤프 0.95 — 진짜로 소박하고 믿을 만한 엣지 — 에 이르면 PBO는 이미 0.21이고 아웃오브샘플 샤프는 0.81까지 올라갔습니다. 1.59에서는 0.03; 2.38에서는 0.001; 3.17에서는 사실상 0.00이며, 선택된 전략은 아웃오브샘플에서 3.29를 지니고 있습니다. 진짜 엣지가 커질수록 PBO는 단조롭게 떨어지고, 승자의 아웃오브샘플 성과는 발맞춰 상승합니다 — 둘은 양쪽에서 본 같은 사실입니다.

이것이 PBO를 실무에서 쓸 수 있게 만드는 속성입니다: 이진 알람이 아니라 연속적인 과적합 온도계입니다. PBO 0.21은 그저 "과적합이 아니다"라고 말하는 것이 아닙니다 — 당신의 선택이 부분적인 아웃오브샘플 스킬을 가지고 있다고 말합니다: 인샘플 승자는 79%의 경우 아웃오브샘플 중앙값을 이기지만, 엣지가 얇아서 다섯 개 분할 중 하나는 여전히 그것을 파묻습니다. 신호를 강화하거나, 유니버스를 좁히거나, 그리드를 가지치기할 때 그 숫자가 움직이는 것을 지켜보며 어느 방향이 정직한지 알 수 있습니다. 논문 자체의 경험칙 — PBO가 0.05를 넘으면 기각 — 은 이 경사에서 자연스럽게 나옵니다: 연율화 샤프 ~1.5 아래에서는 서치가 그것을 통과하지 못했고; ~1.6 위에서는 통과했습니다. 하지만 경사 그 자체가 단일 컷오프보다 더 많은 정보를 담고 있습니다, 과적합인지 아닌지뿐 아니라 동전 던지기에 얼마나 가까운지도 알려주기 때문입니다.

4막 — 현실적인 함정: 아름다운 백테스트, 무가치하다고 공인되다

순수한 랜덤 워크 위에서 빛나는 이동평균 크로스오버 파라미터 그리드가 인샘플 샤프 2.33의 유혹적인 밝은 셀 하나를 보여주고, 그 옆에는 동일한 승자의 아웃오브샘플 결과가 제로 아래에 중심을 둔 채 흩뿌려져 있으며, PBO 게이지가 절반 근처에 고정되어 있고 무가치하다고 공인됨이라 적힌 캡션이 있는 그림

iid 노이즈 null은 정직하지만 묵살하기 쉽습니다 — "내 전략은 랜덤 정규분포 열이 아니야." 그러니 여기 실무자가 실제로 걸어 들어가는 모양의 함정이 있습니다. 세상에서 가장 많이 백테스트된 규칙인 이동평균 크로스오버를 예로 듭시다: 빠른 MA가 느린 MA 위로 교차하면 롱, 아니면 플랫. 그리드를 만듭니다 — 빠른 길이 10개 ×\times 느린 길이 17개, 유효한 fast-below-slow 쌍만 남겨서, K = 170개 구성입니다. 이제 그 그리드를 증명 가능하게 엣지가 제로인 시리즈, 즉 순수한 랜덤 워크 위에서 돌립니다. 찾을 것이 아무것도 없습니다. 크로스오버는 랜덤 워크를 예측할 수 없습니다. 답이 "전략 없음"이라는 것을 우리는 알고 있습니다.

그리드는 그것을 모릅니다. 승자를 건네주고, 그 승자는 유혹적입니다:

진단(하나의 대표적인 랜덤 워크 행렬, seed 3000, K = 170, S = 16)
최고 인샘플 샤프(연율화) 2.33
PBO 0.573
중앙값 아웃오브샘플 샤프(연율화) −0.22
아웃오브샘플 손실 확률 0.63
아웃오브샘플-대-인샘플 저하 기울기 −0.92
중앙값 로짓 λ\lambda −0.25

이것은 하나의 시드가 지정된 행렬입니다. 60개의 독립적인 랜덤 워크 행렬에 걸쳐 평균 내면 동일한 진단은 PBO 0.463 ± 0.223, 선택된 인샘플 샤프 0.97이 0.04로 감쇠, P(OOS 손실) 0.47을 읽습니다 — 통계적으로 null과 구별되지 않습니다. seed 3000의 0.573은 ~0.5 null 밴드의 높은 쪽에 있는 하나의 추출입니다 — 동전 던지기 값 주변의 표본추출 노이즈이며, ±0.223 행렬 간 스프레드 안에 충분히 들어옵니다 — 그리고 이야기는 어느 쪽이든 동일합니다.

이동평균 크로스오버에서 인샘플 연율화 샤프 2.33은 피치덱에 들어갈 법한 결과입니다. 이것은 2막에서 우리가 진짜로 심어둔 엣지의 아웃오브샘플 샤프(2.34 — 사실상 동률)와 사실상 같습니다. 백테스트에서 멈췄다면 당신은 여기에 자금을 투입했을 것입니다. CSCV는 거부합니다. 여기서 PBO는 동전 던지기입니다: 60개 행렬에 걸쳐 평균 0.463, 이 특정 행렬에서는 0.573 — 둘 다 이 서치에 아웃오브샘플 스킬이 없다고 말합니다. 0.573을 과잉 해석하지 마십시오: ½보다 0.073 위에 있을 뿐이며, 0.5 null 주변의 표본추출 노이즈이고 ±0.223 행렬 간 밴드 안에 충분히 들어옵니다; 진짜로 0.5를 넘는 PBO — 인샘플 성공이 아웃오브샘플 실패를 능동적으로 예측하는 지점 — 는 이 랜덤 워크가 담고 있지 않은 반지속성 또는 거래비용 구조를 필요로 합니다(정직성에 관한 노트 참고). 이 행렬에서 중앙값 로짓 −0.25는 중앙값 인샘플 승자를 상대적 아웃오브샘플 순위 약 0.44에 놓습니다(도출: 1/(1+e0.25)1/(1+e^{0.25})) — 대략 170개 중 75위입니다(도출: 0.44×1710.44 \times 171), 이끌기로 되어 있던 필드의 중간보다 살짝 아래입니다. 그 승자의 중앙값 아웃오브샘플 샤프는 −0.22음수입니다 — 그리고 **63%**의 경우 아웃오브샘플 손실을 냅니다. 아웃오브샘플 기댓값이 손실인 백테스트 샤프 2.33: 신기루의 정의입니다.

−0.92의 저하 기울기는 두 번째 칼입니다. 선택된 승자의 각 분할 아웃오브샘플 샤프를 그 인샘플 샤프에 회귀시키면; 기울기는 가파르게 음수입니다 — 어떤 구성이 인샘플에서 더 좋아 보일수록, 아웃오브샘플에서 더 나빠집니다. 이것은 기억을 가진 시리즈에서의 과적합의 지문입니다: 크로스오버는 훈련 블록의 일시적인 패턴에 달라붙는데, 이는 랜덤 워크의 인공물이므로 아웃오브샘플에서 역전됩니다. 기울기를 과잉 해석하지 않도록 짚어둘 만한 미묘한 점 하나: 음의 기울기 그 자체가 판정은 아닙니다. 2막의 진짜 엣지 레짐조차 음의 저하 기울기(−0.52)를 가집니다 — 평균 회귀는 항상 선택된 최댓값을 아웃오브샘플에서 약간 끌어내립니다. 신기루를 진짜 엣지와 구별하는 것은 기울기가 음수라는 사실이 아니라 승자가 어디에 떨어지는가입니다: 진짜 엣지는 조금 되돌려주면서도 상위 근처에 머물고(PBO 0.001), 신기루는 동전 던지기 선에 앉아 있으며(평균 PBO 0.463, 이 시드에서 0.573), 그 승자는 아웃오브샘플 중앙값 위에 있을 확률이 아래에 있을 확률보다 크지 않습니다. 기울기는 얼마나 수축하는지를 읽는 용도이고; PBO는 여전히 일반화되는지를 읽는 용도입니다. 신기루는 둘 다에서 실패합니다.

이것이 PBO가 raw 백테스트 옆에 자리를 차지할 자격이 있는 이유입니다. 인샘플 샤프 2.33은 거짓말이 아닙니다 — 그 전략은 그 랜덤 워크 위 인샘플에서 정말로 그것을 벌었습니다. 그것은 선택이며, 익숙한 규칙을 걸치고 현실적으로 보이는 그리드 위에 있고, 에쿼티 커브를 아무리 들여다봐도 드러나지 않습니다. 오직 절차의 값을 매길 때만 드러납니다.

5막 — PBO와 DSR: 두 개의 정직한 질문, 하나의 플래토

동일한 파라미터 서치를 서로 다른 각도에서 겨냥하는 두 개의 상호 보완적인 측정 도구, 하나는 PBO라 라벨링되어 선택 절차가 과적합했는지를 물으며 전체 훈련-테스트 리샘플링을 읽고, 다른 하나는 DSR이라 라벨링되어 이 샤프 하나가 운을 넘어서는지를 물으며 단일 승리 막대를 디플레이트하는 그림

PBO와 디플레이티드 샤프 비율은 동일한 정직성 검사의 두 반쪽이며, 서로 중복되지 않습니다 — 서로 다른 대상을 심문합니다:

디플레이티드 샤프 비율(DSR) 백테스트 과적합 확률(PBO)
재판받는 대상 승자 선택 절차
질문 이 샤프는 N번의 시행에 걸쳐 운이 살 수 있는 것을 넘어서는가? 인샘플 최선을 고르는 것이 아웃오브샘플에서 일반화되는가?
방법 모수적 — 유의성 임계값을 디플레이트 비모수적 — 모든 C(S, S/2) 훈련/테스트 분할을 리샘플링
Null 값 DSR ≈ 0.5(승자가 노이즈 천장과 겨우 맞아떨어짐) PBO ≈ 0.5(승자가 아웃오브샘플에서 동전 던지기)
원하는 방향 DSR이 1에 가까움 PBO가 0에 가까움
시행 횟수 N이 필요한가? 예 — 그리고 상관된 그리드는 N을 모호하게 만듦 아니오 — 분할 리샘플링이 종속성을 자연스럽게 다룸

둘은 심지어 서로 의견이 엇갈릴 수 있으며, 그 불일치는 진단적입니다. DSR은 상관된 그리드에 속아 과잉 디플레이션을 일으킬 수 있습니다(DSR 글의 마지막 막 전체가 다루는 함정입니다 — 640개의 상관된 셀은 640번의 독립적인 시행이 아니며, raw 개수를 넣으면 노이즈 천장이 과도하게 부풀려집니다). PBO는 결코 시행 횟수를 세지 않습니다; 실제 수익률 행렬을 리샘플링하므로, 그리드 상관관계가 분할에 공짜로 녹아듭니다. 반대로, PBO는 절차가 일반화된다는 것은 말해주지만 승자가 허들 레이트를 넘는지는 말해주지 않습니다 — 서치는 낮은 PBO를 가지면서도 아웃오브샘플 샤프가 필드 중앙값보다는 믿을 만하게 위에 있지만 거래하기에는 너무 작은 무언가를 선택할 수 있습니다. DSR은 승자의 값을 매기고; PBO는 절차의 값을 매깁니다. 둘 다 돌리십시오.

나란히 놓인 두 개의 삼차원 파라미터-그리드 표면: 왼쪽은 좋은 이웃 구성들의 넓고 매끄러운 플래토로 모든 훈련-테스트 분할이 동의하여 낮은 PBO를 주고, 오른쪽은 평평한 노이즈로 둘러싸인 외로운 뾰족한 피크 하나로 서로 다른 분할이 의견을 달리하여 PBO가 절반 근처가 되는 그림

이 모든 것의 밑바탕에는 기하학적 직관이 있으며, 그것이 가져갈 가치가 가장 큰 것입니다. 진짜 엣지는 플래토이고; 과적합은 뾰족한 피크입니다. 진짜 효과가 그리드를 이끌 때, 좋은 구성들은 뭉칩니다 — fast=3/slow=55가 작동하고, 그 이웃들도 작동합니다, 모두가 동일한 기저 신호를 샘플링하고 있기 때문입니다. 그 플래토는 리샘플링에 견고합니다: 16개 중 어느 8개 블록으로 훈련하든, 인샘플 승자는 동일한 넓은 영역에서 나오며, 그 영역은 아웃오브샘플에서도 여전히 상위에 있습니다. 많은 분할이 동의함 → 낮은 PBO. 과적합이 그리드를 이끌 때, "승자"는 외로운 뾰족한 피크입니다 — 훈련 블록의 노이즈에 우연히 맞아떨어진 셀 하나가, 평범한 이웃들에 둘러싸여 있습니다. 그 피크는 취약합니다: 다른 훈련/테스트 분할은 다른 외로운 피크에 왕관을 씌우고, 그중 어느 것도 테스트 세트까지 살아남지 못합니다. 분할들이 의견을 달리함 → PBO ≈ 0.5. 이것은 우리의 플래토 분석 연구가 파라미터 맵 쪽에서 도달한 것과 동일한 교훈입니다; PBO는 사실상, 데이터의 모든 대칭적 리샘플링에 걸쳐 동시에 측정된 플래토-대-피크 구별입니다.

이것은 또한 왜 CSCV가 실무자 기본값인 워크포워드 분할을 능가하는지도 설명합니다. 워크포워드는 하나의 과거→미래 절단과 하나의 판정을 줍니다; CSCV는 12,870개의 대칭적인 절단을 주고 승자가 그 전부를 견뎌내는지를 묻습니다. 뾰족한 피크는 운으로 하나의 임의적인 절단은 견뎌낼 수 있습니다; 12,870개는 견뎌낼 수 없습니다. (López de Prado의 조합 퍼지드 교차검증(CPCV)은 정확히 이 아이디어를 확장하여 퍼징과 엠바고를 통해 순차적 종속성 하에서 단순 리샘플링이 겪을 수 있는 레이블 누출을 제거합니다 — 레이블이 겹치는 순간 자연스러운 다음 단계입니다.) 동일한 구조적 경고가 시리즈 전체를 관통합니다: 당신이 최적화하는 지표가 몰래 당신의 전략을 고르고(목적함수 설계), 한 바(bar)의 누출이 노이즈에서 샤프 15를 제조하며(미래 참조 편향), 다중 검정 서치가 노이즈에서 샤프 1.63을 제조합니다(DSR) — 그리고 여기서는, 리샘플링된 선택 절차가 오직 PBO만이 폭로할 수 있는 무가치한 승자를 제조합니다.

정직성에 관한 노트

네 가지 유보 조항을 솔직하게 밝힙니다. 통제된 연구는 오직 그 한계를 명시함으로써만 결론을 얻을 자격이 있기 때문입니다.

  • 데이터 생성 과정은 합성 데이터입니다 — 의도적으로. null에는 iid 정규분포 노이즈를, 엣지 스윕에는 심어둔-샤프 필드를, 함정에는 순수한 랜덤 워크 위의 이동평균 그리드를 사용합니다. 어느 것도 시장의 현실성에 대한 주장이 아닙니다; 각각은 통제된 실측값을 위해 선택되었습니다. PBO가 "스킬 없음"에서 0.5를, "진짜 스킬"에서 0을 읽는다는 것은 오직 어느 쪽이 어느 쪽인지 우리가 아는 데이터를 생성함으로써만 증명할 수 있습니다. 실제 수익률은 팻테일이고, 자기상관되어 있고, 비정상적입니다; 여기서의 결과물은 전략이 아니라 캘리브레이션된 진단입니다.
  • PBO의 null은 0.5이며, 이것은 우연이 아니라 설계된 특징입니다. PBO를 보고할 때마다 이것을 명시하십시오, 그렇지 않으면 독자의 절반은 0.5를 "반쯤 안전"으로 취급할 것이기 때문입니다. 아웃오브샘플 스킬이 없는 서치는 0.5에 자리 잡습니다; 진짜 엣지는 그것을 0으로 몰아갑니다. PBO ≈ 0.5에는 "결백한" 판독이 없습니다 — 그것은 완전한 과적합 판정입니다.
  • PBO > 0.5는 우리가 억지로 만들어내지 않는 "역설적인" 영역입니다. PBO가 체계적으로 0.5를 넘는다는 것은 인샘플 성공이 아웃오브샘플 실패를 능동적으로 예측한다는 뜻입니다 — IS 최악의 구성이 OOS 최고가 됩니다. 이는 단순한 엣지의 부재가 아니라 반지속성 또는 거래비용 구조를 필요로 합니다. 우리의 과적합 서치는 ≈ 0.5 위에 자리 잡습니다(iid 노이즈에서 0.476; MA 그리드에서 평균 0.463; 하나의 높은 쪽 시드에서 0.573, 60개 행렬에 걸친 ±0.14–0.22 몬테카를로 밴드 안), 이는 이미 "아웃오브샘플 스킬 없음"을 뜻합니다. 우리는 역설적인 영역을 제조하지 않습니다; 과적합이 당신을 동전 던지기 선 위에 착지시킨다는 것만 보여줄 뿐이며, 그것으로 충분히 결정적입니다.
  • PBO는 행렬이 주어지면 결정론적입니다; 무작위인 것은 행렬뿐입니다. 고정된 MS = 16에 대해, C(16, 8) = 12,870개 분할 전부가 완전히 열거됩니다 — 부트스트랩 시드도 없고 PBO 자체에는 표본추출 분산도 없습니다. 우리가 보고하는 스프레드(null에서 ±0.137, MA 그리드에서 ±0.223)는 추정량 내부가 아니라 60개의 몬테카를로 행렬에 걸친 분산입니다. 양쪽의 샤프는 약 500개의 관측치로 추정됩니다 — CSCV 블록 절단 후 496개인데, T = 1000을 16개의 동일한 블록으로 나누면 992개의 사용 가능한 행이 남고, 이것이 496개씩 두 절반으로 나뉘기 때문입니다; 샤프는 순서 불변이므로, 훈련 세트나 테스트 세트 내부의 행 순서는 중요하지 않습니다(수익률/드로다운 비율 같은 경로 의존적 지표라면 중요했을 것입니다).

핵심 요점

  1. PBO는 승자가 아니라 선택 절차의 값을 매기며 — 그 null은 0.5입니다. 인샘플에서 최선으로 고른 구성이 아웃오브샘플에서 하위 절반에 떨어질 확률입니다. PBO ≈ 0.5는 동전 던지기(완전한 과적합)이고; PBO ≈ 0은 신뢰할 만한 선택입니다. 당신이 원하는 것은 제로에 가까운 값이며, 이것을 큰 소리로 말해야 합니다, 훈련받지 않은 눈에는 0.5가 "안전"으로 읽히지만 정확히 그 반대를 뜻하기 때문입니다.
  2. 캘리브레이션이 작동함을 증명합니다. 200개의 iid 제로 엣지 전략에서 최고 인샘플 연율화 샤프 1.98은 아웃오브샘플에서 0.06으로 무너지고 PBO = 0.476입니다 — 노이즈는 동전 던지기 선에 앉아, 아웃오브샘플에서 47.5%의 경우 돈을 잃습니다. 진짜 엣지(연율화 샤프 2.38)를 심으면 인샘플 3.73은 아웃오브샘플 2.34로 살아남고 PBO는 0.001로 떨어집니다. 두 개의 끝점, 하나의 캘리브레이션된 진단.
  3. PBO는 연속적인 온도계입니다. 심어둔 엣지를 스윕하면 PBO는 단조롭게 떨어집니다 — 연율화 진짜 샤프 0.00 / 0.48 / 0.95 / 1.59 / 2.38 / 3.17에서 0.52 → 0.44 → 0.21 → 0.03 → 0.001 → 0.00 — 선택된 전략의 아웃오브샘플 샤프는 발맞춰 상승합니다(−0.05에서 3.29까지). 이것은 그저 예/아니오가 아니라 동전 던지기에 얼마나 가까운지를 측정합니다.
  4. 현실적인 함정이 핵심입니다. 순수한 랜덤 워크 위의 170-구성 이동평균 그리드는 평균적으로 선택된 인샘플 샤프가 겨우 0.97이며 0.04로 감쇠하고, PBO는 0.463입니다 — 통계적으로 null과 구별되지 않으며, 엣지 없는 서치가 null처럼 읽힙니다. 하나의 대표적인 행렬에서는 신기루가 생생합니다: 최고 인샘플 샤프 2.33(피치덱 숫자), 중앙값 아웃오브샘플 샤프 −0.22, 아웃오브샘플 손실 확률 63%, PBO 0.573, 그리고 가파른 저하 기울기 −0.92. 승자 옆에 인쇄된 모든 통계량에는 보이지 않고 절차의 값을 매길 때만 보이는, 음의 아웃오브샘플 기댓값을 가진 아름다운 백테스트.
  5. PBO를 디플레이티드 샤프 비율과 짝지으십시오. DSR은 승자의 값을 매기고(N번의 시행이 주어졌을 때 이 샤프는 운을 넘어서는가?); PBO는 절차의 값을 매깁니다(선택이 일반화되는가?). DSR은 시행 횟수가 필요하며 상관된 그리드에 속을 수 있습니다; PBO는 행렬을 리샘플링하며 결코 시행을 세지 않습니다. 진짜 엣지는 많은 분할이 동의하는 넓은 플래토입니다(낮은 PBO); 외로운 인샘플 뾰족한 피크는 과적합입니다(분할들이 의견을 달리함, PBO ≈ 0.5). 둘 다 돌리고, 플래토를 읽으십시오.

서치의 승자는 결백이 증명될 때까지 유죄입니다 — 그리고 PBO는 서치가 당신에게 건네는 알리바이가 아니라 서치 그 자체를 반대 신문합니다. 승자가 인샘플에서 얼마나 좋아 보이는지는 무시하고, 그것을 고르는 것이 12,870가지 방식으로 다시 잘려도 살아남는 결정이었는지만 묻습니다. 그렇지 않을 때 — 당신의 근사한 2.33 샤프가 아웃오브샘플에서 하위 절반에 떨어지는 일이 그렇지 않은 만큼이나 자주 일어난다는 것이 드러날 때 — 당신은 전략을 찾은 것이 아닙니다. 가장 운 좋은 동전을 찾은 것이고, PBO는 그것이 뒤집히는 것을 잡아내는 숫자입니다.

전체 실험 — null 캘리브레이션 하니스, 심어둔 엣지 온도계 스윕, 랜덤 워크 그리드 함정, 그리고 이 글의 모든 숫자를 하나의 결정론적 스크립트에서 재현할 수 있음 — 은 pbo-search.marketmaker.cc의 자매 논문에 있으며, 코드와 데이터는 github.com/suenot/pbo-search에 있습니다.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

시장에서 앞서 나가세요

뉴스레터를 구독하여 독점적인 AI 트레이딩 통찰력, 시장 분석 및 플랫폼 업데이트를 받아보세요.

귀하의 개인정보를 존중합니다. 언제든지 구독을 취소할 수 있습니다.