백테스트를 고칠수록 실전에서 멀어지는 이유 — 초보가 공부한 과최적화와 워크포워드 검증

작성자

카테고리:

결론부터 말씀드리면, 제가 과최적화(오버피팅)를 공부하고 나서 이해한 결론은 이렇습니다. 백테스트 성적을 올리려고 조건을 고치고 또 고치다 보면, 봇이 ‘시장의 규칙’이 아니라 ‘지나간 데이터의 우연’을 외우게 될 수 있다고 합니다. 그래서 중요한 건 “얼마나 좋은 숫자가 나왔나”보다 “한 번도 보여주지 않은 기간에서도 버티나”, “몇 번이나 시도해서 나온 숫자인가”를 같이 보는 것이었습니다. 이걸 확인하는 대표적인 방법이 시간을 앞으로 한 칸씩 옮겨 가며 검증하는 ‘워크포워드’라고 합니다.

미리 말씀드리면 저는 코딩도 초보이고, 통계나 매매 로직은 더 초보입니다. 이 글은 전문가의 해설이 아니라, 제가 공부한 내용을 정리해 같은 처지의 분들과 나누는 학습 노트입니다. 잘못 이해한 부분이 있다면 댓글로 알려주시면 고쳐 두겠습니다.

이걸 왜 공부하게 됐나

제 첫 봇은 백테스트에서 승률 16.7%, 손익비 0.07이라는 성적표를 받았고, 실전(실계좌)에서는 승률이 3할 정도였지만 결국 손실로 끝났습니다. 그 뒤로 “백테스트 숫자를 어디까지 믿어도 되나”가 늘 마음에 걸렸습니다. 이 부분은 백테스트는 좋은데 실전은 왜 깨지나와 백테스트가 거짓말을 하는 순간 — 미래 정보 누수와 순환논리를 정리한 글에서도 한 번씩 다뤘습니다.

두 번째 봇은 클로드(클로드 코드)에게 맡겨 만들고 있는데, 클로드가 남겨 둔 개발 일지를 읽다가 비슷한 문장이 계속 반복되는 걸 봤습니다. “따로 떼어 실험했을 땐 효과가 컸는데, 전체 전략에 넣고 다시 돌리니 오히려 성적이 깎였다 — 기각.” 이런 기록이 몇 번이나 연달아 나왔습니다. 또 어떤 날은 “개선 폭이 같은 설정을 다시 돌렸을 때 생기는 차이와 비슷한 크기라 판단 보류”라는 메모도 있었습니다. 솔직히 처음엔 무슨 말인지 몰라서, AI에게 하나씩 물어보며 공부를 시작했습니다.

찾아본 정의 — 과최적화란

여러 트레이딩 교육 자료에 따르면, 과최적화(Overfitting)는 전략이나 모델이 특정 과거 데이터에 너무 딱 맞춰져서, 그 안의 ‘진짜 흐름’이 아니라 ‘잡음(우연)’까지 학습해 버린 상태를 말합니다. 그래서 학습에 쓴 기간에서는 성적이 아주 좋은데, 처음 보는 기간에서는 성적이 뚝 떨어지는 게 대표적인 증상이라고 합니다.

제가 이해한 비유로 바꾸면 이렇습니다. 시험 기출문제 답을 통째로 외운 학생은 기출 시험에선 만점을 받지만, 숫자만 바뀐 새 문제에선 무너집니다. 과최적화된 봇은 ‘지난 3년의 기출문제’를 외운 학생과 비슷합니다.

이해한 만큼 정리 — 과최적화가 생기는 세 갈래

  • 조건이 너무 많을 때: 지표나 입력값(피처)을 계속 늘리면, 데이터가 가진 정보보다 봇이 외울 수 있는 구멍이 더 많아진다고 합니다. 그래서 “피처는 적게”가 자주 나오는 조언이었습니다.
  • 너무 많이 시도했을 때: 설정값을 바꿔 가며 수십 번 돌리면, 그중 하나는 순전히 운으로 좋아 보일 수 있습니다. 데이비드 베일리와 마르코스 로페즈 데 프라도의 논문에 따르면, 시도 횟수를 따지지 않고 결과만 보면 성과를 지나치게 낙관하게 된다고 합니다.
  • 검증 기간이 학습 기간과 섞일 때: 답을 이미 본 기간으로 다시 채점하면 당연히 점수가 잘 나옵니다. 그래서 학습에 쓰지 않은 기간으로 따로 확인하는 ‘표본 외(out-of-sample) 검증’이 기본이라고 합니다.

숫자로 확인해 보기 — “몇 번 시도했나”가 왜 중요한가

제일 와닿지 않았던 게 두 번째 갈래였습니다. 그래서 AI에게 이렇게 물어봤습니다. “효과가 전혀 없는 전략을 여러 번 시험한다고 할 때, 우연히 ‘통계적으로 의미 있어 보이는’ 결과가 하나라도 나올 확률은 얼마야?” 아래는 AI에게 계산시킨 결과입니다. (각 시험이 서로 독립이고, 우연히 좋아 보일 확률을 한 번에 5%로 둔 가정치입니다.)

