3、过拟合的根源:数据窥探偏差、参数过度优化、样本内选择偏差、幸存者偏差

做策略回测,最怕什么?

不是亏钱,是你以为能赚钱,实则是幻觉

我见过太多人,拿着回测曲线兴奋地冲进来,实盘一个月就灰头土脸地出去。问题出在哪?说白了,就是过拟合。而过拟合的根源,我总结下来就四个:数据窥探偏差、参数过度优化、样本内选择偏差、幸存者偏差。咱们一个一个拆开聊。

3.1 数据窥探偏差

这玩意儿,我习惯叫它「偷看答案」。什么意思?就是你用未来的数据去指导过去的决策。

举个例子。你写策略的时候,先看了2023年的行情,发现某指标在某个阈值下表现特别好。然后你把这个阈值写进策略,回测2022年的数据。结果当然漂亮——因为你已经知道2023年什么参数好,你只是假装不知道。

嗯,这里要注意。数据窥探偏差最常见的场景是:

  • 多次回测同一段数据:你跑100次,总有一次曲线好看,你选那次。
  • 根据全样本选择参数:你用全部历史数据调参,然后说「这个参数历史表现很好」。
  • 事件驱动型后见之明:你知道某次黑天鹅发生了,于是策略里专门加了应对逻辑。

核心问题:数据窥探偏差让策略「记住」了历史,而不是「学习」了规律。

我在项目中遇到过一件事。有个同事,回测某商品期货策略,夏普比干到3.5。我问他参数怎么选的,他说「我试了200组参数,选了最好的一组」。我说你试试样本外。结果一出,夏普比直接掉到0.6。这就是典型的数据窥探——你用同一段数据既当训练集又当测试集,不出问题才怪。

避坑指南:我曾经犯过同样的错。后来我强制自己:回测数据必须切分成训练集、验证集、测试集三部分。训练集调参,验证集选模型,测试集只做最终评估。测试集只能用一次,用完就封存。

3.2 参数过度优化

参数过度优化,说白了就是「把策略调得太精细,精细到只适合某一段历史」。你想想看,一个策略如果有10个参数,每个参数取10个值,那就是100亿种组合。你总能找到一组参数让回测曲线完美向上。

但问题是,市场不会重复历史。那些参数可能只是拟合了噪声,而不是信号。

我总结了几种常见的参数过度优化表现:

  • 参数数量过多:策略逻辑越复杂,参数越多,过拟合风险越大。
  • 参数取值过于精确:比如移动平均线周期设为17.38天——这明显是拟合出来的。
  • 参数在不同品种间差异巨大:同一个策略,在螺纹钢上参数是A,在铁矿石上参数是B,且两者毫无关联。
参数数量 过拟合风险 建议做法
1-3个 可以手动调参,但要做敏感性分析
4-6个 建议使用交叉验证或正则化方法
7个以上 强烈怀疑策略是否过度复杂,考虑简化

警告:参数越多,不代表策略越好。我见过有人用20个参数的神经网络做高频策略,回测曲线美如画,实盘直接崩盘。记住:简单策略往往更鲁棒

我个人习惯的做法是:先固定大部分参数,只调1-2个核心参数。调完之后,做一次「参数敏感性分析」——把参数上下浮动10%,看看策略表现是否稳定。如果稍微一变就崩,那说明你过拟合了。

3.3 样本内选择偏差

样本内选择偏差,听起来高大上,其实很简单:你只选了「好做」的样本,回避了「难做」的样本。

举个例子。你做股指期货策略,只回测了2015年到2017年的数据。为什么?因为那几年趋势明显,策略表现好。2018年震荡市呢?你故意跳过了。这就是样本内选择偏差。

常见的表现有:

  • 只选牛市回测:策略在牛市中表现好,但熊市中呢?
  • 只选流动性好的时段:避开流动性枯竭的极端行情。
  • 只选特定品种:某个品种历史走势特别「规整」,你只做它。

核心问题:你选择的样本不能代表真实市场的全貌。策略在样本内表现好,不代表在样本外也能赚钱。

我记得有一次,一个朋友给我看他的ETF套利策略,回测年化收益30%。我问他回测区间是什么,他说「2019年到2020年」。我说你试试加上2021年。结果加上之后,年化收益直接降到8%。为什么?因为2021年市场风格切换,他的策略失效了。这就是样本内选择偏差的典型后果。

避坑指南:我曾经只选「好行情」做回测,后来我强制自己:回测必须覆盖至少一个完整的牛熊周期。如果数据不够长,那就用多个品种的数据来补充。记住,策略要能在各种市场环境下生存,而不是只在顺风局里风光。

3.4 幸存者偏差

幸存者偏差,这词儿你可能听过。但在量化里,它有个更具体的含义:你只看到了「活下来」的标的,忽略了「死掉」的标的。

举个例子。你回测A股选股策略,用的是当前还在交易的股票。那些退市的、ST的、暴跌的股票呢?你根本没把它们纳入回测。结果你的策略表现当然好——因为你只选了「幸存者」。

幸存者偏差在量化中的常见表现:

  • 只考虑当前存续的股票/期货合约:忽略了已经退市或下架的品种。
  • 只考虑当前存续的基金:那些清盘的基金,你根本看不到它们的业绩。
  • 只考虑当前表现好的策略:那些已经失效的策略,你不再关注。

警告:幸存者偏差会让你的回测结果虚高10%-30%。我见过有人用「当前中证500成分股」回测一个因子策略,结果夏普比2.0。但如果你用「历史上所有中证500成分股」回测,夏普比可能只有1.2。那消失的0.8,就是幸存者偏差带来的幻觉。

怎么解决?我个人习惯的做法是:使用「无偏」的数据集。比如做股票回测,必须包含所有曾经上市过的股票,包括已经退市的。做期货回测,必须包含所有曾经交易过的合约,包括已经下架的。虽然数据获取成本高,但这是必须付出的代价。

3.5 知识体系总览

说了这么多,咱们用一张图来总结一下这四个根源的关系。我画了个框架图,方便你理解。

过拟合的四大根源 过拟合 数据窥探偏差 偷看未来数据 参数过度优化 拟合噪声而非信号 样本内选择偏差 只选好做的样本 幸存者偏差 忽略已消亡标的 核心思想:回测不是目的,预测才是 避免过拟合 = 避免数据窥探 + 控制参数数量 + 覆盖全样本 + 纳入退市标的

你看,这四个根源其实有一个共同点:它们都让你高估了策略的真实表现。数据窥探让你「偷看答案」,参数过度优化让你「死记硬背」,样本内选择偏差让你「挑软柿子捏」,幸存者偏差让你「只看活下来的英雄」。

嗯,说到这,我想起一个真实的教训。几年前我做CTA策略,回测时用了当时还在交易的所有期货品种,夏普比1.8。结果实盘半年,夏普比只有0.7。后来复盘发现,我犯了两个错:一是用了全样本调参(数据窥探),二是忽略了那些已经下架的品种(幸存者偏差)。从那以后,我每次回测都会问自己三个问题:

  1. 我有没有用未来的信息指导过去的决策?
  2. 我的参数是不是太多、太精确?
  3. 我的样本是否覆盖了各种市场环境,包括极端行情?

一句话总结:过拟合的根源,说白了就是「你让策略记住了历史,而不是理解了规律」。记住这一点,你就能避开80%的坑。

好了,这一章的内容就到这里。下一章咱们聊聊怎么用具体的方法来识别过拟合——毕竟,知道问题在哪只是第一步,能动手解决才是真本事。

专注资料整理