과최적화 확인법 — 백테스트 파라미터 지도 그리기

백테스트 최고 성적의 파라미터는 과거의 우연일 수 있다. 룩백×밴드 117개 조합을 전부 돌려 성과 지도를 그려보니, 지도의 1등(샤프 0.96)은 한 칸 옆이 0.64로 추락하는 뾰족한 봉우리였다. 과최적화를 거르는 법 — 최고점 대신 고원을 찾고, 채점 기준을 '이웃 최저'로 바꾸고, 가능하면 파라미터를 평균내라.

이 글은 특정 종목이나 매매 시점을 추천하는 글이 아닙니다. 공개된 전략을 실제 데이터로 직접 백테스트하며 공부한 학습 기록입니다.

📚 이 글은 전략 리뷰 실험실 시리즈의 한 편입니다. 지금까지 돌려본 전략을 한눈에 비교한 표를 이 허브에서 볼 수 있습니다.

지난 글 끝에 남긴 의심이 있다. 이 시리즈의 좋은 숫자들 — 룩백 1·3·6개월이니 밴드 2%니 하는 것들은 전부 과거 26년치 시험지 한 장에서 나왔다. 그 숫자들을 얼마나 믿어야 할까. 오늘부터 몇 편은 전략이 아니라 백테스트 자체를 시험대에 올린다. 첫 번째 도구는 지도다.

발상 — 텐트를 봉우리에 치는 사람은 없다

산에서 야영할 자리를 고른다고 하자. “해발이 가장 높은 지점”이 정답일까? 그 자리가 폭 1미터짜리 바위 꼭대기라면, 바람이 조금만 불어도(=미래가 과거와 조금만 달라도) 굴러떨어진다. 경험 많은 사람은 꼭대기 대신 넓고 평평한 고원을 찾는다. 몇 걸음 어긋나도 여전히 안전한 자리.

백테스트의 파라미터 선택이 정확히 이 문제다. 과거 데이터에서 성적이 가장 좋았던 숫자(봉우리)는, 그 좋음이 과거의 우연까지 학습한 결과일 수 있다. 봉우리인지 고원인지 확인하는 방법은 하나뿐이다 — 한 점이 아니라 지형 전체를 그려보는 것.

📌 파라미터(parameter)란?
전략의 손잡이 숫자들. “몇 개월 수익률로 모멘텀을 잴까(룩백)”, “신호가 몇 %를 넘어야 갈아탈까(밴드)” 같은 것. 같은 전략이라도 손잡이를 어디에 놓느냐로 성적이 갈리는데, 과거에 제일 좋았던 위치가 미래에도 좋다는 보장은 없다 — 이게 과최적화 문제다.

마침 이 시리즈는 손잡이 두 개를 이미 만져봤다. 룩백은 2편에서 3·6·12개월 사이 성적이 널뛰었고, 밴드는 10편에서 1→2→3%가 매끄럽지 않았다. 그때는 선(변형 몇 개)만 봤다면, 이번엔 면을 본다 — 단일 룩백 1~12개월 × 밴드 0~4%(0.5%p 간격), 총 117번의 백테스트로 격자를 전부 채웠다(1·3·6개월 평균을 쓰는 ADM 행 포함). 셀 값은 시리즈의 균형 잣대인 샤프 지수, 나머지 조건은 시리즈 표준 그대로다(프록시 데이터, 2000년 8월~2026년 6월, 매월 점검, 편도 비용 0.1%, 배당 재투자, 세금 미반영).

지도를 그렸다

룩백 1~12개월과 절대 모멘텀 밴드 0~4% 격자의 샤프 지수 히트맵. 1·3·6개월 평균 행이 전체적으로 가장 높고, 테두리 친 세 칸은 시리즈가 실제 사용한 원조 12개월, ADM, 밴드 2% 조합

파랄수록 좋은 자리다. 테두리 친 세 칸이 이 시리즈가 실제로 쓴 숫자들이다 — 12개월×밴드 0%는 1편의 원조 듀얼 모멘텀(샤프 0.79), 맨 아랫줄 1·3·6 평균×0%는 2편의 ADM(0.96), 평균×2%는 10편의 밴드(1.04).