시도한 횟수 하나라도 ‘우연히 좋아 보일’ 확률 제가 받은 느낌
1번 5.0% 이 정도면 믿을 만하다
5번 22.6% 벌써 다섯 번 중 한 번꼴
10번 40.1% 반반에 가까워짐
20번 64.2% 오히려 안 나오는 게 이상함
50번 92.3% 거의 확실히 ‘가짜 대박’이 나옴
100번 99.4% —

계산식은 말로 풀면 “한 번도 우연히 걸리지 않을 확률을 시도 횟수만큼 곱한 뒤, 1에서 빼기”입니다(1 − 0.95시도 횟수). 이 표를 보고 나서야, 백테스트를 스무 번쯤 고쳐 돌려 겨우 찾은 ‘좋은 설정’이 왜 위험한지 이해가 됐습니다. 앞에서 말한 논문의 ‘디플레이티드 샤프 비율(Deflated Sharpe Ratio)’도 이렇게 시도 횟수만큼 성적을 깎아서 보자는 아이디어라고 합니다. 다만 그 계산 방식까지는 아직 제대로 이해하지 못했습니다.

찾아본 해법 — 걸어가며 검증하는 ‘워크포워드’

위키백과와 트레이드스테이션 도움말에 따르면, 워크포워드 분석(Walk-Forward Analysis)은 과거 한 구간으로 설정을 정한 뒤, 바로 다음 구간에서 그 설정을 시험하고, 다시 창을 앞으로 옮겨 같은 일을 반복하는 검증 방법입니다. 1992년 로버트 파도(Robert Pardo)가 책에서 소개했다고 합니다.

제가 이해한 그림은 이렇습니다.

  • 1~3년 차 데이터로 공부시키고 → 4년 차 초반으로 시험
  • 창을 한 칸 밀어 1.x~4년 차로 공부시키고 → 그다음 구간으로 시험
  • 이렇게 걸어가며 모은 ‘시험 성적’만 이어 붙여서 최종 성적으로 봄

이렇게 하면 봇은 매번 ‘아직 오지 않은 미래’로만 채점받게 됩니다. 한 번의 시험이 아니라 여러 번의 시험을 모으니, 특정 시기 운이 좋았던 결과에 덜 속는다고 합니다. 두 번째 봇의 검증도 이 방식으로 돌리고 있는데, 공부 구간과 시험 구간 사이에 며칠 간격을 비워 두는 장치도 있었습니다. AI에게 물어보니, 라벨(정답)이 며칠 뒤 가격으로 정해지기 때문에 경계에서 미래 정보가 새지 않게 막는 장치라고 합니다.

내 봇에 겹쳐 보니 — 개발 일지에서 배운 세 가지 신호

개발 일지를 다시 읽어 보니, 클로드가 과최적화를 의심할 때 보던 신호가 크게 세 가지였습니다. (구체적인 설정값과 수치는 이 글에서 다루지 않습니다.)

신호 일지에 적힌 상황(요약) 제가 이해한 뜻
따로 떼면 좋은데, 합치면 나빠짐 어떤 필터가 단독 실험에선 효과가 컸지만, 전체 전략에 넣어 다시 학습·검증하니 성적이 깎임. 이런 일이 여러 번 연달아 일어남 부분 실험의 숫자는 ‘가능성’일 뿐, 전체에서 실제로 남는지 다시 봐야 함
뾰족한 봉우리 설정값을 조금 바꾸면 좋아졌다가, 조금 더 바꾸면 무너짐 좋은 설정은 ‘넓은 고원’처럼 주변 값도 괜찮아야 함. 한 점만 좋으면 우연일 가능성
재실행 편차만큼의 개선 같은 설정을 다시 돌려도 생기는 차이와 개선 폭이 비슷함 그 ‘개선’은 잡음일 수 있으니 채택 보류

하나 더 인상 깊었던 건, 최근 몇 달 데이터에서 아주 좋아 보이던 패턴이 전체 기간으로 다시 돌리니 거의 사라졌다는 기록이었습니다. 일지에는 이걸 “최근 국면의 착시”라고 적어 두었습니다. 그리고 제약 없는 백테스트에서 좋아 보이던 개선이, 실제 운영 규칙(최소 보유 기간 같은 제약)을 넣고 다시 돌리니 사라진 일도 있었습니다. 이건 백테스트엔 없고 실전엔 있는 마찰 — 슬리피지와 거래비용을 정리할 때 느꼈던 “백테스트엔 없고 실전엔 있는 것”과 같은 이야기 같았습니다.

돌아보면 제 첫 봇은 이런 확인을 하나도 거치지 않았습니다. 한 기간에서 숫자를 만들고, 그 숫자를 믿고 실계좌에 올렸습니다. 지금 와서야 “숫자가 좋았던 이유가 실력인지 우연인지 따져 볼 방법이 있었구나”를 알게 됐습니다.

