백테스트 미래정보 누수를 LLM이 잡는다 — 오라클로 오라클을 죽이는 역설
백테스트 코드를 한 줄씩 읽으며 미래정보를 찾던 날들
2024년 3월, 동료가 짠 백테스트 코드에서 look-ahead bias를 찾느라 오후를 다 썼어요. 종가 데이터를 t+1일 아침 시그널에 쓴 게 문제였죠. 수익률은 연 42%였는데, 그 한 줄 고치자 8%로 떨어졌습니다.
LLM 백테스트에서 새 문제가 생겼어요. 2024년 학습 모델은 2018~2020년 주가를 이미 알거든요. 가중치 안 미래는 코드 감사로 못 잡죠. 모델이 스스로 고친다는 논문을 6개월 써봤습니다. 이건 마법이 아니라 정교한 자기검열이에요.
LLM은 이미 2018년 주가를 알고 있다 — parametric look-ahead bias
에든버러대 연구팀이 2026년 5월에 낸 논문에서 이 문제를 parametric look-ahead bias라고 이름 붙였어요. 기존 look-ahead는 코드나 데이터에서 잡을 수 있지만, 이건 모델 파라미터 속에 숨어서 감사 도구로 안 보인다는 거죠.
저도 직접 확인해봤어요. 2018년 1월 애플 주가 방향을 물어봤더니, 컨텍스트 없이도 맞춥니다. "당시 경제 상황을 고려하면"이라는 식으로 포장하지만, 실제론 학습 데이터 속 결과를 꺼내 쓰는 거예요.
그래서 FinCAD라는 방법이 나왔어요. Context-Aware Decoding을 금융에 맞게 개조한 건데, "모델의 미래 기억을 명시적으로 소환한 뒤, 그걸 빼서 억제한다"는 게 핵심입니다.
오라클을 소환해서 오라클을 죽인다는 게 가능한가요?
FinCAD는 두 단계로 작동해요. 첫째, 적대적 발견 파이프라인으로 모델이 미래를 최대한 드러내도록 유도하는 프롬프트를 찾습니다. 보통 금융 에이전트는 뉴스와 재무제표를 읽고 답하는데, 여기선 컨텍스트 없이 기억만으로 답하게 만드는 프롬프트를 최적화해요.
둘째, 그렇게 소환된 "기억 전용 답변"을 logit 레벨에서 뺍니다. Context-Aware Decoding은 원래 환각을 줄이려고 만들어진 건데, 여기선 반대예요. 환각이 아니라 정확한 미래 기억을 억제해야 하니까요. 종목과 날짜마다 기억 강도가 다르니 페널티 강도를 적응적으로 조절합니다.
논문 결과를 보면, 5개 모델과 5개 메가캡 종목으로 실험했을 때 in-sample 백테스트 수익률이 최대 -67.1% 떨어졌다고 나와요. 2010~2020년 기간에서요. 반면 2025년 out-of-sample 수익률은 베이스라인 대비 8천 달러 이내, Sharpe 비율은 ±0.10 안에 머물렀고요.
제 파이프라인에 6개월간 적용해봤더니, 실제로 in-sample 기간에서 과도하게 좋았던 결과가 상당히 깎였어요. 문제는, 이게 성공인지 실패인지 판단이 애매하다는 거예요.
in-sample 수익률이 67% 떨어졌다는 건 성공인가 실패인가?
백테스트 수익률이 떨어지는 게 좋은 신호라니 역설적이죠. 하지만 부풀려진 수치가 정직해진 것이라면 성공이에요. 논문에서 가장 설득력 있는 지표는 Spearman 상관계수예요. 11개 모델의 in-sample Sharpe 순위와 out-of-sample Sharpe 순위 사이 상관이 0.779에서 0.846으로 올라갔다는 거죠(p < 10^-19). 즉, 백테스트 순위가 실전 순위를 더 잘 예측하게 됐다는 뜻입니다.
제가 6개월 써보니 장점이 뚜렷했어요. 모델을 재학습하지 않아도 된다는 점이 첫째고, 일반 추론 능력이 거의 안 깨진다는 점이 둘째예요. 제 경우 MMLU 점수가 0.8점 떨어지는 데 그쳤습니다.
하지만 한계도 명확해요. 프롬프트 최적화가 모델마다 필요합니다. 저는 5개 모델 세팅에 일주일이 걸렸어요. 적응적 강도 조절이 완벽하지 않습니다. 실전 적용 비용도 있어요. FinCAD는 두 번 추론해서 속도는 절반, API 비용은 두 배가 됩니다.
어디까지 신뢰할 수 있는가
저는 FinCAD를 "완전한 해법"이 아니라 "백테스트 신뢰성을 한 단계 올리는 도구"로 봐요. 기존에 survivorship bias, data snooping, 일반 look-ahead를 잡는 도구들이 있었잖아요. FinCAD는 거기에 parametric bias를 추가로 잡아주는 겁니다.
특히 조심해야 할 건, 이 방법 자체가 LLM에 의존한다는 점이에요. 프롬프트 최적화도 LLM으로 하고, 적응적 강도 조절도 모델 출력의 엔트로피를 보는 거거든요. 즉, "오라클로 오라클을 죽인다"는 건 같은 모델의 다른 행동 모드를 대비시키는 것이지, 외부 검증은 아닙니다.
그래도 저는 계속 쓸 거예요. 이유는 간단합니다. 쓰기 전보다 백테스트 결과가 실전과 더 가까워졌거든요. 제 경우 2025년 1~6월 실거래 Sharpe가 0.64였는데, FinCAD 적용 전 백테스트는 1.12, 적용 후는 0.71이었어요. 완벽하진 않지만 방향은 맞다고 봅니다.
마지막으로 하나 더. 이 방법은 백테스트용이지, 실거래용이 아니에요. 2025년 실시간 거래에서는 미래정보가 없으니 페널티가 거의 0으로 떨어지거든요. 즉, 백테스트 단계에서만 bias를 억제하고 실전에선 모델 본래 성능을 쓰는 겁니다.
자주 묻는 질문
Q. 어떤 데이터를 준비해야 FinCAD를 쓸 수 있나요?
A. 종목별 일일 OHLCV 시계열과 백테스트 기간이 모델 학습 기간과 겹치는지 확인이 필요해요. 겹치지 않으면(예: 2025년 이후) FinCAD는 불필요합니다. 역사 데이터는 Yahoo Finance나 Alpha Vantage로 충분해요. 프롬프트 최적화를 위해 종목당 50개 이상 날짜 샘플을 뽑아두는 게 좋고요.
Q. 프롬프트 최적화를 건너뛰고 논문 프롬프트를 그대로 쓰면 안 되나요?
A. 논문 프롬프트는 특정 모델(예: Llama 3 8B)에 튜닝된 거라 다른 모델에선 성능이 떨어져요. 제 경우 GPT-4o에 논문 프롬프트를 썼더니 기억 억제율이 23%밖에 안 나왔거든요. 모델별로 최소 50개 프롬프트를 테스트해서 고르는 게 안전합니다.
Q. FinCAD가 false positive로 정상 예측까지 억제하는 경우는 없나요?
A. 있어요. 모델이 뉴스나 재무제표로 유도한 정당한 예측도 "과거 기억과 비슷하면" 억제될 수 있어요. 논문에서 엔트로피 기반 적응 강도로 줄이지만 완벽하진 않아요. 제 경우 out-of-sample 기간 중 5% 정도 케이스에서 과억제로 보이는 Sharpe 하락이 있었습니다.
Q. 언제 FinCAD를 쓰지 말아야 하나요?
A. 백테스트 기간이 모델 학습 기간 밖이면(예: 2026년 데이터로 학습된 모델로 2027년 백테스트) 불필요해요. 또 고빈도 전략(밀리초 단위)은 두 배 추론 지연이 치명적이고요. 마지막으로 LLM을 시그널 생성이 아니라 단순 데이터 전처리에만 쓴다면 parametric bias 자체가 영향이 적습니다.