생존편향 (Survivorship Bias)
현재 상장된 종목만으로 과거를 백테스트하면, 그 사이 상장폐지·합병으로 사라진 종목이 통째로 빠집니다. 망한 종목이 데이터에서 사라지므로 결과는 실제보다 수익이 높고 낙폭은 얕게 나옵니다.
예를 들어 '10년 전 PBR이 낮은 종목을 산다'는 규칙을 오늘 살아남은 종목 목록으로만 검증하면, 저PBR이던 시절에 상장폐지로 이어진 종목은 처음부터 시험 대상이 아니었던 셈이 됩니다.
점검 방법: 각 시점에 실제로 존재했던 종목을 기준으로 유니버스를 구성하는지(시점별 유니버스, point-in-time), 상장폐지 종목의 시세와 청산이 데이터에 반영되는지 확인합니다. 널스탁은 상장폐지 종목의 시세를 포함하고 각 시점에 상장돼 있던 종목을 기준으로 유니버스를 구성하도록 설계돼 있습니다.
룩어헤드 편향 (Look-ahead Bias)
그 시점에는 알 수 없었던 정보를 판단에 쓰는 오류입니다. 가장 흔한 사례는 두 가지입니다.
- 당일 종가로 신호를 계산하고 같은 종가에 체결하는 경우: 장이 끝나야 알 수 있는 종가로 판단한 뒤, 이미 지나간 그 종가에 샀다고 가정하는 것입니다. 실제로는 다음 거래일 이후에 체결되므로, 신호 후 체결 시점을 지연시켜 결과가 얼마나 달라지는지 확인합니다.
- 재무 데이터의 공시 시점 무시: 12월 결산 실적은 이듬해 3월에야 공시되는데, 1월 시점에 그 실적을 알고 있었다고 가정하면 미래 정보를 쓴 것입니다. 공시 지연을 반영해야 합니다.
과최적화 (Overfitting)
설정값을 수없이 바꿔 가며 가장 성과가 좋은 조합을 고르면 그 조합은 과거의 우연까지 학습한 것입니다. 조건이 많고 파라미터가 많을수록, 시도 횟수가 많을수록 위험이 커집니다.
점검 방법: 설정값을 조금 바꿔도 성과가 비슷한지(안정성), 학습에 쓰지 않은 구간에서도 성과가 유지되는지(워크포워드 분석), 조건 수에 비해 거래 수가 충분한지 확인합니다.
거래 비용과 세금 누락
수수료, 매도세, 슬리피지를 빼고 계산하면 거래가 잦은 전략일수록 성과가 크게 부풀려집니다. 한 번의 거래 비용이 작아 보여도 연간 수백 번 거래하면 누적됩니다.
점검 방법: 비용을 현실적인 수준으로 설정하고, 비용을 올렸을 때 성과가 얼마나 줄어드는지 확인합니다. 비용이 조금만 늘어도 성과가 사라지는 전략은 해석에 주의가 필요합니다.
체결 가정의 비현실성
시뮬레이션은 원하는 가격에 원하는 수량이 항상 체결된다고 가정하기 쉽습니다. 하지만 거래량이 적은 종목, 상·하한가 근처, 거래정지 구간에서는 그 가정이 성립하지 않습니다.
점검 방법: 거래대금 하한 같은 유동성 조건을 두고, 거래정지·상한가 구간의 체결 처리 방식을 확인합니다.
수정주가를 쓰지 않은 데이터
액면분할이나 무상증자가 있으면 원래 가격이 하루 사이에 크게 떨어진 것처럼 기록됩니다. 수정되지 않은 가격으로 계산하면 이를 폭락으로 오인해 손절이 걸리거나 지표가 왜곡됩니다. 수정주가(배당·분할 반영)를 쓰는지 확인해야 합니다.
함정을 점검하는 체크리스트
- 상장폐지 종목이 포함된 시점별 유니버스인가?
- 신호 시점 이후의 정보나 체결 가격을 쓰지 않았는가?
- 재무 지표에 공시 지연이 반영됐는가?
- 수수료·슬리피지·거래세가 반영됐는가?
- 설정값을 조금 바꿔도 결과가 비슷한가? 학습에 쓰지 않은 구간에서도 유지되는가?
- 거래 수가 판단할 만큼 충분한가?
이 가이드는 투자 연구에 필요한 개념과 계산 방법을 설명하는 교육 자료입니다. 특정 종목·전략의 매수·매도를 권유하거나 미래 수익을 예측하지 않으며, 백테스트 결과는 과거 데이터 기반 시뮬레이션이므로 미래 수익은 보장되지 않습니다.