백테스트에서 연환산 수익률 20%가 나왔습니다. 8년간의 데이터와 1,640건의 거래를 사용했고, 워크포워드 분할도 깔끔했습니다. 그런데 공급업체의 최신 과거 데이터 대신 당시 기록된 값으로 바꾸자 초과수익이 3%로 떨어졌습니다.
놀라운 숫자는 처음의 수익률이 아니었습니다. 수정된 데이터에 의존했던 17퍼센트포인트였습니다. 이런 식의 사후 정보는 경제지표 발표, 기업 펀더멘털, 지수 편입 종목, 심지어 단순해 보이는 시장 데이터 필드에도 숨어 있을 수 있습니다. 과거 데이터는 데이터 출처가 지금 제공하는 내용을 보여줍니다. 시점 기준 데이터는 당시 전략이 알 수 있었던 내용을 보여줍니다.
이벤트가 지난 뒤 과거 데이터가 바뀌는 이유는 무엇일까요?
일부 값은 처음에는 추정치로 발표되고 나중에 정정됩니다. 금요일에 발표된 경제 통계가 다음 달에 수정될 수 있습니다. 기업이 실적 수치를 재작성할 수도 있습니다. 데이터 공급업체가 잘못된 체결 데이터를 바로잡고, 누락 구간을 채우거나, 잠정치를 최종치로 교체할 수도 있습니다. 최신 값만 저장하는 데이터베이스에서는 이런 변경이 모두 처음부터 그랬던 것처럼 보입니다.
전략이 공시된 매출을 기준으로 기업 순위를 매기거나, 예정된 데이터 발표 이후 시장에서 거래한다면 이 점이 중요합니다. 정정된 수치를 몇 달 일찍 본다면 백테스트는 의사결정 시점에 시장에 없던 정보를 전략에 제공한 셈입니다. 신호 계산은 완벽해도 입력 데이터가 잘못된 버전의 과거에서 온 것일 수 있습니다.
여기서 쉽게 빠지는 함정이 있습니다. date라는 필드는 흔히 값이 적용되는 기간을 나타내지, 그 값이 언제 이용 가능해졌는지를 나타내지 않습니다. 3월 31일로 표시된 분기 매출 행이 실제로는 5월에 발표됐을 수 있습니다. 이 표시는 사업 기간에 관한 것이지, 전략이 당시 알 수 있었던 정보에 관한 것이 아닙니다.
백테스트에는 어떤 타임스탬프를 사용해야 할까요?
값이 적용되는 기간과 이용 가능 시점을 따로 추적하세요. 가능하다면 발표 시각과 수신 시각도 기록하세요. 전략은 값이 발표되고 시스템에 수신된 뒤에야 사용할 수 있습니다. 두 시각이 다르면 보수적인 재현을 위해 더 늦은 시각을 사용하세요.
| 타임스탬프 | 설명하는 내용 | 활용 방법 |
|---|---|---|
| 적용 시점 | 값이 가리키는 기간 또는 이벤트 | 측정 대상별로 관측값을 묶습니다 |
| 발표 시점 | 출처가 해당 버전을 공개한 시각 | 데이터가 존재하기 전에 발표된 것처럼 처리되는 일을 막습니다 |
| 수신 시점 | 시스템이 해당 버전을 받은 시각 | 전달 지연과 뒤늦은 과거 데이터 보충을 반영합니다 |
예를 들어 어떤 기업의 분기 매출이 1월부터 3월까지를 대상으로 하고, 5월 8일 동부시간 16:15에 발표되어 리서치 저장소에는 16:17에 도착했다고 해보겠습니다. 5월 8일 종가에 의사결정을 내리는 전략은 종가 시점의 결정이 16:00에 이뤄졌다면 이 보고서를 사용할 수 없습니다. 다음 날 아침에 의사결정을 내리는 전략은 사용할 수 있습니다. 분기 말 날짜만으로는 어느 쪽도 판단할 수 없습니다.
수정 데이터가 결과를 좌우하는지 어떻게 검증할까요?
같은 전략을 두 번 실행하세요. 한 번은 과거 각 의사결정 시점에 이용 가능했던 데이터 버전을 사용하고, 다른 한 번은 최신 수정 데이터를 사용합니다. 체결 가정, 투자 대상군, 코드는 고정하세요. 이렇게 얻는 차이는 수정 민감도 결과이지, 새로운 전략 비교 결과가 아닙니다.
그다음 차이가 어디서 비롯되는지 살펴보세요. 발표일에 성과가 달라지나요? 재작성된 소수의 기업이나 정정된 관측값에 가장 큰 차이가 집중되나요? 전략이 관련 발표 시각보다 먼저 거래하나요? 이벤트 단위의 간단한 감사만으로도 누적 수익률 차트를 하나 더 그리는 것보다 많은 것을 파악할 수 있습니다.
이 수치는 예시일 뿐, 어디에나 적용되는 페널티가 아닙니다. 유용한 결과는 가능한 한 같은 거래와 비용을 사용해 여러분의 전략을 짝지어 비교한 결과입니다. 수정된 버전의 성과가 훨씬 좋다면, 헤드라인 백테스트를 신뢰하기 전에 어떤 필드와 날짜가 차이를 만드는지 확인하세요.
시점 기준 데이터 감사에는 무엇을 기록해야 할까요?
먼저 전략이 실제로 사용하는 필드부터 살펴보세요. 각 필드의 출처, 타임스탬프의 의미, 수정 정책, 이전 버전을 가져올 수 있는지 확인하세요. 공급업체에 정정이 어떻게 표시되는지도 물어보세요. 기존 행을 덮어쓰는지, 새 버전 행을 추가하는지, 별도 감사 로그를 제공하는지 확인해야 합니다. 제품 페이지에 ‘과거 데이터’라고 적혀 있다고 해서 이 의문이 해결되지는 않습니다.
- 각 버전에 발표 시각 또는 최초 이용 가능 시각을 함께 저장하세요.
- 특징값을 기간 표기가 아닌 이용 가능 시점을 기준으로 의사결정에 연결하세요.
- 재현 가능한 실행을 위해 동결된 스냅샷이나 출처 버전을 보관하세요.
- 늦게 도착하거나 수정되었거나 신뢰할 만한 이력이 없는 값은 표시해 두세요.
범위는 실용적으로 정하세요. 전략이 거래소 체결 데이터와 봉 데이터만 사용한다면 경제 데이터 수정은 관련이 없을 수 있습니다. 하지만 봉 데이터 정정과 공급업체의 과거 데이터 보충은 여전히 중요할 수 있습니다. 특히 신호가 유동성이 낮은 시장이나 정밀한 이벤트 구간에 의존할 때 그렇습니다.
시점 기준 과거 데이터가 없을 때
오늘의 값을 어제의 값인 것처럼 조용히 취급하지 마세요. 해당 필드를 한계로 표시하고, 과거 이용 가능성에 의존하는 주장의 근거에서 제외하거나, 보수적인 지연을 적용해 결과가 얼마나 달라지는지 보여주세요. 지연을 명시하고 결과와 함께 한계를 공개한다면 지연된 대체 데이터도 리서치에 유용할 수 있습니다.
백테스트의 역할은 당시 존재했던 정보 집합을 사용해 의사결정을 재구성하는 것입니다. 데이터가 최신 버전만 보여줄 수 있다면 정직한 결과에는 한계가 있습니다. 오늘 재구성된 과거 데이터로 전략을 검증할 수는 있지만, 과거의 에이전트가 정확히 무엇을 볼 수 있었는지는 입증할 수 없습니다.
← 전체 글

