4. 幸存者偏差的数学原理

在上一节中,我们已经直观地看到:只统计“活下来”的样本,会系统性地高估策略表现。本节要把这种直觉形式化,用三个数学工具解释幸存者偏差为什么必然导致回测失真:选择偏差决定样本如何被筛掉,条件概率刻画“被观测到”这一事件对分布的影响,期望扭曲则给出偏差的最终量化结果。理解这三者,才能在后续的 Point-in-Time 回测中知道该修哪里、修到什么程度。

一、核心原理:从全样本到幸存样本的映射

设真实策略集合为 \( \Omega \),其中每个策略 \( i \) 有一个真实收益 \( R_i \)。回测者实际能观测到的,只是满足“存活条件”的子集 \( S \subseteq \Omega \)。幸存者偏差的本质,是我们用 \( E[R \mid S] \) 去估计 \( E[R] \),而两者一般不等。

选择偏差(Selection Bias)描述的是进入样本的机制不是随机的。若存活概率 \( P(S \mid R) \) 与收益 \( R \) 正相关——高收益策略更容易被保留、被展示、被继续跟踪——那么样本就是有偏的。条件概率把这一点写清楚:

P(R | S) = P(S | R) · P(R) / P(S)

其中:
P(R)      :全样本中收益为 R 的先验概率
P(S | R)  :给定收益 R 时被观测到的概率(存活/入选机制)
P(R | S)  :在幸存样本中观测到收益 R 的概率
P(S)      :整体被观测到的边际概率

当 \( P(S \mid R) \) 随 \( R \) 增大而增大时,\( P(R \mid S) \) 会把高收益区域的概率质量放大,把低收益和已退出样本的概率质量压缩。这就是“看到的分布”与“真实分布”分叉的起点。

二、期望扭曲的推导与量化

把偏差落到期望上,可以得到一个非常实用的分解。设真实期望为 \( \mu = E[R] \),幸存样本期望为 \( \mu_S = E[R \mid S] \),则:

μ_S - μ = E[R | S] - E[R]
        = Cov(R, 1_S) / P(S)

其中 1_S 为存活指示变量。
若 Cov(R, 1_S) > 0,则 μ_S > μ,回测被高估。

这个式子说明:偏差大小等于收益与存活指示变量的协方差除以存活率。它带来三个直接推论:

  • 存活率 \( P(S) \) 越低,同样的协方差造成的期望扭曲越大;
  • 只要存活机制与收益相关,偏差就不会因为样本量增大而消失,反而更稳定地显现;
  • 偏差方向由协方差符号决定,若“差策略更容易被保留”(如某些数据供应商只保留有历史记录的基金),偏差甚至可能反向。
关键结论:幸存者偏差不是随机噪声,而是系统性偏移。增加回测长度、增加标的数量,都不能消除它,只能让它更“显著”。

三、方法流程:识别与校正幸存者偏差

在实战中,可以按以下流程把上述数学原理落地为可执行步骤:

  1. 定义全样本宇宙:明确在回测起点时点上,哪些标的、策略、基金是“当时真实存在”的,而不是今天还活着的。
  2. 记录退出事件:退市、清盘、停止披露、策略下线,都要作为样本的一部分保留,并记录退出时间与退出原因。
  3. 估计存活机制:分析 \( P(S \mid R) \) 是否与收益相关,可用分组统计或逻辑回归检验。
  4. 构造 Point-in-Time 面板:每个调仓日只使用当日可得的信息集,避免未来函数。
  5. 计算偏差上界:用 \( Cov(R, 1_S)/P(S) \) 估算期望扭曲量级,判断是否需要更严格的校正。
  6. 敏感性分析:分别用“仅幸存样本”和“含退出样本”回测,对比差异,形成偏差报告。

下面是一个最小化的 Point-in-Time 样本构造示例,重点在于“按日期切片”而不是“按当前名单回溯”:

# 伪代码:Point-in-Time 样本构造
for date in rebalance_dates:
    universe = get_universe_as_of(date)      # 当日真实存在的标的
    prices   = get_prices_as_of(date)        # 当日可得价格
    signals  = compute_signals(universe, prices)
    weights  = optimize(signals)
    record_portfolio(date, weights)

# 关键:universe 必须包含之后退出的标的
# 退出标的在退出日之后不再参与,但退出前必须保留

四、案例与场景:同一策略的两种回测

假设某量化团队开发了一个“小盘价值”策略,初始股票池为 2015 年全部 A 股。到 2024 年,部分股票已退市或被 ST 后长期停牌。团队分别用两种方式回测:

对比项 仅幸存样本回测 Point-in-Time 回测
股票池 2024 年仍上市的股票 每个调仓日真实存在的股票
退市样本 被剔除 保留至退出日
年化收益 18.5% 11.2%
最大回撤 -22% -35%
偏差来源 高收益幸存者被保留 包含退市与清盘损失

差异并非来自策略逻辑变化,而是来自样本选择。仅幸存样本回测中,那些因财务恶化而退市的股票被系统性删除,相当于人为剔除了左尾损失,于是收益被高估、回撤被低估。这正是 \( Cov(R, 1_S) > 0 \) 在真实数据中的体现。

实战提示:如果数据供应商只提供“当前成分股”的历史行情,那么无论你如何写回测代码,都已经站在幸存者偏差之上。此时应优先更换数据源,而不是在代码层面做复杂修补。

五、常见误区与复盘

  • 误区一:样本足够大就没有偏差。偏差来自选择机制,不来自样本量。大样本只会让有偏估计更稳定。
  • 误区二:只要用了历史数据就是 Point-in-Time。Point-in-Time 的核心是“当时可得”,而不是“历史日期”。当前成分股回溯历史,仍然是幸存者样本。
  • 误区三:退市样本影响很小,可以忽略。在小盘、高波动策略中,退市与清盘往往集中在左尾,忽略它们会显著改变期望与回撤。
  • 误区四:校正一次就一劳永逸。存活机制会随市场制度、数据供应商政策变化,需要定期重新检验。
复盘要点:任何回测报告都应明确写出样本宇宙的定义、退出样本的处理方式、以及是否包含已退市/已清盘标的。缺少这三项,收益数字就缺乏可比性。

把本节内容压缩成一句话:幸存者偏差的数学本质,是用条件分布 \( P(R \mid S) \) 替代了真实分布 \( P(R) \),其期望扭曲量级由 \( Cov(R, 1_S)/P(S) \) 决定。只有显式建模“谁被观测到、谁被剔除”,Point-in-Time 回测才真正成立。