순열 검정(permutation test) — 전략 수익이 우연인지 무작위 대조군으로 확인하기
백테스트에서 200거래 +24%가 나왔다고 해 봅시다. 이 숫자만으로는 그 전략에 실제로 방향을 맞히는 능력이 있는지, 아니면 그 기간 시장 흐름과 운이 겹친 결과인지 구분할 수 없습니다. 순열 검정(permutation test)은 이 질문에 "같은 시장, 같은 거래 횟수, 같은 롱·숏 비율에서 방향만 무작위로 정했다면 이 정도 성적이 얼마나 자주 나오는가"로 답합니다. 분포 가정이 거의 필요 없고 코드 몇 줄로 돌릴 수 있어 전략 검증의 기본 도구로 쓰입니다. 본문 숫자는 모두 계산 구조를 설명하기 위한 가정 예시입니다.
1. 기본 발상: 신호와 수익률의 짝을 끊는다
전략이 하는 일은 결국 "이 시점에는 롱, 저 시점에는 숏"이라는 신호를 내는 것입니다. 각 거래의 손익은 신호 방향과 그 보유 구간의 시장 수익률을 곱한 값입니다. 신호에 정보가 있다면 신호와 수익률 사이에 짝이 맞아야 하고, 정보가 없다면 짝을 아무렇게나 바꿔도 성적이 크게 달라지지 않아야 합니다.
순열 검정은 이 짝을 일부러 끊습니다. 신호 목록을 무작위로 섞어 다시 수익률에 붙이고 총손익을 계산합니다. 이것을 1,000번 반복하면 "정보가 없는 전략"이 만들어낼 수 있는 성적의 분포, 즉 무작위 대조군이 생깁니다. 실제 성적이 이 분포의 꼬리 끝에 있으면 우연으로 설명하기 어렵고, 가운데에 있으면 우연과 구분되지 않습니다.
① 실제 전략의 거래 목록과 총손익 S를 계산한다
② 신호 방향 목록(롱 140개 · 숏 60개 등)을 그대로 유지한 채 순서만 무작위로 섞는다
③ 섞인 방향을 원래 거래 구간의 수익률에 붙여 총손익을 다시 계산한다
④ ②~③을 N번(예: 1,000번) 반복한다
⑤ 무작위 결과 중 S 이상인 개수 k를 센다
⑥ p값 = (k + 1) ÷ (N + 1)
⑥에서 분자와 분모에 1을 더하는 이유는 실제 결과도 가능한 배열 중 하나로 세기 때문입니다. 이렇게 하면 p값이 0이 되는 일이 없고, 1,000번 반복에서 얻을 수 있는 가장 작은 p값은 1 ÷ 1,001 ≈ 0.001입니다.
2. 계산 예시: 200거래 +24% 전략
· 거래 수: 200건 (롱 140 · 숏 60)
· 실제 총손익(수수료 전): +24.0% (거래당 평균 +0.12%)
· 방향을 섞어 1,000번 재계산한 무작위 대조군
· 중앙값: +4.1%
· 상위 5% 경계: +21.5%
· 상위 1% 경계: +27.8%
· +24.0% 이상이 나온 횟수 k = 37번
· p값 = (37 + 1) ÷ (1,000 + 1) = 38 ÷ 1,001 ≈ 0.038
해석은 "방향 정보가 전혀 없는 전략이라도 이 정도 성적은 약 3.8%의 확률로 나온다"입니다. 흔히 쓰는 기준 5%보다는 작으니 우연만으로 설명하기는 어렵다고 볼 수 있지만, 1% 경계(+27.8%)에는 못 미칩니다. 이 정도는 "가능성이 있는 후보"이지 확정이 아닙니다.
p값 자체에도 오차가 있습니다. N번 반복으로 추정한 p값의 표준오차는 대략 √(p × (1 − p) ÷ N)입니다. p = 0.038, N = 1,000이면 √(0.038 × 0.962 ÷ 1,000) ≈ 0.006이라 실제 p값은 대략 0.026~0.050 범위로 봐야 합니다. 경계 근처 결과라면 반복 횟수를 10,000번으로 늘려 오차를 줄입니다.
3. 왜 0이 아니라 무작위 대조군과 비교하는가
위 예시에서 무작위 대조군의 중앙값이 0이 아니라 +4.1%라는 점이 중요합니다. 롱이 140번, 숏이 60번이라 전략이 애초에 롱 쪽으로 기울어 있고, 시험 기간 시장이 올랐다면 방향을 무작위로 정해도 평균적으로 이익이 납니다.
· 보유 구간 평균 시장 수익률: +0.05%
· 롱 140건 기여: 140 × (+0.05%) = +7.0%
· 숏 60건 기여: 60 × (−0.05%) = −3.0%
· 방향 정보 없이도 기대되는 합계 = +4.0%
→ 실제 성적 +24.0% 중 방향 판단이 보탠 몫은 약 24.0 − 4.0 = 20%포인트
성적을 0과 비교하면 이 +4.0%까지 전략의 실력으로 잘못 계산됩니다. 상승장에서 롱만 많이 하는 전략은 신호가 아무 의미 없어도 백테스트가 좋아 보입니다. 롱·숏 개수를 유지한 채 섞는 순열 검정은 이런 시장 방향 효과를 대조군 안에 자동으로 넣어 줍니다. 같은 문제를 다른 방식으로 다룬 글이 무작위 진입 벤치마크와 시장 조정 잔차 수익률입니다.
4. 유의하다는 것과 돈이 남는다는 것은 다르다
순열 검정은 "신호에 정보가 있는가"를 묻습니다. "수수료를 내고도 이익이 남는가"는 별개의 질문입니다.
· 왕복 수수료 0.10% × 200거래 = −20.0%
· 실제 총손익: +24.0% − 20.0% = +4.0%
· 무작위 대조군 중앙값: +4.1% − 20.0% = −15.9%
→ 무작위보다는 확실히 낫지만, 남는 몫은 +4.0%
→ 슬리피지가 거래당 0.02%만 더 붙어도 200 × 0.02% = 4.0%가 추가로 빠져 손익 0
신호가 무작위보다 낫다는 증거가 있어도 거래당 우위(+0.10%)가 비용(0.10%)과 비슷하면 실제로는 남는 것이 거의 없습니다. 그래서 순열 검정은 수수료 전 손익으로 신호의 정보를 확인하고, 수수료와 슬리피지를 넣은 손익은 따로 계산해야 합니다. 거래당 비용이 승률 기준을 얼마나 끌어올리는지는 수수료를 포함한 손익분기 승률에서 계산해 볼 수 있습니다.
5. 그냥 섞으면 안 되는 경우: 블록 순열
기본 순열 검정은 각 거래가 서로 독립적이라는 가정 위에 있습니다. 그런데 코인 시장은 변동성이 큰 시기와 작은 시기가 몰려서 나타나고, 전략 신호도 비슷한 방향이 연달아 나오는 경우가 많습니다. 이런 구조를 무시하고 한 건씩 섞으면 무작위 대조군의 퍼짐이 실제보다 좁게 나와 p값이 지나치게 작아질 수 있습니다.
· 200거래를 연속된 10건씩 묶어 20개 블록으로 나눈다
· 블록 내부 순서는 유지하고 블록의 순서만 섞는다
· 연속 신호와 변동성 몰림이 대조군에도 남는다
· 예: 한 건씩 섞었을 때 p ≈ 0.038 → 블록으로 섞었을 때 p ≈ 0.07처럼 커질 수 있음
블록 길이는 신호가 몰리는 정도에 맞춰 정하고, 길이를 바꿔도 결론이 유지되는지 확인하는 편이 안전합니다. 같은 발상을 신뢰구간 계산에 쓰는 방법은 블록 부트스트랩 신뢰구간에, 수익률이 서로 얼마나 이어지는지 재는 방법은 수익률 자기상관에 정리돼 있습니다.
6. 설정을 여러 개 시험했다면 탐색 과정 전체를 섞는다
앞의 p ≈ 0.038은 전략을 단 하나만 시험했을 때의 값입니다. 이동평균 길이와 손절 폭을 바꿔 가며 50개 설정을 돌린 뒤 가장 좋은 것을 골랐다면 이야기가 달라집니다.
· 아무 정보가 없어도 5% 기준을 우연히 넘는 설정 기대 개수: 50 × 0.05 = 2.5개
· 본페로니 보정 기준: 0.05 ÷ 50 = 0.001
· 1,000번 반복으로 얻을 수 있는 최소 p값 ≈ 0.001 → 반복을 10,000번 이상으로 늘려야 판정 가능
탐색 포함 순열
· 섞은 데이터 하나마다 50개 설정을 전부 다시 돌리고 그중 최고 성적을 기록
· 이것을 1,000번 반복 → "50개 중 1등"의 무작위 분포
· 이 분포의 상위 5% 경계가 +33%라면 실제 1등 +24%는 통과하지 못함
실제 결과를 "1등을 고른 결과"로 만들었으니 대조군도 "무작위 데이터에서 1등을 고른 결과"여야 공정한 비교가 됩니다. 시험한 설정 수를 기록하지 않으면 이 보정 자체가 불가능합니다. 시도 횟수가 성적을 부풀리는 구조는 다중검정의 함정에서, 판정 기준을 결과 전에 고정하는 방법은 백테스트 사전 등록에서 자세히 다룹니다.
7. 실무 체크리스트
· 거래 목록에 진입 시점에 알 수 없던 정보가 섞이지 않았는지 확인
· 롱·숏 개수와 보유 구간은 유지하고 방향만 섞기
· 반복 횟수: 기본 1,000번, 경계 근처면 10,000번
· 연속 신호가 많으면 블록 순열도 같이 계산
· 여러 설정을 시험했다면 탐색 과정 전체를 섞기
결과를 기록할 때
· 실제 성적, 대조군 중앙값, 상위 5%·1% 경계, k, N, p값
· 수수료 전 손익과 수수료 후 손익을 따로
· 시험한 설정 수 전체
첫 항목이 빠지면 나머지가 모두 의미를 잃습니다. 미래 정보가 들어간 거래 목록은 순열 검정도 쉽게 통과하기 때문입니다. 이 문제는 미래참조 편향에서 따로 다룹니다. 순열 검정은 과거 데이터 한 구간 안에서의 판정이므로, 통과한 전략도 워크포워드 분석이나 모의 거래로 앞으로의 구간에서 다시 확인해야 합니다. 거래 수가 적으면 대조군 자체가 넓게 퍼져 어떤 전략도 통과하기 어려운데, 필요한 표본 크기는 거래 표본 크기를 참고하세요.
정리
순열 검정은 신호와 수익률의 짝을 무작위로 섞어 "정보가 없는 전략"의 성적 분포를 만들고, 실제 성적이 그 분포에서 어디에 있는지로 우연 여부를 판정합니다. p값은 (k + 1) ÷ (N + 1)로 계산하며, 예시의 200거래 +24% 전략은 1,000번 중 37번이 같은 성적 이상을 내 p ≈ 0.038이었습니다. 롱·숏 비율을 유지해 섞으면 시장 방향 효과(+4.0%)가 대조군에 자동으로 들어가고, 연속 신호가 있으면 블록 단위로, 여러 설정을 시험했다면 탐색 과정 전체를 섞어야 합니다. 그리고 유의한 신호라도 수수료 20%를 빼면 +4.0%만 남을 수 있으므로 비용 반영 손익은 별도로 확인해야 합니다.
주의
본문의 거래 수, 롱·숏 개수, 총손익, 대조군 분위수, 반복 횟수, p값, 수수료·슬리피지 수치는 모두 계산 구조를 설명하기 위한 가정 예시이며 특정 전략이나 특정 계좌의 실제 측정값이 아닙니다. 블록 순열과 탐색 포함 순열의 p값 변화도 경향을 보여주기 위한 예시입니다. 순열 검정을 통과했다고 해서 앞으로의 수익이 보장되는 것은 아니며, 시장 구조가 바뀌면 같은 신호의 성적도 달라집니다. 이 글은 교육 정보이며 특정 자산의 매매 권유가 아닙니다. 코인과 선물 거래는 원금 손실 위험이 있고, 투자 판단과 그 결과는 본인 책임입니다.
NOONOO TRADING 무료 채팅방에서 실시간 트레이딩을 같이 보세요.
봇에서 시작하기📈 OKX 신규 가입 시 거래 수수료 할인
OKX 수수료 할인 가입 →