초보인 제가 앞으로 해 볼 것

  • 시도 횟수 기록하기: 설정을 바꿔 돌릴 때마다 ‘몇 번째 시도인지’를 AI에게 표로 남기게 하려고 합니다. 코딩을 몰라도 “이번 실험을 실험 대장에 한 줄 추가해 줘”라고 하면 됩니다.
  • 결과 보기 전에 기준 먼저 적기: “이 정도 이상 좋아지고, 주변 값에서도 비슷하면 채택” 같은 판정 기준을 실험 전에 적어 두면, 결과를 보고 기준을 바꾸는 실수를 줄일 수 있다고 합니다.
  • 주변 값도 같이 돌려 보기: 제일 좋은 한 점만 보지 않고, 그 옆의 값들도 같이 비교하는 표를 AI에게 요청해 보려 합니다.
  • 같은 설정 두 번 돌리기: 개선 폭이 ‘다시 돌렸을 때 생기는 차이’보다 확실히 큰지 먼저 확인하려 합니다.

저처럼 초보라면, 처음부터 복잡한 통계를 쓰기보다 이 네 가지 습관부터 시작해 보셔도 좋겠습니다. 비슷한 실험 설계는 자동매매 백테스트 검증법: ‘있음·없음’ 2×2 대조 실험으로 진짜 효과만 남기는 방법을 정리한 글에도 적어 두었습니다.

아직 모르는 것 / 다음에 공부할 것

디플레이티드 샤프 비율을 실제로 어떻게 계산하는지, 그리고 같은 논문 저자들이 제안한 ‘백테스트 과최적화 확률(PBO)’이 무엇을 뜻하는지는 아직 제대로 이해하지 못했습니다. 또 워크포워드에서 공부 구간과 시험 구간의 길이를 어떻게 정해야 하는지도 정답을 찾지 못했습니다. 다음에는 봇을 매일 정해진 시간에 혼자 돌게 만드는 ‘스케줄러’ 이야기를 공부해서 정리해 보려 합니다.

자주 묻는 질문(FAQ)

Q1. 과최적화(오버피팅)는 어떻게 알아챌 수 있나요?

제가 찾아본 바로는, 학습에 쓴 기간의 성적과 처음 보는 기간의 성적 차이가 크면 가장 먼저 의심해 볼 신호라고 합니다. 설정값을 조금만 바꿔도 성적이 크게 흔들리는 것도 비슷한 신호였습니다.

Q2. 워크포워드 분석은 그냥 백테스트와 뭐가 다른가요?

일반 백테스트는 한 기간을 통째로 놓고 채점하는 경우가 많은데, 워크포워드는 과거로 설정을 정하고 바로 다음 기간으로만 채점하는 일을 창을 옮겨 가며 반복합니다. 그래서 ‘미래를 모르는 상태’에 더 가깝게 검증할 수 있다고 합니다.

Q3. 백테스트를 여러 번 돌리면 왜 위험한가요?

효과가 없는 전략도 여러 번 시도하면 그중 하나는 우연히 좋아 보일 수 있기 때문입니다. 위 표처럼 5% 확률로 우연히 좋아 보인다고 가정하면, 스무 번 시도했을 때 하나라도 그렇게 나올 확률이 약 64%라고 AI가 계산해 줬습니다.

Q4. 코딩을 몰라도 과최적화를 점검할 수 있나요?

네, 저도 직접 코드를 짜지 않습니다. 실험할 때마다 AI에게 시도 횟수와 결과를 표로 남기게 하고, 주변 설정값과 재실행 결과를 같이 비교해 달라고 요청하는 것만으로도 꽤 많이 걸러낼 수 있었습니다.

Q5. 피처(입력값)는 몇 개가 적당한가요?

정해진 숫자는 찾지 못했습니다. 다만 공부한 자료들은 공통적으로 “데이터 양에 비해 조건이 많으면 위험하다”고 했고, 새 피처를 넣을 때마다 표본 외 성적으로 다시 확인하라고 했습니다.


면책 고지: 이 글은 매매 초보인 필자가 공부한 내용을 정리한 학습 노트이며, 투자 권유나 수익 보장이 아닙니다. 표의 확률은 독립 시행·5% 기준을 둔 원리 이해용 가정치입니다. 첫 봇의 승률 16.7%·손익비 0.07은 백테스트 기록이고, 실전(실계좌)은 승률 약 3할에 손실로 종료했습니다. 두 번째 봇의 실제 설정값과 검증 수치는 공개하지 않습니다. 투자 판단과 그 책임은 본인에게 있습니다.

참고 출처

  • Bailey, D. H. & López de Prado, M. (2014). “The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality.” Journal of Portfolio Management, 40(5). — https://papers.ssrn.com/abstract=2460551
  • Bailey, D. H., Borwein, J., López de Prado, M. & Zhu, Q. J. “The Probability of Backtest Overfitting.” — https://papers.ssrn.com/abstract=2326253
  • Wikipedia, “Walk forward optimization” — https://en.wikipedia.org/wiki/Walk_forward_optimization
  • TradeStation Help, “Walk-Forward Optimization” — https://help.tradestation.com/10_00/eng/tradestationhelp/optimize/walk_forward.htm
  • Trading Strategy, “What Is Overfitting?” — https://tradingstrategy.ai/glossary/overfitting
  • 본문 표: AI(클로드)로 계산한 가정치

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다