3. 幸存者偏差入门
一、核心原理:我们看到的样本,是被“筛选”过的
幸存者偏差(Survivorship Bias)是一种典型的样本选择偏差:当我们只统计“最终仍然存在”的个体,而忽略那些已经消失、退出、破产、下架或被淘汰的个体时,就会系统性地高估某种策略、资产或群体的真实表现。它的危险不在于数据算错,而在于数据从一开始就不完整。
用一句话概括:你看到的不是全部样本,而是经过生存筛选后的子样本。在投资与回测中,这种筛选往往由数据库、指数编制规则、基金清盘机制、退市制度等“看不见的手”完成。你以为自己在研究“市场”,实际上研究的是“活到今天的市场”。
其数学直觉可以这样表达:设全体样本为 N,其中存活样本为 S,真实期望为 E[N],而你可观测的期望为 E[S]。由于 S 剔除了表现差、风险高、已退出的个体,通常有 E[S] > E[N]。回测若基于 S,收益会被高估,风险会被低估。
二、来源:幸存者偏差从哪里进入数据
幸存者偏差不是单一错误,而是多个环节共同作用的结果。常见来源包括:
- 数据库只保留当前存在的标的:已退市股票、已清盘基金、已违约债券被删除,历史行情随之消失。
- 指数成分股回溯调整:今天的指数成分是“赢家”,用今天的成分去回测过去,等于提前知道谁活了下来。
- 基金业绩展示:表现差的基金清盘后不再披露,存续基金的平均业绩被抬高。
- 策略研究中的样本筛选:研究者只保留有完整历史数据的标的,而完整数据本身与存活高度相关。
- 信息传播与叙事:媒体只报道成功者,失败者沉默,导致对成功概率的误判。
这些来源可以归纳为一条链:退出机制 → 数据删除 → 样本偏移 → 统计高估 → 决策误导。理解这条链,才能在回测中定位偏差入口。
三、直观案例:从“基金平均收益”到“回测曲线”
假设某市场十年间共有 1000 只基金,其中 400 只因业绩差、规模小被清盘,600 只存续至今。若只统计存续的 600 只,平均年化收益为 8%;而把已清盘的 400 只纳入,平均年化仅 3%。这 5 个百分点的差距,就是幸存者偏差的直接体现。
在股票回测中,问题更隐蔽。假设你使用“当前仍在交易的股票池”回测 2010—2020 年动量策略。那些在 2015 年退市、2018 年暴雷的股票从未进入样本,策略自然避开了大量尾部风险。回测曲线因此更平滑、夏普更高,但实盘无法复制。
四、影响:从统计指标到实盘决策的全面失真
幸存者偏差的影响不是“略微乐观”,而是系统性的。它至少体现在四个层面:
| 影响层面 | 具体表现 | 后果 |
|---|---|---|
| 收益估计 | 年化收益、超额收益被高估 | 预期回报不切实际 |
| 风险评估 | 波动率、最大回撤被低估 | 仓位过重、风控失效 |
| 因子有效性 | 因子IC、分组收益被夸大 | 选股信号实盘衰减 |
| 策略容量 | 流动性、冲击成本被忽略 | 规模一放大就失效 |
更严重的是,幸存者偏差会与过拟合、前视偏差叠加,形成“三重放大”。回测看起来完美,实盘却持续亏损,研究者往往归因于市场变化,而真正的问题在样本构建阶段就已埋下。
五、方法流程:识别与缓解幸存者偏差
在实战中,可按以下流程处理:
- 确认样本 universe 是否 point-in-time:每个历史时点应包含当时真实存在的全部标的,而非当前存续标的。
- 纳入已退出标的:退市、清盘、违约的标的必须保留其历史数据,并标注退出原因与时间。
- 使用历史成分股:指数回测应采用历史成分名单,而非最新成分回溯。
- 检查数据缺失模式:若缺失集中在差标的,说明偏差已进入数据。
- 做敏感性对比:分别用“含退出样本”和“仅存续样本”回测,观察指标差异。
# 伪代码:构建 point-in-time 股票池
for date in trading_days:
universe = get_listed_stocks(date) # 当时已上市
universe -= get_delisted_before(date) # 剔除已退市
universe += get_delisted_on(date) # 当日退市仍纳入
run_strategy(universe, date)
六、误区与复盘
误区一:只要数据量大就没有幸存者偏差。数据量再大,若退出样本被删除,偏差依然存在。
误区二:用当前指数成分回测长期表现是行业惯例。惯例不等于正确,它恰恰是偏差的常见来源。
误区三:幸存者偏差只影响股票,不影响基金和债券。任何有退出机制的领域都存在,包括基金清盘、债券违约、加密货币归零。
复盘时,建议追问三个问题:我的样本里,谁消失了?它们为什么消失?如果把它们加回来,结论还成立吗?能回答这三个问题,才算真正入门幸存者偏差。