4. 幸存者偏差深入
在回测中,幸存者偏差是最常见、也最容易被低估的收益高估来源之一。它不会像未来函数那样立刻暴露,也不会像滑点那样直观可见,而是以“看起来合理”的方式,系统性地抬高策略表现。理解它的成因、量化其影响,并掌握历史成分股数据的获取与处理方法,是回测数据治理的基本功。
一、核心原理:幸存者偏差是如何产生的
幸存者偏差的本质是:回测样本只包含了“活到今天”的标的,而缺失了那些曾经存在、后来退市、被并购、被剔除或破产的标的。 当我们在今天获取一份股票池时,数据源通常只提供当前仍在交易的证券列表。用这份列表回溯历史,就等于默认所有历史时期的成分股都是今天这批“幸存者”。
其成因可以归纳为三类:
- 数据源静态化: 多数免费或简易数据接口只返回当前上市股票列表,不提供历史退市记录。
- 指数成分股调整被忽略: 指数每期会剔除表现差、市值缩水或不符合规则的股票,但回测时若只用最新成分股,就抹掉了这些“被淘汰者”。
- 退市与并购数据缺失: 退市股票的历史行情、财务数据往往难以获取,导致回测引擎直接跳过。
关键结论: 幸存者偏差不是“数据错误”,而是“样本选择错误”。它让回测组合在历史中自动避开了那些后来失败的标的,从而高估收益、低估风险。
二、对收益高估的影响:从直觉到量化
幸存者偏差对收益的高估并非线性,而是随回测周期、调仓频率和股票池范围变化。以下是一个典型场景的对比:
| 对比维度 | 使用当前成分股回测 | 使用历史真实成分股回测 |
|---|---|---|
| 年化收益 | 18.5% | 12.3% |
| 最大回撤 | -22% | -35% |
| 夏普比率 | 1.42 | 0.78 |
| 退市/剔除标的占比 | 0% | 约 8%~15% |
高估的机制主要有三点:
- 失败者被剔除: 退市或暴跌的股票不在样本中,回测自然避开了这些负收益。
- 成功者被保留: 长期上涨的股票留在当前列表中,回测反复买入它们,形成“事后择优”。
- 风险被低估: 缺少退市和极端下跌样本,波动率和回撤被系统性压低。
若回测周期跨越 5 年以上,且股票池为中小盘或主题类,幸存者偏差带来的年化高估通常可达 3%~8%,在极端情况下甚至超过 10%。
三、历史成分股数据获取与处理方法
治理幸存者偏差的核心是:让回测在每个历史时点只使用当时真实可交易的股票池。 这需要历史成分股数据,并按时间对齐。以下是可落地的方法流程:
1. 数据获取渠道
- 指数官方文件: 如中证指数、恒生指数、标普道琼斯等官网会公布成分股调整公告,可回溯历史。
- 商业数据库: Wind、Choice、聚源、CRSP、Compustat 等提供历史成分股和退市数据。
- 开源与社区数据: 部分 GitHub 项目维护了指数历史成分股 CSV,但需校验完整性和时点准确性。
- 交易所退市列表: 用于补充退市股票代码、退市日期和最后交易日。
2. 数据表结构设计
建议至少维护两张表:index_members(成分股区间表)和 delisted_stocks(退市表)。示例结构如下:
index_members:
index_code string -- 指数代码,如 000300.SH
stock_code string -- 股票代码
in_date date -- 纳入日期
out_date date -- 剔除日期,空表示仍在内
delisted_stocks:
stock_code string
delist_date date
reason string -- 退市/并购/主动摘牌
3. 时间对齐处理流程
- 确定调仓时点: 每个回测调仓日
T,只查询in_date <= T且(out_date > T或out_date为空)的股票。 - 剔除未来信息: 不得使用
T之后才公布的调整公告,公告日与生效日需区分。 - 补充退市收益: 对在持仓期内退市的股票,按最后交易日价格或退市清算价计算收益,不能直接删除。
- 处理停牌与并购: 停牌期间按停牌前价格或估值价处理;并购换股需按换股比例延续持仓。
一个实用的校验方法:统计每个调仓期的股票数量,若数量长期恒定或只增不减,通常意味着没有正确使用历史成分股数据。
四、案例与复盘:一次典型的偏差修正
某策略回测 2015—2023 年沪深 300 增强,初始使用当前成分股,年化 16.8%,最大回撤 -25%。引入历史成分股和退市数据后,年化降至 11.2%,最大回撤扩大至 -38%。差异主要来自 2015 年股灾期间被剔除的股票、2018 年退市标的以及多次指数调整带来的换手成本。
常见误区包括:
- 只补退市股,不补指数剔除股: 被剔除但未退市的股票同样会带来负收益,必须纳入。
- 用公告日代替生效日: 公告日早于生效日,提前使用会引入未来信息。
- 忽略现金替代: 退市后资金若未再投资,会低估机会成本,需明确处理规则。
复盘要点: 幸存者偏差治理不是一次性工作,而是数据管道的一部分。每次回测前,都应检查股票池是否按历史时点动态生成,退市和剔除标的是否被正确计入收益与风险。
只有把“当时真实可交易”的股票池还原出来,回测结果才具备可信度。否则,再精细的因子和再复杂的模型,都可能建立在被美化过的历史之上。