지도에서 도드라지는 것 세 가지. 첫째, 맨 아랫줄(평균)이 전체적으로 가장 파랗다. 둘째, 단일 룩백 중엔 3개월 줄이 유독 파랗다. 셋째, 나머지는 얼룩덜룩하다 — 좋고 나쁨이 규칙 없이 섞여 있다.

반전 하나 — 지도의 1등은 봉우리였다

단일 룩백 격자(108칸)의 1등은 3개월×밴드 0.5%, 샤프 0.96이다. 2편의 ADM과 같은 성적이니 “그냥 3개월 쓰면 되는 것 아닌가” 싶다. 그런데 그 칸에서 한 칸만 이웃으로 옮겨보면 이야기가 뒤집힌다. 룩백을 한 달 늘려 4개월로 가면 0.81, 4개월×2.5%까지 가면 0.65 — 지도 최하위권이다. 1등 칸의 3×3 이웃 중 최악은 0.64. 텐트 자리로 치면, 한 걸음 옆이 낭떠러지인 바위 꼭대기다.

2편에서 “3개월은 코로나를 잡지만 닷컴에서 휩쏘를 당한다”고 썼는데, 지도로 보니 그 정도가 아니었다 — 3개월 줄 전체가 2개월(0.64~0.81)과 4개월(0.64~0.84) 사이에 고립된 능선으로 떠 있다. 모멘텀을 재는 창이 딱 한 달 어긋나는 것만으로 성적이 무너진다면, 그 성적은 전략의 실력이라기보다 이 26년과 3개월이라는 숫자의 궁합, 즉 우연에 가깝다.

📌 과최적화(overfitting)란?
과거에 제일 좋았던 숫자를 골라 쓰는 것. 그 숫자는 과거의 우연까지 통째로 학습한 것이라 미래엔 그만큼 좋지 않기 쉽다. 신호: 파라미터를 조금 바꿨는데 성적이 널뛴다(=봉우리다). 처방: 봉우리가 아니라 고원을 고르거나, 아예 여러 값을 평균낸다.

반전 둘 — 채점 기준을 바꾸면 1등이 바뀐다

그럼 “한 칸 삐끗해도 안전한 자리”를 기준으로 지도를 다시 칠해보자. 각 칸을 자기 자신과 이웃 여덟 칸의 최저 샤프로 바꿨다 — 파라미터를 살짝 잘못 골라도 이 정도는 보장된다는 보수적 지도다.

각 칸을 3×3 이웃의 최저 샤프로 다시 칠한 보수적 히트맵. 원지도 1등인 3개월×0.5%는 이웃 최저 0.64로 추락하고, 4개월×0% 부근이 0.81로 고원의 중심이 됨
채점 기준 1등 그 칸의 샤프 한 칸 삐끗하면
원지도 (최고점) 3개월 × 0.5% 0.96 0.64까지 추락
보수 지도 (이웃 최저) 4개월 × 0.0% 0.84 0.81 보장

같은 데이터, 같은 전략인데 채점 기준 하나로 1등이 바뀐다. 원지도의 1등(빨간 테두리)은 보수 지도에선 평범한 칸이 되고, 눈에 안 띄던 3~5개월×밴드 0% 부근(초록 테두리)이 고원의 중심으로 올라온다. 최고 성적표를 자랑하는 백테스트를 볼 때 “그 옆 칸은요?”라고 물어야 하는 이유다.

반전 셋 — 평균은 지도가 덜 필요한 전략이었다

마지막으로 맨 아랫줄, 1·3·6개월 평균 행을 보자. 옆에서 본 단면이 이렇다.

밴드 0~4%에 따른 샤프 곡선 비교 — 단일 룩백 3·6·12개월은 들쭉날쭉하고 1·3·6개월 평균(ADM)은 전 구간에서 가장 높고 매끄러움

단일 룩백들(회색 선)이 오르락내리락하는 동안 평균(파란 선)은 시종 그 위에서 논다. 평균 행의 최악 칸(밴드 4%, 0.83)이 단일 룩백 대부분의 좋은 칸과 맞먹는다. 행 전체 평균으로도 0.95로, 단일 룩백 최고 행(3개월, 0.91)을 이긴다.

