1. 연구 배경: 가설 레지스트리와 승격 체계
stock-kg는 "공시 다음 날 외국인 순매수가 붙은 종목", "반도체 지수 약세 구간의 국내 반도체주" 같은 투자 가설을 파라미터화된 Cypher 쿼리 하나로 표현하고, 같은 쿼리를 백테스트와 실시간 신호 발화에 모두 사용하는 구조로 설계했습니다. 가설은 총 12건을 카탈로그로 관리했으며(단일 소스 5건 + 교차 소스 7건), 백테스트 성과가 기준을 넘으면 승격(PROMOTED)하여 모의운용 신호로 사용했습니다.
3개월 백테스트를 통과해 승격된 가설은 7건이었습니다. 여기까지는 순조로워 보였습니다.
2. 문제 정의: 검증 기간을 늘리자 무너진 가설들
데이터를 1년으로 늘려 홀드아웃 검증을 다시 수행하자 결과가 뒤집혔습니다.
| 항목 | 3개월 백테스트 | 1년 홀드아웃 |
|---|---|---|
| 승격 가설 | 7건 통과 | 2건만 유효 |
| 수작업 feature 9종 | 대부분 유효해 보임 | 안정적인 것은 4종 |
| 가설 앙상블 상관 | — | 0.00 (결합 효과 없음) |
특히 눈에 띄는 실패는 복합 신호였습니다. "공시 + 외국인 매수 + 기관 매수 + 뉴스 급증이 동시에 발생하면 강한 신호"라는 4중 동시 발화 가설은 직관적으로 그럴듯했지만, 측정 결과 D+10 알파 -5.83% 를 기록했습니다. 네 신호가 모두 켜졌을 때는 이미 가격에 반영이 끝난 뒤라, 오히려 늦은 진입이 되는 것입니다.
살아남은 2건도 "3개월 구간의 운 좋은 발견(lucky finding)이 아니었다"는 것이지, 대단한 알파를 보장한다는 뜻이 아니었습니다.
3. 기술적 난점: 왜 3개월 백테스트는 속는가
원인은 세 가지로 진단했습니다.
첫째, 데이터 부족입니다. 3개월은 특정 시장 국면(regime) 하나에 해당하는 길이입니다. 그 국면에서만 작동하는 패턴이 전 기간 유효한 것처럼 보입니다. 퀀트 연구의 관례가 5~10년 데이터를 요구하는 이유를 체감했습니다.
둘째, 수작업의 한계입니다. 사람이 설계할 수 있는 가설은 7건, feature는 9종에서 막혔습니다. 탐색 공간 대부분이 미탐색으로 남고, 만든 것들끼리는 서로 닮아 있어 앙상블 상관이 0에 수렴했습니다.
셋째, 다중 검정의 함정입니다. 가설을 여러 개 만들어 같은 데이터에 반복 검정하면, 순전히 우연으로 기준을 넘는 가설이 반드시 나옵니다. 통과한 가설이 실력인지 우연인지 구분하는 절차 자체가 없었습니다.
4. 대안 검토
1안. 데이터만 늘리고 수작업 가설 유지
- 장점: 시스템 변경 최소. 기존 가설 레지스트리 그대로 사용.
- 단점: 수작업 한계(가설 7건·feature 9종)는 그대로 남습니다. 비선형 상호작용도 잡지 못합니다.
2안. ML만 도입하고 데이터는 그대로
- 장점: 탐색 자동화 즉시 가능.
- 단점: 3개월~1년 데이터로 gradient boosting을 학습하면 과적합이 사실상 확정입니다.
3안. 외부 유료 데이터셋 구매
- 장점: 검증된 장기 데이터 즉시 확보.
- 단점: 비용, 그리고 기존 지식그래프와의 결합 복잡도. 무료 소스(DART·pykrx)로 가능한 범위를 먼저 소진하는 것이 순서라고 판단했습니다.
5. 설계 결정 및 근거: 백필 + 자동 탐색 + 조건부 ML
세 가지를 묶어서 전환했습니다(ADR-022).
데이터를 3년으로 백필했습니다. 일별 수급은 하루 만에, 매크로는 즉시 가능했지만, 공시는 API 일일 호출 한도 때문에 수 주에 걸친 분할 백필로 설계했습니다. 소스별로 확보 가능한 기간이 다른 경우에는 해당 기간을 결측 처리해 시간 비대칭을 모델에 숨기지 않기로 했습니다.
팩터 탐색을 자동화했습니다. 모멘텀·multi-hop 그래프 지표·상호작용 항을 자동 생성하는 팩터 팩토리를 만들고, t-통계량과 IC(정보 계수)로 스크리닝하되 다중 검정 보정(Benjamini-Hochberg FDR) 을 통과한 팩터만 카탈로그에 등록하도록 했습니다. 3개월 백테스트에 속았던 경험이 이 절차를 만들게 했습니다.
ML을 조건부로 허용했습니다. 이 프로젝트는 초기에 "작은 데이터에서 규칙 기반이 ML보다 강건하다"는 이유로 ML 라이브러리 사용을 금지하는 조항을 두고 있었습니다. 데이터가 3년으로 늘어난 시점에 이 조항을 개정하되, 네 가지 원칙을 함께 명문화했습니다.
- Out-of-sample 검증 필수 — 시간 순서를 유지한 train/test 분리
- 다중 검정 시 FDR 통제
- 재현 가능성 — 시드 고정, feature 명세 버전 관리
- 해석 가능 모델 우선 — 트리 기반 우선, 블랙박스는 최후 수단
6. 실험 결과
전환 이후 백테스트 성과는 단계적으로 개선됐습니다(2026-06 시점, 거래 비용 반영 기준).
| 버전 | 변경 내용 | LS Sharpe | IC |
|---|---|---|---|
| v3 | 수작업 가설 7건 앙상블 | +0.43 | +0.029 |
| v5 | LGBM·XGB·CatBoost 앙상블 + 튜닝 | +0.43 | +0.054 |
| v8 | 그래프 파생 feature 7종 추가 | +0.60 | +0.142 |
| v10 | 공매도 feature + 비용 반영 | +1.16 (NET) | +0.180 |
다만 이 숫자는 어디까지나 백테스트입니다. 이후에도 재검증은 계속되고 있으며, 최근 주간 리밸런싱 전략의 교차검증은 "표본 부족으로 불안정" 판정을 반환했습니다. 이 판정은 수정 없이 데모 대시보드에 그대로 공개하고 있습니다. 모의운용의 실현 성과가 쌓이기 전까지, 백테스트 수치는 가설의 지위를 넘지 못한다고 보는 것이 이 프로젝트의 검증 원칙입니다.
7. 결론 및 시사점
짧은 백테스트를 통과한 가설은 검증된 것이 아니라 아직 기각되지 않은 것입니다. 검증 기간 연장, 홀드아웃 분리, 다중 검정 보정이 갖춰지기 전의 성과는 채택 근거로 쓰지 않아야 합니다.
직관적으로 그럴듯한 신호일수록 시장이 먼저 반영합니다. 4중 동시 발화 가설의 음의 알파가 그 증거였습니다. "모두가 볼 수 있는 신호의 합"은 알파가 아니라 후행 지표에 가깝습니다.
수작업 탐색의 한계는 노력이 아니라 구조로 풉니다. 가설을 더 열심히 만드는 대신, 탐색을 자동화하고 통과 기준을 통계 절차로 강제하는 쪽이 재현 가능합니다. 그리고 그 전환의 근거를 ADR로 남겨두면, 나중에 결과가 나빠졌을 때 어느 가정이 틀렸는지 추적할 수 있습니다.
