사라진 종목 417개를 되살려 생존편향을 처음 숫자로 쟀다
"폐지종목은 못 받는다"고 적어둔 기존 기록이 틀렸다. 유니버스의 15%가 빠져 있었고, 그들은 사라지기 전 1년에 중앙값 −89.2%였다.
백테스트에서 제일 흔한 거짓말이 생존편향이다. 지금 살아있는 종목만으로 과거를 재구성하면, 망해서 사라진 종목들이 통째로 빠진다.
이번에 그 크기를 처음으로 숫자로 쟀다.
"못 받는다"는 기록이 틀렸다
기존 메모에는 이렇게 적혀 있었다.
StockListing('KRX-DELISTING')은 0건 → 폐지종목 확보 불가 → 생존편향 보정 불가
절반만 맞았다. 목록 API는 정말로 0건을 준다. 그런데 DataReader(폐지종목코드)로 개별 조회하면 작동한다. 폐지일까지의 시계열이 온전히 온다.
후보를 찾는 방법도 단순했다. DART 공시에는 있는데 현재 시총 목록에 없는 코드가 폐지 추정 종목이다. 450개를 시도해서 417개를 63초 만에 받았다. 54.7만 행이다.
편향의 크기
| 측정 | 값 |
|---|---|
| 폐지종목 중 유동성 필터(60일 거래대금 20억) 통과 이력 | 280 / 417 (67%) |
| 연도별 유니버스 누락 수 (2015~2021) | 117~160개 |
| 생존종목 대비 비율 | 약 15% |
| 유동성 통과 폐지종목의 폐지 직전 12개월 수익률 | 중앙값 −89.2% |
유니버스의 15%가 빠져 있었고, 그들은 사라지기 전 1년에 −89%였다.
이 종목들은 당시 기준으로 멀쩡히 거래되던 종목이다. 67%가 유동성 필터를 통과했다는 건, 실제 전략을 그때 돌렸다면 이것들도 샀을 것이라는 뜻이다.
평균이 아니라 중앙값을 봐야 한다
평균을 내면 +10.2%가 나온다. 폐지종목 평균 수익률이 플러스라는 이상한 결과다.
합병이나 지주사 전환처럼 프리미엄을 받고 퇴장한 경우가 섞여서다. 소수의 큰 플러스가 다수의 −90%를 가린다. 중앙값 −89.2%가 실제 모습에 가깝다.
그래서 달라지는 것
벤치마크인 KODEX 200은 실제 ETF 가격이라 생존편향이 없다. 반면 우리 백테스트는 15%를 빼고 계산했다.
즉 기존 결과는 전부 실제보다 낙관적이다. 이미 기록된 패배는 기록보다 더 큰 패배였다.
기각된 전략들이 더 나빴다는 뜻이니 결론은 바뀌지 않는다. 오히려 강화된다.
아직 못 하는 것
폐지종목의 상장주식수가 없다. 시총 계산이 안 되니 시총가중 포트폴리오에는 못 넣는다.
- 동일비중 기준 보정은 지금 바로 가능
- 시총가중까지 하려면 DART
stockTotqySttus(주식총수 현황) API로 주식수를 따로 받아야 한다 - ROE·영업이익률 같은 시총과 무관한 지표는 재무만으로 계산되므로 지금도 보정 가능
태도의 변화
작은 일 같지만 이게 제일 큰 소득이다.
이제 백테스트 결과를 말할 때 "생존편향은 미반영입니다"가 아니라 "생존편향은 이만큼입니다"라고 수치로 말할 수 있다. 한계를 고백하는 것과 한계를 측정하는 것은 다른 일이다.