생존자 편향¶
생존자 편향은 선택 과정에서 "살아남은" 대상만 분석하고 그렇지 못한 대상을 무시할 때 생긴다. 이는 성공이 실제보다 더 흔하거나 더 예측 가능한 것처럼 보이게 만들어 결론을 체계적으로 왜곡한다.
정의 1. 생존자 편향¶
생존자 편향(survivorship bias) 은 선택편향의 한 형태로, 표본이 어떤 필터를 통과한(살아남은, 성공한, 돌아온) 개체들로만 이루어지고 걸러진(실패한, 죽은, 사라진) 개체들은 분석가에게 보이지 않는 상황이다. 살아남은 표본에서 끌어낸 결론은 전체 모집단으로 일반화되지 않는다.
대표적인 예는 에이브러햄 왈드의 제2차 세계대전 폭격기 손상 분석이다. 군은 귀환한 비행기에 총알 구멍이 가장 많은 곳(날개와 동체)에 장갑을 덧대자고 제안했다. 왈드는 조종석이나 엔진에 피격당한 비행기는 결코 돌아오지 못했다는 점을 알아차렸다. 살아남은 표본에는 바로 그 치명적 손상이 빠져 있었던 것이다. 옳은 전략은 생존기에 구멍이 적은 부위에 장갑을 덧대는 것이었다.
귀환한 폭격기의 피탄 분포를 나타낸 가상의 도해. 붉은 점은 총알 구멍이다. 날개와 동체에는 구멍이 빽빽하지만 엔진과 조종석 주변은 거의 비어 있다. 이 빈 곳은 그 부위가 안전하다는 뜻이 아니라, 그곳에 맞은 비행기가 표본에 들어오지 못했다는 뜻이다.
그림을 읽는 법
이 그림에서 눈이 먼저 가는 것은 붉은 점이 있는 곳이다. 그러나 통계적으로 중요한 정보는 점이 없는 곳에 있다.
관측된 자료는 \(P(\text{피탄 위치} \mid \text{생존})\)이다. 우리가 알고 싶은 것은 \(P(\text{격추} \mid \text{피탄 위치})\)이다. 두 확률이 반대 방향을 가리킨다.
엔진 주변에 구멍이 없는 이유는 두 가지 중 하나이다. 엔진이 좀처럼 맞지 않거나, 엔진에 맞은 비행기가 돌아오지 못했거나. 총알이 기체 전체에 대략 고르게 쏟아진다는 점을 인정하면 두 번째 설명만 남는다.
그림 출처와 참고문헌
그림: Martin Grandjean(벡터), McGeddon(도면), Cameron Moll(피탄 도표 착상), Survivorship-bias.svg, Wikimedia Commons, CC BY-SA 4.0. 왈드의 1943년 보고서에는 그림이 실려 있지 않았다. 이 도해는 그 논증을 나중에 시각화한 것으로, 실제 피탄 자료의 재현이 아니라 가상의 예시이다.
원 보고서: Wald, A. (1943). A Method of Estimating Plane Vulnerability Based on Damage of Survivors. Statistical Research Group, Columbia University. (재간행: CRC 432, Center for Naval Analyses, 1980.)
해설 논문: Mangel, M., & Samaniego, F. J. (1984). "Abraham Wald's Work on Aircraft Survivability." Journal of the American Statistical Association, 79(386), 259–267. 왈드가 실제로 푼 문제는 "어디에 장갑을 덧댈까"가 아니라, 생존기의 피탄 분포로부터 부위별 격추 확률을 추정하는 것이었다. 이 논문이 그 추정 절차를 현대적 표기로 정리한다.
같은 논리가 널리 적용된다.
- 금융시장: 오늘의 지수에 포함된 종목만 연구하면 상장폐지된 실패 사례를 무시하게 되어 평균 수익률을 과대평가한다.
- 스타트업: 성공한 기업의 특성(카리스마 있는 리더, 높은 연구개발비)을 분석하면서 같은 특성을 지녔던 실패 기업을 무시하면 그 요인들에 대한 과신으로 이어진다.
- 임상 연구: 시험을 완료한 환자의 결과만 보고하면 더 나빴을 수 있는 중도 탈락자를 무시하게 된다.
여섯 가지 사례¶
생존자 편향은 언제나 같은 구조를 갖는다. 선택 기제가 있고, 그 기제를 통과한 것만 자료가 되며, 통과 여부가 우리가 설명하려는 결과와 상관되어 있다. 서로 다른 분야에서 같은 구조가 어떻게 반복되는지 보자.
1. 2008년 금융위기의 "생존" 은행. 위기 이후 분석가들은 살아남은 JPMorgan Chase나 Goldman Sachs를 두고 우월한 위험관리와 전략적 판단을 칭송했다. 파산했거나 대규모 구제금융을 받은 Lehman Brothers, Bear Stearns는 같은 깊이로 분석되지 않았다. 생존 은행들도 비슷한 위험관리 전략을 썼을 수 있으며, 갈린 것은 타이밍·정치적 연줄·운이었을 수 있다. 선택 기제: 파산하지 않았을 것.
2. 흥행한 할리우드 영화. 스튜디오는 《타이타닉》이나 《아바타》를 분석해 "높은 제작비, 유명 배우, 화려한 특수효과"를 성공 요인으로 꼽는다. 같은 제작비와 같은 배우를 쓰고도 망한 영화는 분석에서 빠진다. 대본의 질, 개봉 시기, 관객의 취향 변화가 예산보다 중요할 수 있다. 선택 기제: 흥행했을 것.
3. 운동의 건강 효과. 규칙적으로 운동한 사람들의 장수를 보여주는 연구는 많다. 그러나 규칙적으로 운동했지만 일찍 병들거나 사망한 사람은 추적에서 빠지기 쉽다. 유전, 식단, 환경, 소득이 운동과 얽혀 있다. 선택 기제: 연구 종료 시점까지 추적 가능했을 것.
4. 1990년대 말 닷컴 버블. 투자자들은 Amazon과 eBay의 성공을 보고 기술과 사업모형을 성공 요인으로 삼았다. 같은 특성을 지녔지만 사라진 수많은 닷컴 기업은 계산에 들어가지 않았다. 버블이 꺼지고 나서야 그 "성공 요인"이 보편적이지 않았음이 드러났다. 선택 기제: 아직 상장폐지되지 않았을 것.
5. 1960년대 백화점 전략. 소매업자들은 Macy's나 Nordstrom을 분석해 입지, 고객 서비스, 상품 다양성을 성공 요인으로 정리했다. 같은 전략을 쓰고 문을 닫은 점포는 목록에 없었다. 성공 전략을 복제해도 조건이 다르면 통하지 않는다. 선택 기제: 아직 영업 중일 것.
6. 스티브 잡스와 애플. 잡스의 리더십, 제품 혁신, 마케팅이 창업 성공의 교본으로 인용된다. 그러나 같은 시기 같은 확신과 같은 고집으로 실패한 창업자가 훨씬 많다. 그들의 이야기는 책으로 나오지 않았을 뿐이다. 선택 기제: 회고록을 쓸 만큼 성공했을 것.
여섯 사례를 관통하는 질문
사례마다 "이 자료에 들어오지 못한 것은 무엇인가?" 를 물으면 편향이 즉시 보인다.
| 사례 | 보이는 것 | 보이지 않는 것 |
|---|---|---|
| 폭격기 | 귀환기의 총알 구멍 | 격추된 기체의 피탄 위치 |
| 2008년 은행 | 살아남은 은행의 전략 | 같은 전략을 쓰고 망한 은행 |
| 흥행 영화 | 대작의 성공 공식 | 같은 공식으로 망한 대작 |
| 운동 | 장수한 운동 애호가 | 추적에서 사라진 사람 |
| 닷컴 | 살아남은 기술기업 | 사라진 수천 개 기업 |
| 백화점 | 번창한 점포 | 폐업한 점포 |
| 창업 | 잡스의 자서전 | 쓰이지 않은 자서전 |
마지막 줄이 특히 중요하다. 실패는 기록을 남기지 않는다. 성공한 사람은 회고록을 쓰고 인터뷰를 하지만 실패한 사람은 조용히 사라진다. 따라서 "성공한 사람들의 공통점"을 아무리 성실하게 수집해도, 애초에 표본이 성공으로 걸러진 뒤라면 그 공통점은 성공의 원인이 아닐 수 있다.
올바른 질문은 "성공한 사람들은 무엇을 했는가?"가 아니라 "그것을 한 사람 중 몇 %가 성공했는가?" 이다. 앞의 질문은 \(P(\text{특성} \mid \text{성공})\)을 묻고, 뒤의 질문은 \(P(\text{성공} \mid \text{특성})\)을 묻는다. 우리가 알아야 하는 것은 뒤쪽이다.
생존자 편향을 피하려면 모든 사례(성공과 실패 모두)를 포함하고, 기저율을 고려하며(스타트업의 90%가 실패한다면 생존자들의 공통 특성은 우연일 수 있다), 선택 기제를 명시적으로 살펴야 한다.
보기 1. 생존자 편향. 펀드 \(1{,}000\)개의 연수익률을 모두 같은 \(N(0.05,\,0.15^2)\)에서 \(10\)년치 뽑는다. 실력 차이는 없고 운의 차이만 있다. 누적 배수가 한 번이라도 \(0.5\) 아래로 내려가면 청산되어 자료에서 사라진다.
(1) 청산을 무시했을 때 \(10\)년 뒤 누적 배수의 기댓값과 표준편차를 구하시오.
(2) 살아남은 펀드만 보면 평균이 얼마나 부풀려지는가. 청산 문턱을 올리면 그 부풀림이 어떻게 되는지 함께 확인하시오.
풀이
(1) 해석적으로. 연수익률 \(r_t\)가 독립이므로 누적 배수 \(\prod_{t=1}^{10}(1+r_t)\)의 기댓값은 기댓값의 곱이다.
분산은 이차적률에서 나온다. \(E[(1+r)^2] = 1.05^2 + 0.15^2 = 1.125\)이므로
이다. 중심이 \(1.63\)인데 표준편차가 \(0.77\)이다. 실력이 똑같은데도 \(10\)년 뒤 성적표는 두 배 넘게 벌어진다. 펀드 \(1{,}000\)개의 평균에 붙는 표준오차는 \(0.7707/\sqrt{1000} = 0.0244\)다.
(2) 해석적으로. 생존 여부는 과거 수익률의 함수이고, 수익률이 높을수록 살아남을 확률이 높다. 따라서 "생존"으로 조건을 거는 것은 수익률이 높은 쪽을 골라내는 일이고 생존자의 평균은 반드시 전체 평균보다 크다. 크기는 두 가지가 정한다. 걸러지는 비율과, 걸러진 것들이 얼마나 나빴는가다. 문턱을 올리면 둘 다 커지므로 편향도 커진다.
(1)(2) 수치적으로.
import numpy as np
np.random.seed(42)
n_funds = 1000
years = 10
# 1단계: 펀드 1000개의 연간 수익률을 10년치 모의생성한다.
# 평균 5%, 표준편차 15%. 결과는 (1000, 10) 모양의 행렬이다.
# 중요한 점: 모든 펀드가 완전히 같은 분포에서 나온다.
# 즉 실력 차이는 없고 운의 차이만 있다.
returns = np.random.normal(0.05, 0.15, (n_funds, years))
# 누적 성장배수. cumprod가 (1+r)을 해마다 곱해 나간다.
# cumulative[i, t] = i번 펀드의 t년째까지의 누적 배수
cumulative = np.cumprod(1 + returns, axis=1)
# 2단계: 폐쇄 규칙. 한 번이라도 누적 배수가 0.5 아래로 떨어지면 청산된다.
# all(axis=1)은 "10년 내내 0.5를 넘겼는가"를 묻는다.
survived = np.all(cumulative > 0.5, axis=1)
# 3단계: 두 가지 평균을 비교한다.
# all_final 1000개 전부의 10년차 최종 배수 (진실)
# survivor_final 살아남은 펀드만의 최종 배수 (자료로 남는 것)
# 실무에서 데이터베이스에 남아 있는 것은 둘째뿐이다. 청산된 펀드는 목록에서 사라진다.
all_final = cumulative[:, -1]
survivor_final = all_final[survived]
print(f"Total funds: {n_funds}")
print(f"Survivors: {survived.sum()}")
print(f"Mean final value (all funds): {all_final.mean():.3f}")
print(f"Mean final value (survivors only): {survivor_final.mean():.3f}")
print(f"Survivorship bias: {survivor_final.mean() - all_final.mean():+.3f}")
# --- (1) 의 이론값, 그리고 문턱을 올려 가며 편향을 잰다 ---
mean_th = 1.05 ** years
sd_th = np.sqrt((1.05 ** 2 + 0.15 ** 2) ** years - 1.05 ** (2 * years))
print(f"이론 E[final] = 1.05^10 = {mean_th:.4f}, sd = {sd_th:.4f}, "
f"SE = {sd_th / np.sqrt(n_funds):.4f}")
for thr in (0.5, 0.7, 0.8, 0.9, 1.0):
s = np.all(cumulative > thr, axis=1)
print(f" 문턱 {thr}: 생존 {s.sum():4d}개, 생존자 평균 {all_final[s].mean():.3f}, "
f"편향 {all_final[s].mean() - all_final.mean():+.3f}")
출력:
Total funds: 1000
Survivors: 966
Mean final value (all funds): 1.618
Mean final value (survivors only): 1.657
Survivorship bias: +0.039
이론 E[final] = 1.05^10 = 1.6289, sd = 0.7707, SE = 0.0244
문턱 0.5: 생존 966개, 생존자 평균 1.657, 편향 +0.039
문턱 0.7: 생존 846개, 생존자 평균 1.761, 편향 +0.143
문턱 0.8: 생존 746개, 생존자 평균 1.835, 편향 +0.217
문턱 0.9: 생존 589개, 생존자 평균 1.942, 편향 +0.324
문턱 1.0: 생존 398개, 생존자 평균 2.063, 편향 +0.445
이론값이 맞는다. 전체 \(1{,}000\)개의 평균 최종 배수가 \(1.618\)로 이론값 \(1.6289\)에서 \(0.43\) 표준오차 떨어져 있다.
문턱 \(0.5\)에서는 \(34\)개만 청산되므로 편향이 \(+0.039\), 곧 \(2.4\%\)에 그친다. 그러나 문턱을 올리면 이야기가 달라진다. \(1.0\)으로 올려 "\(10\)년 내내 원금을 지킨 펀드만" 남기면 \(398\)개가 살아남고 그들의 평균은 \(2.063\)으로 참값보다 \(27\%\) 높다. 연평균 수익률로 환산하면 참값 \(5.0\%\)가 \(7.5\%\)로 보인다.
이 모의실험에는 실력 좋은 펀드가 하나도 없다. 모두 똑같은 분포에서 나왔고 기대수익률이 전부 \(5\%\)다. 그런데도 살아남은 펀드만 모아 놓으면 "꾸준히 시장을 이기는 운용사"처럼 보인다. 생존자 평균이 높은 것은 그들이 잘해서가 아니라 못한 것들이 목록에서 지워졌기 때문이다.
읽는 법 하나. 생존자 편향의 크기는 "몇 개가 사라졌는가"로 가늠한다. 청산률이 \(3.4\%\)면 편향도 작고, \(60\%\)면 크다. 펀드 성과를 보고하는 자료를 받았을 때 던질 첫 질문은 수익률이 아니라 "이 기간에 문을 닫은 펀드가 몇 개이고 그것들이 표에 들어 있는가"다.
연습문제¶
연습문제 1. 어떤 재무 상담사가 자신이 추천하는 뮤추얼펀드들이 지난 10년간 연평균 12%의 수익률을 냈다고 보여준다. 생존자 편향이 이 수치를 어떻게 부풀릴 수 있는지 설명하라.
풀이
지난 10년간 성과가 나빴던 뮤추얼펀드는 청산되거나 합병되거나 상장폐지되었을 가능성이 높다. 상담사가 현재 추천하는 펀드 목록에는 살아남은 펀드만 들어 있는데, 바로 성과가 좋았기 때문에 살아남은 것이다. 손실을 내고 문을 닫은 펀드는 평균에서 빠져 있다.
문을 닫은 펀드들이 청산 전까지 예컨대 2%의 평균 수익률을 냈다면, 살아남은 펀드와 청산된 펀드를 모두 포함한 참된 평균은 12%보다 훨씬 낮을 것이다. 이것이 생존자 편향이다. 생존(계속 존재함)을 조건으로 삼으면 전형적인 성과를 과대평가하게 된다.
연습문제 2. 제2차 세계대전 중 에이브러햄 왈드는 어디에 장갑을 덧댈지 결정하기 위해 귀환한 항공기의 총알 구멍을 연구했다. 총알 구멍이 가장 많은 부위를 보강하는 것이 왜 생존자 편향 때문에 잘못된 판단인지 설명하라.
풀이
조사된 항공기는 피격당했음에도 무사히 귀환한 기체들이다. 귀환한 비행기에서 총알 구멍이 많은 부위는 손상을 입고도 살아남을 수 있는 부위다. 거기에 맞아도 비행기는 기지로 돌아올 수 있다는 뜻이다.
다른 부위(엔진, 연료탱크, 조종석)에 피격당한 비행기는 돌아오지 못했다. 격추되었기 때문이다. 그 치명적인 부위들은 정확히 거기에 맞으면 치명적이기 때문에 생존기에서 총알 구멍이 적게 나타난다.
왈드는 귀환한 비행기에서 총알 구멍이 적은 부위에 장갑을 덧대야 한다고 올바르게 추론했다. 그 부위에 맞으면 비행기를 잃게 되기 때문이다. 구멍이 많은 부위를 보강하는 것은 이미 손상을 견딜 수 있는 부분을 보호하는 셈이다.
연습문제 3. 성공한 창업가를 연구한 결과 70%가 대학을 중퇴했다고 한다. 중퇴가 창업 성공 확률을 높인다고 결론지어야 하는가? 그 이유는?
풀이
아니다. 이 연구는 성공한 창업가(생존자)만 조사했으며, 성공한 창업가가 되지 못한 훨씬 더 많은 대학 중퇴자를 무시한다. 적절한 비교는 전체 중퇴자 대비 전체 졸업자의 성공률이어야 한다.
그런데 이 연구가 계산한 것은 \(P(\text{dropout} \mid \text{success})\), 즉 역방향 조건부확률이다. 베이즈 정리에 따르면 이 둘은 다른 양이다. 일반 인구에서 중퇴자가 졸업자보다 훨씬 많다면, \(P(\text{dropout} \mid \text{success})\)가 높은 것은 \(P(\text{success} \mid \text{dropout})\)이 아주 낮은 것과 얼마든지 양립한다.
연습문제 4. 스타트업을 5년간 추적하는 종단연구에서 생존자 편향을 완화할 구체적인 전략을 제안하라.
풀이
핵심 전략은 다음과 같다.
- 배정대로 등록: 시작 시점에 모든 스타트업을 등록하고 생존 여부와 무관하게 추적한다. 등록된 모든 기업에 대해 결과(성공, 실패, 피벗, 인수)를 기록한다.
- 이탈 추적: 스타트업이 실패하거나 인수되면 자료에서 그냥 지우는 대신 최종 상태와 이탈 시점을 기록한다.
- 모든 자료 포함: 분석에 실패한 기업의 부분적 궤적도 포함한다. 예를 들어 평균 매출을 계산할 때 생존 기업만이 아니라 모든 기업-연도를 사용한다.
- 이탈률 보고: 각 시점에서 연구를 이탈한 스타트업 수를 명시적으로 보고하고 생존자와 비생존자의 특성을 비교한다.
- 민감도 분석: 실패한 스타트업을 포함한 결과와 제외한 결과를 모두 계산해 생존자 편향의 크기를 정량화한다.
연습문제 5. 장기 투자에 관한 어떤 교과서가 1928–2023년 미국 S&P 500을 근거로 "주식은 연평균 10%의 수익을 낸다"고 보고한다. 이 수치가 생존자 편향으로 부풀려졌다는 반론이 지수 수준과 국가 수준에서 각각 제기된다. 둘을 검토하여 어느 쪽이 실제 편향이고 어느 쪽이 근거가 약한 통념인지 가려라.
풀이
지수 수준의 생존: 여기서는 무엇이 편향이고 무엇이 아닌지를 정확히 갈라야 한다.
지수 수익률 계열 자체는 생존자 편향을 갖지 않는다. 구성 종목이 파산하거나 상장폐지되면 그 손실이 제외되는 시점의 가격에 이미 반영되어 계열에 남는다. 지수는 실제로 굴릴 수 있는 포트폴리오의 기록이다. 실제로 시걸과 슈워츠(2006)는 1957년의 원래 500개 종목을 사서 계속 보유한 포트폴리오가 재편되는 실제 지수를 오히려 조금 앞섰다고 보고했다. 재편이 수익률을 위로 부풀린다는 통념은 자료로 뒷받침되지 않는다.
편향은 자료를 거꾸로 만들 때 생긴다. "오늘의 S&P 500 구성 종목을 1990년에 샀다면"처럼 현재의 명단으로 과거를 재구성하는 되돌아보기 검정이 전형이다. 오늘 명단에 있다는 것 자체가 살아남았다는 조건이므로, 이렇게 만든 수익률은 크게 부풀려진다. 상장폐지 종목을 지워 버린 주가 데이터베이스도 같은 결함을 갖는다. 편향은 지수에 있는 것이 아니라 분석자가 만든 표본에 있다.
덧붙여 이 문제에서 "1928년부터의 S&P 500"이라는 말 자체가 부정확하다. S&P 500은 1957년에 만들어졌고, 그 이전 구간은 종목 수가 더 적은 선행 지수를 이어 붙인 것이다.
국가 수준의 생존: 이쪽이 진짜 생존자 편향이다. 미국은 20세기에 파국적 단절을 겪지 않은 몇 안 되는 주요 시장 중 하나다(몰수도 없었고 본토에서 시장을 파괴한 전쟁도 없었다). 러시아(1917), 중국(1949), 독일(1923, 1945) 투자자들은 주식 자산의 대부분 또는 전부를 잃었다. 미국의 \(10\%\)를 근거로 "주식은 이만큼 번다"고 말하는 것은, 20세기를 무사히 통과한 한 시장을 뽑아 전체의 대표로 삼는 것이다.
비교할 때는 단위를 맞추어야 한다. \(10\%\)는 명목 수익률이고 실질로는 연 \(6\%\)대다. 딤슨·마시·스톤턴이 1900년 이후 주요 20여 개국을 모은 집계에서 세계 주식의 실질 수익률은 연 \(5\%\) 안팎으로, 미국보다 \(1\)–\(1.5\)%포인트 낮다. 표준 참고문헌은 이들의 Triumph of the Optimists다.
그리고 이 \(5\%\)에도 전액 손실을 겪은 시장의 몫이 온전히 들어가 있지는 않다. 자료가 끊긴 시장의 수익률은 애초에 계열로 남지 않기 때문이다. 평균이 얼마인가보다, 평균을 낼 수 있었던 시장만 평균에 들어갔다는 사실이 더 중요하다.
지수 수준에서 말한 되돌아보기 편향과 국가 수준의 생존 편향은 모두 역사적 추정값을 위로 끌어올리며, 은퇴 계획과 연기금 운용에 직접적인 함의를 갖는다.
연습문제 6. 어떤 의학 학술지가 \(p < 0.05\)인 연구만 게재한다. 이 출판 편향이 연구 수준의 생존자 편향인 이유를 설명하라. 메타분석에 미치는 결과 하나와 흔히 쓰는 보정책 하나를 제시하라.
풀이
완료된 각 연구가 하나의 "사례"다. 유의한 결과를 얻은 연구는 출판까지 "생존"할 가능성이 높고, \(p > 0.05\)인 연구는 출판되지 않은 채 서랍에 처박히는 일이 많다(서랍 문제). 따라서 출판된 문헌은 수행된 모든 연구의 비무작위 표본이며 더 큰 효과 쪽으로 편향되어 있다.
메타분석에 미치는 결과: 출판된 연구를 결합한 통합 효과 추정값은 참된 효과를 과대평가한다. 규모가 작거나 귀무 결과이거나 상반된 연구들이 빠져 있기 때문이다. 메타분석의 효과 추정값은 위로 편향되고, 신뢰구간은 불확실성을 과소평가한다.
흔히 쓰는 보정책: 깔때기 그림(funnel plot) 은 각 연구의 효과 크기를 표준오차에 대해 표시한다. 출판 편향이 없으면 그림은 작은 연구일수록 넓어지는 대칭적인 깔때기 모양이 되고, 비대칭(왼쪽 아래에 효과가 작은 소규모 연구가 비어 있음)은 출판 편향의 진단 신호다. 정량적 보정으로는 에거 회귀검정, 누락된 연구를 대체해 넣는 trim-and-fill, 출판 확률을 \(p\)-값의 함수로 명시적으로 모수화하는 선택 모형 등이 있다. 다만 가장 믿을 만한 해법은 사전등록이다. 자료를 수집하기 전에 연구와 분석 계획을 확정해 두는 것이다.
연습문제 7. 위 보기의 편향은 \(+0.039\)로 크지 않았다. 편향의 크기는 무엇이 정하는가? 청산 기준을 바꿔 가며 생존자 편향이 어떻게 커지는지 보여라.
풀이
import numpy as np
rng = np.random.default_rng(0)
n, years = 20_000, 10
returns = rng.normal(0.05, 0.15, (n, years))
cum = np.cumprod(1 + returns, axis=1)
print(f"{'청산 기준':>10}{'생존 수':>9}{'전체 평균':>11}{'생존자 평균':>13}{'편향':>9}")
for thr in (0.0, 0.5, 0.7, 0.9, 1.0):
surv = np.all(cum > thr, axis=1) # 한 번이라도 기준 아래면 청산
print(f"{thr:>10.1f}{surv.sum():>9}{cum[:, -1].mean():>11.4f}"
f"{cum[surv, -1].mean():>13.4f}{cum[surv, -1].mean() - cum[:, -1].mean():>+9.4f}")
출력:
청산 기준 생존 수 전체 평균 생존자 평균 편향
0.0 20000 1.6285 1.6285 +0.0000
0.5 19448 1.6285 1.6591 +0.0306
0.7 17078 1.6285 1.7655 +0.1370
0.9 11399 1.6285 1.9783 +0.3497
1.0 7501 1.6285 2.1240 +0.4955
편향이 \(+0.03\)에서 \(+0.50\)까지 커진다. 선택이 강할수록 편향이 크다는 것이 핵심이며, 여기서 선택의 강도는 살아남는 비율로 읽으면 된다.
| 청산 기준 | 생존율 | 편향 |
|---|---|---|
| \(0.5\) | \(97\%\) | \(+0.031\) |
| \(0.9\) | \(57\%\) | \(+0.350\) |
| \(1.0\) | \(38\%\) | \(+0.496\) |
기준 \(1.0\)은 "원금을 한 번도 밑돌지 않았을 것"이라는 뜻인데, 이 조건을 통과한 펀드의 최종 배수는 \(2.12\)로 전체 평균 \(1.63\)의 \(1.3\)배다. 실력이 전혀 없는 세계에서 이만한 차이가 나온다는 점을 잊지 말아야 한다. 모든 펀드가 똑같은 분포에서 나왔기 때문이다.
어떤 요인이 편향을 키우는가.
- 선택의 강도: 걸러지는 비율이 클수록 커진다.
- 변동성: 수익률의 분산이 클수록 운의 몫이 커지고, 걸러지는 것과 살아남는 것의 차이도 커진다.
- 기간: 시간이 길수록 청산 기회가 늘어 누적된다.
실무 함의. 헤지펀드처럼 변동성이 크고 청산이 잦은 자산군에서 생존자 편향이 가장 심하다. 헤지펀드 지수의 과거 수익률이 연 \(2\)–\(4\%\)포인트 부풀려져 있다는 추정이 흔하다. 반면 대형 상장기업 지수는 청산이 드물어 편향이 작다.
덤으로 알 수 있는 것. 자료가 "생존자만" 담고 있어도 청산 비율을 알면 편향의 크기를 가늠할 수 있다. 데이터베이스 제공자가 "이 기간 중 \(40\%\)의 펀드가 사라졌다"고 밝힌다면, 그 자체가 보고된 수익률을 얼마나 깎아 읽어야 할지 알려 주는 정보다. \(\square\)
연습문제 8. 왈드가 실제로 푼 문제를 풀어라. 생존기의 부위별 피탄 분포로부터 부위별 격추 확률을 추정하라.
풀이
모형. 한 대의 비행기가 부위 \(r\)에 받는 피탄 수가 \(N_r \sim \text{Poisson}(\lambda p_r)\)이고(\(p_r\)은 그 부위가 맞을 확률, 대략 면적에 비례), 부위 \(r\)의 피탄 하나가 독립적으로 확률 \(q_r\)로 비행기를 격추시킨다고 하자. 비행기가 살아남을 확률은
이다. 포아송의 성질에 의해, 생존기 중에서 부위 \(r\)의 평균 피탄 수는
가 된다. 따라서
로 격추 확률을 되찾을 수 있다. 분모는 "모든 비행기가 돌아왔다면 그 부위에 몇 발이 있었을까"이고, 분자는 실제로 관측된 값이다. 둘의 차이가 사라진 비행기의 몫이다.
import numpy as np
rng = np.random.default_rng(0)
regions = ["엔진", "조종석", "연료계통", "날개", "동체", "꼬리"]
p = np.array([0.10, 0.05, 0.10, 0.30, 0.30, 0.15]) # 피탄 확률 (면적 비례)
q = np.array([0.40, 0.60, 0.35, 0.03, 0.02, 0.05]) # 참 격추 확률 (미지)
lam, N = 4.0, 400_000
hits = rng.poisson(lam * p, size=(N, 6))
p_down = 1 - np.prod((1 - q) ** hits, axis=1)
survived = rng.random(N) > p_down
print(f"생존율 {survived.mean():.4f}\n")
observed = hits[survived].mean(axis=0) # 우리가 볼 수 있는 유일한 자료
expected = lam * p # 노출로부터 아는 값
q_hat = 1 - observed / expected
print(f"{'부위':>9}{'생존기 평균 피탄':>17}{'추정 격추확률':>15}{'참값':>8}")
for i, r in enumerate(regions):
print(f"{r:>9}{observed[i]:>17.4f}{q_hat[i]:>15.4f}{q[i]:>8.2f}")
출력:
생존율 0.5997
부위 생존기 평균 피탄 추정 격추확률 참값
엔진 0.2406 0.3986 0.40
조종석 0.0801 0.5996 0.60
연료계통 0.2598 0.3504 0.35
날개 1.1643 0.0298 0.03
동체 1.1804 0.0163 0.02
꼬리 0.5696 0.0507 0.05
추정값이 참값을 소수점 둘째 자리까지 되찾는다.
표를 거꾸로 읽어야 한다. 조종석은 생존기에서 피탄 수가 가장 적지만(\(0.080\)) 격추 확률은 가장 높다(\(0.60\)). 동체는 피탄이 가장 많지만(\(1.180\)) 격추 확률은 가장 낮다(\(0.02\)). 두 열의 순서가 정확히 반대다.
이것이 왈드의 통찰을 정량화한 것이다. 장군들이 보고 있던 것은 첫째 열이고, 결정에 필요한 것은 셋째 열이었다.
일반 원리. 생존자 자료에서 결론을 끌어내려면 선택 기제를 모형화해야 한다. 여기서는 그것이 가능했는데, "모든 비행기가 돌아왔다면 어땠을까"를 알려 주는 외부 정보(\(\lambda p_r\), 곧 부위별 노출 면적)가 있었기 때문이다.
선택 기제를 모형화할 수 없다면 생존자 자료로는 아무것도 할 수 없다. 왈드의 기여는 편향을 지적한 것이 아니라 그것을 고칠 방법을 준 것이다. \(\square\)
연습문제 9. 생존자 편향의 크기를 정확히 계산하라. \(X \sim N(\mu, \sigma^2)\)이고 \(X > c\)인 것만 관측될 때 \(\mathbb{E}[X \mid X > c]\)를 구하고 수치로 확인하라.
풀이
\(\alpha = (c-\mu)/\sigma\)라 두면 절단정규분포의 평균은
이다. 여기서 \(\phi\)와 \(\Phi\)는 표준정규의 밀도와 분포함수이고, \(\lambda(\alpha) = \phi(\alpha)/(1-\Phi(\alpha))\)를 역밀즈비라 한다.
유도. \(Z = (X-\mu)/\sigma\)로 두면
인데, \(z\phi(z) = -\phi'(z)\)이므로 적분이 \([-\phi(z)]_\alpha^\infty = \phi(\alpha)\)가 된다. \(\square\)
import numpy as np
from scipy import stats
rng = np.random.default_rng(0)
mu, sigma = 0.05, 0.15 # 연 수익률 5%, 변동성 15%
x = rng.normal(mu, sigma, 2_000_000)
print(f"{'절단 c':>8}{'생존율':>9}{'이론 E[X|X>c]':>15}{'모의':>10}{'편향':>9}")
for c in (-0.10, 0.0, 0.05, 0.10):
a = (c - mu) / sigma
surv = 1 - stats.norm.cdf(a)
theory = mu + sigma * stats.norm.pdf(a) / surv
print(f"{c:>8.2f}{surv:>9.4f}{theory:>15.5f}{x[x > c].mean():>10.5f}"
f"{theory - mu:>+9.5f}")
출력:
절단 c 생존율 이론 E[X|X>c] 모의 편향
-0.10 0.8413 0.09314 0.09318 +0.04314
0.00 0.6306 0.13977 0.13978 +0.08977
0.05 0.5000 0.16968 0.16968 +0.11968
0.10 0.3694 0.20322 0.20324 +0.15322
이론과 모의가 소수점 넷째 자리까지 일치한다.
읽는 법. 참 평균 수익률은 \(5\%\)인데, "손실을 낸 적 없는" 펀드만 보면(\(c = 0\)) \(13.98\%\)로 보인다. 거의 세 배다. 실력 차이가 전혀 없는데도 그렇다.
역밀즈비의 성질.
- 언제나 양수다. 즉 아래쪽을 잘라내면 반드시 평균이 올라간다.
- \(\alpha\)가 커질수록(선택이 엄격해질수록) 커진다.
- \(\alpha \to \infty\)에서 \(\lambda(\alpha) \approx \alpha\)이므로 \(\mathbb{E}[X\mid X>c] \approx c\)가 된다. 극단적으로 선택하면 관측되는 값이 문턱 바로 위에 몰린다.
어디서 다시 만나는가. 이 공식은 통계학 곳곳에서 되풀이된다. 헤크먼의 표본선택 보정에서는 역밀즈비를 회귀에 설명변수로 직접 넣어 선택편향을 보정하고(헤크먼 2단계 추정), 절단회귀와 토빗 모형, 그리고 생존분석의 위험률 계산에도 같은 양이 나타난다. 헤크먼은 이 공로로 2000년 노벨 경제학상을 받았다. \(\square\)
연습문제 10. 연습문제 3의 "성공한 창업가의 \(70\%\)가 중퇴자"를 수치로 따져 보라. 기저율을 알면 무엇이 달라지는가?
풀이
베이즈 정리를 쓰면
이다. 관측된 것은 좌변이고 알고 싶은 것은 \(P(\text{성공}\mid\text{중퇴})\)다. 둘을 잇는 다리가 기저율 \(P(\text{중퇴})\)이며, 여기서 중요한 것은 일반 인구가 아니라 창업을 시도한 사람 중 중퇴자 비율이다.
print(f"{'창업자 중 중퇴 비율':>20}{'중퇴 성공률':>13}{'졸업 성공률':>13}"
f"{'성공자 중 중퇴':>15}{'판정':>10}")
for base in (0.70, 0.50, 0.30):
for s_drop, s_grad in [(0.10, 0.10), (0.10, 0.05)]:
num = base * s_drop
den = num + (1 - base) * s_grad
print(f"{base:>20.0%}{s_drop:>13.0%}{s_grad:>13.0%}{num / den:>15.1%}"
f"{'효과 없음' if s_drop == s_grad else '중퇴 유리':>12}")
출력:
창업자 중 중퇴 비율 중퇴 성공률 졸업 성공률 성공자 중 중퇴 판정
70% 10% 10% 70.0% 효과 없음
70% 10% 5% 82.4% 중퇴 유리
50% 10% 10% 50.0% 효과 없음
50% 10% 5% 66.7% 중퇴 유리
30% 10% 10% 30.0% 효과 없음
30% 10% 5% 46.2% 중퇴 유리
첫 줄이 결정적이다. 창업자의 \(70\%\)가 이미 중퇴자라면, 성공자의 \(70\%\)가 중퇴자인 것은 중퇴의 효과가 정확히 \(0\)이라는 뜻이다. 성공률이 양쪽 다 \(10\%\)로 같은데도 기사 제목은 똑같이 "성공한 창업가의 \(70\%\)는 중퇴자"가 된다.
거꾸로 놓고 보면 더 분명하다. 중퇴자의 성공률이 졸업자의 두 배인 경우에도, 창업자 중 중퇴자가 \(30\%\)뿐이라면 성공자 중 중퇴자 비율은 \(46\%\)에 그친다. \(70\%\)라는 수치 자체는 효과의 크기에 대해 아무것도 말해 주지 않는다.
기사에서 이 오류를 잡아내는 법
"성공한 \(X\)의 \(N\%\)가 \(Y\)였다"는 형태의 주장을 보면 곧바로 두 가지를 물어라.
- \(Y\)인 사람 중 몇 %가 성공했는가? (방향이 옳은 조건부확률)
- 시도한 사람 중 몇 %가 \(Y\)였는가? (기저율)
둘 중 하나라도 없으면 그 기사는 아무것도 말하지 않은 것이다.
왜 이 오류가 사라지지 않는가. 성공한 사람은 세어 보기 쉽지만 시도했다가 실패한 사람은 명단조차 없기 때문이다. 중퇴하고 창업했다가 조용히 실패한 사람은 어느 데이터베이스에도 없다. 분모를 구할 수 없다는 것이 생존자 편향의 본질이며, 그래서 이 오류는 게으름이 아니라 자료의 구조 자체에서 나온다.
본문의 여섯 사례가 모두 같은 구조다. 분자(성공 사례)는 풍부하고 분모(전체 시도)는 보이지 않는다. \(\square\)
정리하며¶
생존자 편향은 언제나 같은 구조를 갖는다. 선택 기제가 있고, 통과한 것만 자료가 되며, 통과 여부가 설명하려는 결과와 상관되어 있다.
- 왈드의 폭격기. 귀환기에 구멍이 적은 곳이 안전한 부위가 아니라, 그곳에 맞으면 돌아오지 못한 부위다. 장갑은 구멍이 없는 곳에 덧대야 했다.
- 빈칸이 정보다. 자료에서 비어 있는 칸을 "없음"으로 읽으면 정확히 거꾸로 결론이 난다. 물어야 할 것은 "무엇이 빠졌고, 왜 빠졌는가"다.
- 같은 구조가 분야를 가리지 않는다. 지수에 남은 종목만 보는 수익률 추정, 성공한 스타트업의 특성 분석, 시험을 완주한 환자만 보는 임상 결과, 살아남은 은행의 위험관리 칭송이 모두 한 가지 오류다.
- 성공 사례 연구가 특히 취약하다. 같은 특성을 지니고 실패한 사례가 보이지 않으므로, 그 특성이 성공의 원인처럼 보인다.
진단하는 법은 간단하다. 표본에 들어오려면 무엇을 통과해야 했는지 묻고, 그 조건이 결과와 상관되는지 본다. 둘 다 그렇다면 추정값은 한쪽으로 기울어 있다.
다음 절 출판 편향과 파일서랍 문제는 이 선택 기제가 연구 자체에 작용하는 경우를 다룬다. 개별 연구는 모두 흠이 없는데 그것들을 모은 문헌만 거짓말을 하는, 다루기 가장 까다로운 형태다.