왜 그럴까. 1·3·6 평균은 지도 위에서 보면 세 줄을 겹쳐서 서로의 뾰족함을 상쇄한 것이다. 9편에서 전략 두 개를 섞어 양쪽의 약점을 메웠는데, 같은 원리가 파라미터 차원에서도 작동하고 있었던 셈이다 — 종목 분산, 전략 분산에 이은 파라미터 분산. 2편에서 ADM이 좋았던 진짜 이유를 이제야 기하학적으로 이해했다. 특별히 좋은 숫자를 찾아낸 게 아니라, 숫자 하나에 걸지 않은 것이다.

덤으로 재미있는 관찰 하나. 12개월 줄은 밴드를 0에서 4%까지 돌려도 0.77~0.79로 거의 변화가 없다. 12개월 모멘텀은 신호 자체가 0 근처를 어슬렁거리는 일이 드물어서, 문턱을 달아줘도 걸릴 일이 없는 것이다. 10편에서 그렇게 요긴하던 밴드가 여기선 장식품이다 — 파라미터의 효과는 절대적인 게 아니라 다른 파라미터와의 맥락이라는 것도 지도가 보여준다.

직접 해보니, 그리고 한계

시리즈의 숫자들을 이 지도 위에서 재감사해보면: 2편의 ADM(평균×0%)은 고원 위에 있다 — 합격. 10편의 밴드 2%는 평균 행 안에서도 최고점(1.04)인데, 좌우를 보면 0~2% 구간이 전부 0.96 이상인 고원이고 2.5%부터 내리막이다. 즉 ‘밴드를 조금 두는 방향’은 고원이지만 ‘정확히 2%’는 그 가장자리의 봉우리 — 10편에서 “숫자가 아니라 방향만 가져가라”고 쓴 결론이 지도로도 확인된 셈이다.

한계를 분명히 해둔다. 첫째이자 가장 중요한 것 — 이 지도 전체가 여전히 시험지 한 장 위의 이야기다. 고원처럼 보이는 곳조차 ‘이 26년’에 맞춰진 지형일 수 있다. 지도는 봉우리를 걸러내는 의심의 도구이지, 고원을 보증하는 도구가 아니다. 둘째, 샤프 하나로 칠한 지도다 — CAGR이나 낙폭으로 칠하면 지형이 달라진다(수치는 같이 공개한다). 셋째, 이웃의 정의(3×3)도 내 선택이다. 넷째, 프록시 데이터·이 기간 한정.

정리하며

백테스트를 의심하는 첫 번째 도구로 지도를 그려봤다. 배운 것은 세 줄이다. 최고점을 고르지 말 것 — 지도의 1등은 한 칸 옆이 낭떠러지인 봉우리였다. 고원을 찾을 것 — 채점 기준을 ‘이웃 최저’로 바꾸자 1등이 바뀌었다. 그리고 가능하면 아예 평균낼 것 — 숫자 하나에 걸지 않는 것이 지도 위에서 가장 안전한 전략이었다.

그러고 보니 이 지도조차 26년 전체를 다 보고 그린 것이다. 진짜 시험은 지도를 반만 보고 자리를 고른 다음, 나머지 반에서 채점받는 것 아닐까. 앞 13년으로 골랐다면 뒤 13년에서도 그 자리가 고원이었을지 — 시험지를 반으로 접는 방법들이 있다고 들었다. 언젠가 이 지도를 그 시험에 올려보고 싶다.


※ 이 글은 개인의 학습 과정을 공유하기 위한 것으로, 투자 권유나 자문이 아닙니다. 백테스트는 과거 데이터에 대한 시뮬레이션이며, 실제 매매 상품이 아닌 프록시(인덱스펀드) 기준입니다. 거래비용은 편도 0.1%를 반영했고 세금·배당 과세는 미반영입니다. 과거의 성과가 미래를 보장하지 않습니다.

steadydawn
steadydawn

감이 아니라 데이터와 규칙으로 투자에 접근해보려는 사람입니다. 투자 전문가는 아니고 배우는 쪽에 가깝습니다. 그래서 시중에 알려진 공개 전략을 직접 코드로 백테스트해보고, 나온 숫자를 좋든 나쁘든 그대로 기록합니다. 특히 결과가 좋게 나올수록 한 번 더 의심하려 합니다. 이 블로그가 돌아가는 서버도 직접 구축해 운영하고 있어, 투자 이야기와 함께 서버·개발 이야기도 남깁니다.

기사 : 48

댓글 남기기

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