4. 幸存者偏差深入

在回测中,幸存者偏差是最常见、也最容易被低估的收益高估来源之一。它不会像未来函数那样立刻暴露,也不会像滑点那样直观可见,而是以“看起来合理”的方式,系统性地抬高策略表现。理解它的成因、量化其影响,并掌握历史成分股数据的获取与处理方法,是回测数据治理的基本功。

一、核心原理:幸存者偏差是如何产生的

幸存者偏差的本质是:回测样本只包含了“活到今天”的标的,而缺失了那些曾经存在、后来退市、被并购、被剔除或破产的标的。 当我们在今天获取一份股票池时,数据源通常只提供当前仍在交易的证券列表。用这份列表回溯历史,就等于默认所有历史时期的成分股都是今天这批“幸存者”。

其成因可以归纳为三类:

  • 数据源静态化: 多数免费或简易数据接口只返回当前上市股票列表,不提供历史退市记录。
  • 指数成分股调整被忽略: 指数每期会剔除表现差、市值缩水或不符合规则的股票,但回测时若只用最新成分股,就抹掉了这些“被淘汰者”。
  • 退市与并购数据缺失: 退市股票的历史行情、财务数据往往难以获取,导致回测引擎直接跳过。

关键结论: 幸存者偏差不是“数据错误”,而是“样本选择错误”。它让回测组合在历史中自动避开了那些后来失败的标的,从而高估收益、低估风险。

二、对收益高估的影响:从直觉到量化

幸存者偏差对收益的高估并非线性,而是随回测周期、调仓频率和股票池范围变化。以下是一个典型场景的对比:

对比维度 使用当前成分股回测 使用历史真实成分股回测
年化收益 18.5% 12.3%
最大回撤 -22% -35%
夏普比率 1.42 0.78
退市/剔除标的占比 0% 约 8%~15%

高估的机制主要有三点:

  1. 失败者被剔除: 退市或暴跌的股票不在样本中,回测自然避开了这些负收益。
  2. 成功者被保留: 长期上涨的股票留在当前列表中,回测反复买入它们,形成“事后择优”。
  3. 风险被低估: 缺少退市和极端下跌样本,波动率和回撤被系统性压低。

若回测周期跨越 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. 时间对齐处理流程

  1. 确定调仓时点: 每个回测调仓日 T,只查询 in_date <= T 且(out_date > T 或 out_date 为空)的股票。
  2. 剔除未来信息: 不得使用 T 之后才公布的调整公告,公告日与生效日需区分。
  3. 补充退市收益: 对在持仓期内退市的股票,按最后交易日价格或退市清算价计算收益,不能直接删除。
  4. 处理停牌与并购: 停牌期间按停牌前价格或估值价处理;并购换股需按换股比例延续持仓。

一个实用的校验方法:统计每个调仓期的股票数量,若数量长期恒定或只增不减,通常意味着没有正确使用历史成分股数据。

四、案例与复盘:一次典型的偏差修正

某策略回测 2015—2023 年沪深 300 增强,初始使用当前成分股,年化 16.8%,最大回撤 -25%。引入历史成分股和退市数据后,年化降至 11.2%,最大回撤扩大至 -38%。差异主要来自 2015 年股灾期间被剔除的股票、2018 年退市标的以及多次指数调整带来的换手成本。

常见误区包括:

  • 只补退市股,不补指数剔除股: 被剔除但未退市的股票同样会带来负收益,必须纳入。
  • 用公告日代替生效日: 公告日早于生效日,提前使用会引入未来信息。
  • 忽略现金替代: 退市后资金若未再投资,会低估机会成本,需明确处理规则。

复盘要点: 幸存者偏差治理不是一次性工作,而是数据管道的一部分。每次回测前,都应检查股票池是否按历史时点动态生成,退市和剔除标的是否被正确计入收益与风险。

只有把“当时真实可交易”的股票池还原出来,回测结果才具备可信度。否则,再精细的因子和再复杂的模型,都可能建立在被美化过的历史之上。