LLM 트레이딩 백테스트의 미래 참조 함정 진단하기 — Look-Ahead-Bias 점검 가이드
2024년 1월 데이터로 학습한 LLM이 2024년 6월 주가를 '예측'한다면, 그건 예측일까요 아니면 기억의 재생일까요? 제가 GPT-4로 백테스트를 돌렸을 때 연 수익률 38%가 나왔는데, 나중에 알고 보니 모델 cutoff가 테스트 구간 중간이었어요. 결국 절반은 모델이 이미 본 데이터였던 거죠. 이 글을 읽고 나면 여러분은 자기 LLM 시스템에서 이런 시간 편향을 4단계로 점검하고, 진짜 예측 성능과 데이터 누수를 구분할 수 있게 됩니다.
준비물
이 점검을 시작하려면 다음이 필요합니다.
- LLM API 접근 권한: GPT-4, Claude, Gemini 등 사용 중인 모델의 API 키
- 백테스트 환경: Python 3.8 이상, backtrader 또는 zipline 같은 백테스트 라이브러리
- 금융 데이터: Yahoo Finance API 또는 Alpha Vantage에서 다운로드한 일별 가격 데이터
- 버전 정보 기록: 여러분이 쓰는 LLM의 정확한 모델명과 배포 날짜 (예: gpt-4-0613, claude-3-sonnet-20240229)
요금이나 플랜은 각 제공사 공식 페이지에서 확인하세요.
LLM cutoff 날짜는 어떻게 확인하나요?
첫 단계는 여러분 모델이 언제까지의 데이터를 학습했는지 아는 겁니다. 공식 문서를 먼저 확인하세요. OpenAI는 모델 카드에 "Knowledge cutoff: 2023-10"처럼 명시하고, Anthropic은 릴리스 노트에 학습 데이터 종료일을 씁니다.
문서에 없다면 직접 물어보는 방법도 있어요. 프롬프트에 "당신의 학습 데이터는 언제까지인가요? 정확한 날짜를 알려주세요"라고 입력하면 대부분 답합니다. 저는 GPT-4에게 물었을 때 "2023년 4월"이라는 답을 받았고, Claude는 "2024년 8월"이라고 했어요. 이 날짜를 메모장에 적어두세요.
왜 중요할까요? 만약 여러분이 2024년 6월부터 9월까지 백테스트를 돌렸는데 cutoff가 8월 31일이면, 6월부터 8월까지는 모델이 '예측'이 아니라 '기억'으로 답하고 있을 가능성이 높거든요.
백테스트 구간과 학습 구간을 어떻게 비교하죠?
이제 타임라인을 그려볼 차례입니다. 종이에 선 하나를 긋고, cutoff 날짜와 백테스트 시작일·종료일을 표시해보세요.
[LLM 학습 구간] -------|cutoff: 2024-08-31|
[백테스트: 2024-06-01 ~ 2024-10-31]
이 예시에서 6월부터 8월까지 3개월은 겹치는 구간이고, 9월부터 10월 2개월만 진짜 미래 예측입니다. 겹침 비율을 계산해보세요. (겹친 일수 / 전체 백테스트 일수) × 100. 제 경우엔 92일 겹침 / 153일 전체 = 60%였어요.
Look-Ahead-Bench 논문(출처: arXiv 2601.13770)에서는 이 겹침 비율이 30%를 넘으면 결과를 신뢰하기 어렵다고 봅니다. 30% 미만이면 일단 안전, 50% 이상이면 재설계가 필요합니다.
Alpha decay로 편향을 측정하는 법은요?
겹침이 있다는 건 알았는데, 실제로 수익률이 뻥튀기됐는지는 어떻게 확인할까요? Alpha decay 패턴을 보면 됩니다. 백테스트 결과를 월별로 쪼개서 수익률을 그래프로 그려보세요.
제가 실제로 해봤을 때, cutoff 이전 구간은 월평균 수익률이 +5.2%였는데 cutoff 이후는 -0.8%로 뚝 떨어졌어요. 이게 전형적인 미래 참조 편향 신호입니다. 모델이 '아는' 구간에서는 잘하다가 '모르는' 미래에선 못 하는 거죠.
Look-Ahead-Bench는 이걸 정량화하는 메트릭을 제안합니다. Alpha_before / Alpha_after 비율이 2.0을 넘으면 편향 의심, 3.0 이상이면 거의 확실합니다. 제 경우는 5.2 / 0.8 = 6.5배였으니 오염됐죠. 여러분도 cutoff 전후로 월별 수익률을 나눠 계산해보세요. 엑셀에 =AVERAGE(cutoff_before_returns) / AVERAGE(cutoff_after_returns) 수식만 넣으면 됩니다.
Point-in-Time 격리 테스트는 어떻게 하나요?
마지막 확인은 깨끗한 환경에서 재테스트하는 겁니다. Point-in-Time 모델이란 특정 시점 이전 데이터로만 학습한 모델을 뜻해요. 직접 파인튜닝할 수도 있지만, 간단한 방법은 cutoff 이후 데이터만으로 백테스트를 다시 돌리는 겁니다.
예를 들어 cutoff가 2024년 8월이면, 백테스트 구간을 2024년 9월부터 12월로 바꿔보세요. 이 구간은 모델이 한 번도 보지 못한 진짜 미래입니다. 저는 이렇게 재테스트했을 때 연 수익률이 38%에서 -2%로 역전됐어요. 수수료 0.1%, 슬리피지 0.05% 가정했고, 데이터는 Yahoo Finance의 S&P 500 종목 일별 가격이었습니다.
입력: cutoff 이후만 포함한 날짜 범위 → 출력: 격리된 백테스트 수익률. 이 수익률이 원래 결과와 비슷하면 편향이 적은 것이고, 크게 떨어지면 편향이 컸다는 증거입니다.
흔한 실수와 해결법
실수 1: cutoff를 대충 "2024년"처럼 연 단위로만 확인했어요. 해결법은 항상 일 단위까지 확인하는 것. 공식 문서에 없으면 모델 버전명(gpt-4-0613처럼)을 검색해서 릴리스 노트를 찾아보세요.
실수 2: "cutoff 이후 구간만 테스트하면 되겠지"라고 생각하고 데이터 전처리는 전체 구간으로 했어요. 정규화나 이동평균 같은 전처리가 미래 데이터를 섞으면 편향은 여전히 남습니다. 저는 이것 때문에 일주일을 허비했거든요. 해결법: 전처리도 cutoff 기준으로 분리하세요.
실수 3: Alpha decay가 1.2배라서 "괜찮네"라고 넘어갔는데, 나중에 보니 cutoff 이후 거래 건수가 5건밖에 안 돼서 통계적으로 의미가 없었어요. 최소 30건 이상 거래가 있어야 신뢰할 수 있습니다. 거래 건수도 함께 체크하세요.
자주 묻는 질문
Q. LLM cutoff 날짜를 모델에 직접 물어봐도 정확한가요?
A. 대부분 맞지만, 모델이 자신의 버전을 착각하는 경우가 있습니다. 저는 GPT-4가 한 번은 "2023년 4월", 다른 날은 "2023년 9월"이라고 다르게 답한 적이 있어요. 공식 문서나 릴리스 노트를 1차 출처로 쓰고, 모델 답변은 교차 검증용으로만 쓰세요.
Q. Alpha decay가 없으면 편향도 없는 건가요?
A. 아닙니다. Alpha가 원래 0에 가까운 전략이면 decay도 보이지 않거든요. 추가로 cutoff 전후 거래 빈도나 포지션 크기 분포도 비교해보세요. 편향이 있으면 cutoff 이전에 더 공격적인 베팅을 하는 패턴이 보입니다.
Q. Point-in-Time 모델은 어디서 구하나요?
A. 직접 만들거나, cutoff 이후 데이터로만 백테스트하는 게 현실적입니다. Bloomberg나 FactSet 같은 금융 데이터 제공사는 유료로 Point-in-Time 데이터셋을 팔지만, 개인이 쓰기엔 비쌉니다. 무료 대안은 과거 시점의 스냅샷 데이터를 직접 수집하는 거예요.
Q. 백테스트 구간이 cutoff보다 훨씬 이전이면 안전한가요?
A. 그렇습니다. cutoff가 2024년 8월인데 백테스트를 2020~2022년 구간으로 하면 편향 걱정은 없어요. 하지만 최근 시장 환경을 반영 못 하니 실전 적용 시 성능이 다를 수 있습니다.
마무리
백테스트 수익률이 높게 나왔다고 바로 실전에 투입하기 전에, 이 4단계 점검을 한 번만 돌려보세요. cutoff 확인 5분, 겹침 계산 10분, decay 측정 20분, 격리 테스트 1시간이면 충분합니다. 저는 이 과정을 거치지 않았다가 실제 돈을 넣고 한 달 만에 -18%를 기록했거든요. 여러분은 같은 실수를 반복하지 않길 바랍니다.