AI 전략 에이전트는 거래가 이뤄져야 했던 시점에는 존재하지 않았던 정보를 사용하면서도 유효한 백테스트 결과를 낼 수 있습니다. 코드는 실행되고, 자산 곡선은 그럴듯해 보입니다. 신호도 합리적일 수 있습니다. 하지만 타임스탬프나 조인, 또는 수정된 데이터 필드가 어느새 내일의 답을 알려준 것일 수 있습니다.
해결책은 데이터 이용 가능 시점을 리서치 계약의 일부로 삼는 것입니다. 모든 입력값에는 다음 두 질문에 대한 명확한 답이 있어야 합니다. 이 값은 어느 시점을 나타내며, 전략은 언제부터 이 값을 알 수 있었을까요?
AI가 생성한 전략에서 룩어헤드 편향은 어떤 모습일까요?
가장 뻔한 사례는 같은 봉의 종가로 신호를 계산한 뒤 그 종가에 체결하는 것입니다. 종가를 알아야 결정할 수 있다면, 동시에 그 가격에 거래할 수는 없습니다. 하지만 에이전트는 데이터 소스를 조인하거나 편리한 기본값을 고르는 과정에서 더 미묘한 형태의 편향을 만들곤 합니다.
모델이 매분 종가 기준으로 20봉 이동평균을 계산하고 종가가 이를 돌파할 때 포지션을 취한다고 해보겠습니다. 백테스트가 같은 종가에 체결하면 해당 거래가 전략에 알려지기 전에 봉의 마지막 체결 가격을 이미 사용한 셈입니다. 주문을 다음 봉 시가로 옮기는 것은 합리적인 근사치일 수 있지만, 시장가 주문에는 여전히 수수료와 시장 충격을 반영해야 합니다.
이번에는 피처를 일별 주식 펀더멘털 데이터나 암호화폐 미결제약정 스냅샷으로 바꿔 보겠습니다. 행의 날짜는 월요일로 표시되어도 값이 월요일 장 마감 후에 발표됐거나 나중에 정정됐을 수 있습니다. 날짜는 데이터 이용 가능 시점과 다릅니다.
전략 입력값의 타임스탬프는 어떻게 지정해야 할까요?
원천 데이터에서 제공하는 경우 최소한 세 가지 시점을 보관하세요. 값이 나타내는 기간, 게시자가 값을 공개한 시점, 시스템이 값을 수신한 시점입니다. 의사결정 시점의 전략 정보 집합에는 그때까지 이용 가능했던 값만 포함할 수 있습니다.
| 필드 | 확인할 내용 | 흔한 함정 |
|---|---|---|
| 이벤트 시점 | 시장 이벤트는 언제 발생했나요? | 봉이 완성되기 전에 봉의 종가를 사용하는 것 |
| 공개 시점 | 원천 데이터 제공자는 언제 이 값을 공개했나요? | 일 마감 기준 표시를 장 시작 시 공개된 것으로 취급하는 것 |
| 수집 시점 | 리서치 시스템은 언제 이 값을 사용할 수 있었나요? | 벤더 또는 파이프라인 지연을 무시하는 것 |
| 수정 시점 | 이 버전은 언제 기록되거나 수정됐나요? | 수정된 과거 데이터를 원본인 것처럼 백필하는 것 |
1-minute 전략에서 1초 지연을 무조건 무시해도 되는 것은 아닙니다. 영향은 의사결정 시점과 신호에 사용되는 데이터에 따라 달라집니다. 입력값이 완성된 시간 단위 통계라면 영향이 거의 없을 수 있습니다. 주문 직전에 샘플링한 오더북 불균형이라면 거래 방향이 뒤집힐 수 있습니다.
시점 기준 데이터 저장소로 정보 누수를 막을 수 있나요?
“시점 기준”이라는 말이 과거 의사결정 시점에 알려져 있던 값과 당시의 최신 수정 버전을 조회할 수 있다는 뜻이라면 도움이 됩니다. 과거 날짜만 기록된 테이블에도 해당 날짜의 값이 오늘 수정된 상태로 들어 있을 수 있습니다.
각 레코드에 유효 기간과 데이터 이용 가능 타임스탬프를 보관하고, 기존 값을 덮어쓰지 말고 수정 내역을 유지하세요. 그런 다음 과거 조회 조건을 명시하세요. 시뮬레이션 의사결정 시점까지 이용 가능했던 최신 버전을 반환하도록 합니다. 펀더멘털 데이터, 지수 편입 종목, 경제 지표 발표, 벤더가 정제한 데이터셋에서는 특히 중요합니다.
운영상 눈에 띄지 않는 문제가 하나 있습니다. 공개 시점 타임스탬프가 완벽해도 수집 작업이 20분 늦게 실행됐다면 소용이 없습니다. 과거 데이터 저장소에 수집 시점이 기록되어 있지 않다면 보수적인 지연 시간을 적용하고 그 사실을 밝혀 두세요. 원천 데이터가 기록하지 않은 정밀도는 장식일 뿐입니다.
페이퍼 트레이딩 전에 룩어헤드 편향을 잡아내는 점검 방법은 무엇인가요?
리서치 에이전트가 백테스트와 함께 피처 및 주문 타임라인을 출력하도록 하세요. 각 의사결정에 대해 모든 피처의 최신 원천 데이터 이용 가능 시점, 의사결정 시점, 주문 시점, 모델링된 체결 시점을 기록합니다. 입력값이 의사결정 이후에 도착한 행은 모두 거부하세요.
- 신호를 1봉 앞으로 이동해 결과를 비교하세요. 성과가 크게 떨어지면 종가 간 타이밍에 대한 의존성을 드러낼 수 있지만, 이는 누수의 증명이 아니라 진단 방법입니다.
- 모든 원천 데이터를 과거의 기준 시점에서 잘라 파이프라인을 다시 실행하고, 결과 피처를 저장된 과거 피처와 비교하세요.
- 의심되는 피처를 상수로 바꿔 보세요. 성과가 거의 그대로라면 코드가 의도한 시계열을 실제로 사용했는지 살펴보세요.
- 일부러 미래 정보가 담긴 피처를 파이프라인에 넣어 보세요. 해당 피처의 이용 가능 시점이 의사결정 시점보다 늦으면 검증 단계에서 명확한 오류가 나야 합니다.
이러한 점검으로 전략의 타당성이 입증되는 것은 아닙니다. 구체적인 타이밍 가정을 드러내고, 그 가정이 위반되는 흔한 사례를 찾아낼 수 있습니다.
페이퍼 트레이딩으로 백테스트에 정보 누수가 없었다는 사실을 입증할 수 있나요?
아니요. 페이퍼 트레이딩에서는 실시간 데이터 경로가 늦거나 누락되거나 과거 데이터 경로와 다르게 정렬되는 문제를 발견할 수 있습니다. 하지만 과거 학습 피처가 당시 알려진 정보를 반영했는지는 확인할 수 없습니다. 모델이 우연히 봤던 미래가 현재가 되면, 누수에서 얻던 이점이 사라질 수도 있습니다.
페이퍼 트레이딩은 일관성을 확인하는 데 활용하세요. 실시간 피처 값, 의사결정 타임스탬프, 주문 생성, 모델링된 체결을 백테스트의 정의와 비교합니다. 차이가 있으면 정확히 어떤 입력값과 시계에서 비롯됐는지 추적하세요. 각 의사결정의 정보 집합을 설명할 수 있는 에이전트 팀은 유용한 리서치를 하고 있는 것입니다. 매끄러운 곡선만 보여줄 수 있는 팀은 가장 어려운 감사 절차를 건너뛴 셈입니다.
← 전체 글


