Table of Contents
백테스팅(backtesting)은 모든 알고리즘 트레이딩 전략 개발에서 중요한 단계중 하나입니다. 백테스팅(backtesting)은 말 그대로 과거 (back) 데이터를 사용하여 전략이 과거에 수행되었을 때를 시뮬레이션하고 이를 바탕으로 우리는 전략이 미래에 어떻게 될지 평가하고 선택합니다. 그러나 백테스팅 (backtesting)을 하면 할 수록 전략 성과에 욕심이 생기고 결국 과최적화의 함정에 빠집니다. 이번 포스팅에서는 누구나 할 수 있는 전략 개발에서 과최적화를 피하는 5가지 방법을 알아 봅니다. 이런 방법이 과최적화를 완벽히 피하게 할 순 없지만 소개하는 5가지 방법은 과최적화를 피하는 첫 걸음입니다. 전략 개발 시 꼭 활용해 보시기 바랍니다.
1 백테스팅에서 과최적화를 피하는 5가지 방법
누구나 지금 당장 할 수 있는 과최적화 피하는 방법 5가지를 알려드립니다. 지금 바로 시작하세요. 5가지 방법을 적용하면 백테스팅에서 과도한 최적화의 위험을 줄이고 보다 강력하고 신뢰할 수 있는 거래 전략을 개발할 수 있습니다.
- 전략을 단순하게 유지하세요 (Simple is Best)
다른 분야에서도 ‘단순함’이 강조되지만 특히 투자 분야에서 ‘단순함’의 힘은 상상 이상으로 큽니다. 가능하다면 일반적인 필터 (거래대금, 시가 총액 등)을 제외하고 주요 전략은 단순하게 유지하세요. 그리고 이론적 토대가 뒷받침되지 않는 복잡한 모델이나 전략을 사용하지 마세요. 단순한 전략일 수록 과최적화될 가능성이 적고 미래 구간 데이터 잘 맞을 가능성이 높습니다. - 벡테스팅 데이터를 분할해서 사용하세요
데이터의 일부는 전략 개발 및 튜닝에 사용하고 다른 일부는 최종 전략 평가에 사용합니다. 이렇게 하면 전략이 과거 데이터에 너무 가깝게 맞추는 것을 방지하고 전략이 미래에 얼마나 잘 수행될 것인지에 대한 보다 정확한 추정치를 제공합니다. - 교차 검증을 사용하세요
교차 유효성 검사에는 주식 데이터를 여러 그룹 (연도 등) 나누고 나머지 데이터에 대해 유효성을 검사하는 동안 다른 하위 집합에서 전략을 튜닝합니다. - 성능 지표를 확인하세요
투자 전략을 개발하면 각종 성능 지표 (누적수익률, CAGR, MDD, 샤프 비율 등)가 나오게 됩니다. 이러한 전략 운영 시 성능 지표를 정기적으로 확인하세요. 실제와 벡테스팅 결과 사이에 상당한 차이가 있는 경우 과최적화 되었다고 볼 수 있습니다. - 과도한 변수 튜닝을 하지 마세요
적합한 변수를 찾는 것이 중요하지만 과도한 튜닝은 과최적화로 이어질 수 있습니다. 따라서, 변수(이평선 일자수, 이격도 등)를 튜닝 할 때에는 과도한 최적화를 방지하기 특정한 영역 (5~20일)을 정하는 걸 추천합니다.
이러한 단계를 따르면 백테스팅에서 과도한 최적화의 위험을 줄이고 보다 강력하고 신뢰할 수 있는 알고리즘 거래 전략을 개발할 수 있습니다.
2 전략을 단순하게 유지하세요 (Simple is Best)
백테스팅 전략을 단순하게 유지하는 것은 과도한 최적화를 피하는 핵심 원칙입니다. 간단한 전략은 이해하고 구현 및 평가가 더 쉽고 과도하게 최적화될 가능성이 적습니다.
예를 들어 주식 거래 전략을 백테스팅한다고 가정합니다. 간단한 전략은 50일 이동 평균이 200일 이동 평균을 상회할 때 주식을 매수하고 50일 이동 평균이 200일 이동 평균을 하회할 때 주식을 매도하는 것입니다. 젠포트로 구현하면 아래와 같습니다. 아주 간단하며 이해가 쉽고 구현이 쉽습니다. 여러 지표와 규칙을 포함하는 보다 복잡한 전략에 비해 과도하게 최적화될 가능성이 적습니다.
하지만 결과는 어떨까요? 결과는 참담합니다. 즉, 전략이 ‘단순’하다고 하여 ‘성과’를 보장해 주지 않습니다. 다만 과최적화를 피할 수 있는 가장 강력한 방법임에는 틀림이 없습니다.
3 벡테스팅 데이터를 분할해서 사용하세요
벡테스팅 데이터를 전략개발과 검증용으로 분할하여 사용하세요. 예를 들어 지난 5년 동안 회사의 일일 주가 데이터가 있다고 가정합니다. 이 데이터를 아래와 같이 기간별로 나누어 사용합니다.
- 전략개발 용 데이터
전략을 개발하는데 사용합니다. 전략 개발을 위해 데이터의 처음 4년(80%)을 사용합니다. - 전략 검증용 데이터
전략 성능 검증을 위해 나머지 1년(20%)의 데이터를 테스트에 사용합니다.할 수 있습니다.
이 방법을 통하면 실제 거래나 미래 구간에 가상 거래를 하지 않고서도 현재 개발된 전략 성과와 과최적화 여부를 가늠해 볼 수 있습니다. (보라색 선 전후를 보세요.)
4 교차 유효성 검증을 사용하세요
교차 유효성 검사는 앞서 말씀드린 벡테스팅 데이터를 분할하는 방법을 더 세부적으로 나누어 수행하는 방법입니다. 교차 유효성 검증에서는 사용 가능한 데이터를 여러 하위 집합으로 나누고 나머지 데이터에 대해 유효성을 검사하는 동안 다른 하위 집합에서 전략을 개발하여 성능을 평가합니다.
예를 들어 지난 5년 (2018~2022) 동안 회사의 일일 주가 데이터 세트가 있고 이를 이용하여 전략을 만든다고 가장합니다.
데이터를 연도별로 5개로 나누어 4개 데이터로는 전략을 만들고 나머지 1개 데이터로는 성능을 검증하는 것입니다. 교차 검증을 수행하는 방법은 다음과 같습니다.
- 데이터를 2018, 2019, 2020, 2021, 2022의 5개로 나눕니다.
- 2018, 2019, 2020 및 2021에서 전략을 개발하고 2022에서 전략 성능을 평가합니다.
- 2019, 2020, 2021 및 2022에서 전략을 개발하고 2018에서 전략 성능을 평가합니다.
- 2020, 2021, 2022 및 2018에서 전략을 개발하고 2019에서 전략 성능을 평가합니다.
- 2021, 2022, 2018 및 2019에서 전략을 개발하고 2020에서 전략 성능을 평가합니다.
- 2022, 2018, 2019 및 2020에서 전략을 개발하고 2021에서 전략 성능을 평가합니다.
- 전략 성능을 보다 정확하게 예측하려면 5회 반복 전체에서 성능 지표의 평균을 구합니다.
5 성능 지표를 확인하세요
성능 지표를 모니터링하면 전략이 과도하게 최적화되지 않고 시간이 지남에 따라 일관된 수익을 생성할 수 있는지 확인할 수 있습니다. 예를 들어 전략의 샤프 비율이 높지만 최대 손실률도 높다면 전략이 과도하게 최적화되어 있고 너무 많은 위험을 감수하고 있음을 나타낼 수 있습니다. 이러한 경우 위험을 줄이고 성과를 개선하기 위해 전략 수정을 고려해야 합니다.
에를 들면, 다음 성능 지표를 사용하여 전략 성능을 평가할 수 있습니다.
- 샤프 비율
전략의 위험 조정 수익률을 측정합니다. 평균 수익률을 수익률의 표준 편차로 나눈 값으로 계산됩니다. 샤프 비율이 높을수록 전략이 위험 단위당 더 높은 수익을 창출하고 있음을 나타냅니다. - MDD (Maximum Draw Down)
일정 기간 동안 전략에서 발생한 최대 손실을 측정합니다. 값이 낮을수록 전략이 덜 위험하다는 것을 나타냅니다. - 연간 수익률
1년 동안 전략에서 생성된 평균 수익률을 측정합니다. - 평균 손익비
총 손실에 대한 총 이익의 비율을 측정합니다. 손익비가 높을수록 전략이 더 수익성이 있음을 나타냅니다.
다양한 전략에 대한 평가지표를 젠포트에서 활용할 수 있습니다. 젠포트에서 제공하지 않는 유용한 평가 지표와 활용법을 이용하여 보다 체계적인 전략을 만들고 싶다면 ‘젠포트 전략제작6단계’ 을 고려해 보세요
6 과도한 변수 튜닝을 하지 마세요
과도한 변수 조정은 백테스팅에서 과도한 최적화의 일반적인 원인입니다. 예를 들어 기술 지표로 이동 평균을 사용하는 주식 거래 전략을 백테스트한다고 가정합니다. 이동 평균은 거래일 수를 미세 조정하여 최상의 결과를 얻을 수 있습니다. 하지만, 특정 기간에 최적화된 수치는 결국 다른 기간에는 전략이 제대로 수행되지 않을 수 있습니다.
하지만, 전략 개발을 할 때, 변수 조정은 필요합니다. 따라서, 과도한 변수 조정을 방지하려면 조정할 수 있는 매개변수에 제한 (예. 5~20일, 5일간격)을 설정하고 앞서 말씀드린 교차 유효성 검증을 사용하여 전략 성능을 평가해야 합니다.
7 결론
결론적으로 백테스팅은 모든 알고리즘 트레이딩 전략 개발에서 필수적인 단계이지만 과도한 최적화를 피하도록 주의하는 것이 중요합니다. 과도한 최적화는 전략이 특정 데이터 집합에서 잘 수행되도록 미세 조정되었지만 새 데이터로 일반화하지 못하는 경우에 발생합니다. 백테스팅에서 과도한 최적화를 방지하려면 데이터를 개발용과 검증용으로 분할하고, 교차 검증을 사용하고, 성능 지표를 모니터링하고, 과도한 변수 튜닝을 피하고, 전략을 단순하게 유지하는 것이 중요합니다. 이러한 원칙을 따른다면 상승 및 하락 시장 모두에서 이익을 창출할 수 있는 강력하고 신뢰할 수 있는 알고리즘 거래 전략을 개발할 수 있습니다.