2. 过拟合的常见原因:数据窥探偏差、参数过度优化、样本内与样本外划分不当、幸存者偏差

做量化策略最怕什么?不是亏钱,而是你明明亏了钱,却还以为策略没问题。我见过太多人,回测曲线漂亮得像教科书,一上实盘就崩。说白了,问题就出在过拟合。今天咱们把这四个罪魁祸首掰开揉碎了讲清楚。

核心观点:过拟合的本质,是你把策略训练成了「背答案」的机器,而不是「会解题」的选手。

过拟合四大成因框架图 过拟合 策略失效的根源 数据窥探偏差 反复使用同一数据 导致统计显著性失真 参数过度优化 参数越多,过拟合风险越大 拟合了噪声而非信号 样本划分不当 训练集与测试集重叠 或划分方式不合理 幸存者偏差 只关注存活标的 忽略已退市品种 四种原因往往同时出现,相互叠加放大过拟合效应

2.1 数据窥探偏差:你看了不该看的答案

数据窥探偏差,说白了就是你用未来的信息去指导过去的决策。我刚开始做量化时犯过这个错——回测时觉得某个形态很准,后来才发现,我其实是在看到结果后,才回头去「发现」这个形态的。

为什么会这样?因为你反复在同一个数据集上测试、调整、再测试。每一次调整,其实都在「偷看」答案。你想想看,如果你考试前先看了答案,那考试分数能代表你的真实水平吗?

我的习惯:每次做策略研究前,我会先把数据分成三份——训练集、验证集、测试集。训练集用来开发策略,验证集用来调参数,测试集只碰一次。测试集的结果,就是你的「期末考试成绩」。

具体来说,数据窥探偏差有几种常见表现:

  • 反复回测同一段历史——你改一个参数跑一次,改一个条件跑一次,跑100次总能找到「最优」组合。但那是针对历史的最优,不是未来的最优。
  • 根据结果反向推导逻辑——看到某段行情涨得好,就编个理由说「因为XX指标金叉了」。这其实是事后诸葛亮。
  • 使用全量数据做特征选择——用所有历史数据来筛选因子,相当于你提前知道了哪些因子「有效」。

我曾经踩过的坑:有一次我开发了一个趋势跟踪策略,回测年化收益40%,最大回撤只有8%。我兴奋得不行。结果实盘三个月就亏了15%。后来复盘才发现,我在回测时用了未来数据来优化止损参数——说白了,我让策略「提前知道」了哪里会跌。

2.2 参数过度优化:把噪声当成了信号

参数过度优化,是过拟合最常见的形式。你给策略加了10个参数,每个参数有20种取值,那组合起来就是20的10次方种可能。你总能找到一组参数让回测曲线完美无瑕。

但问题是——市场里大部分波动是噪声。你拟合了噪声,而不是信号。我见过有人把移动平均线的周期优化到37天,问他为什么是37?他说「因为回测效果最好」。嗯,这其实就是在背答案。

参数过度优化的典型特征:

  • 参数数量远多于有效信号数量——比如你只有3年的数据,却优化了50个参数
  • 参数取值非常「精确」——比如止损设在3.7%而不是3%或5%
  • 参数微小变化导致结果剧烈波动——参数从37改成38,收益就从30%变成-10%
参数数量 过拟合风险 建议做法
1-3个 可以手动优化,但需验证稳定性
4-8个 使用交叉验证,限制参数范围
9个以上 强烈建议减少参数或使用正则化

我建议:参数越少越好。一个只有2-3个参数的策略,如果回测效果好,那大概率是找到了真实规律。一个10个参数的策略,回测再漂亮我也要打个问号。

2.3 样本内与样本外划分不当:考试和复习用的是同一张卷子

样本内和样本外划分不当,是个很隐蔽的问题。你以为自己做了样本外测试,但实际上样本外数据里包含了样本内的「影子」。

举个例子:你用2015-2019年数据做训练,2020年数据做测试。但如果你在训练时用了滚动窗口的统计量(比如过去60天的均值),那2020年第一天的数据其实包含了2019年最后60天的信息。这就产生了数据泄露。

常见的划分错误:

  • 随机划分时间序列数据——股票数据是时间序列,不能像图像识别那样随机打乱。你拿2020年的数据训练,拿2015年的数据测试,这完全不合理。
  • 没有考虑数据的前后依赖——很多技术指标依赖历史数据,划分时要把「预热期」也算进去。
  • 样本外测试次数过多——你反复用样本外数据来调整策略,那样本外就变成了新的样本内。

我曾经犯过的错:有一次我做因子测试,把数据按70%/30%随机划分。结果回测效果特别好。后来才发现,因为股票数据有自相关性,随机划分导致训练集和测试集里包含了相似的市场状态。说白了,策略其实是在「背」市场状态,而不是「学」交易逻辑。

正确的做法是:按时间顺序划分,比如前70%的时间段做训练,后30%做测试。而且测试只能做一次。

2.4 幸存者偏差:你只看到了活下来的英雄

幸存者偏差,是量化里最容易被忽视的问题。你回测时只用了当前还在交易的股票,那些退市的、暴跌的、被ST的,都被你自动过滤掉了。

你想想看,如果你只统计活下来的人,那「平均寿命」当然高。同样的道理,如果你只回测活到今天的股票,那策略表现当然好——因为你自动排除了那些让你亏钱的标的。

幸存者偏差的影响有多大?

  • 高估策略收益——退市股票往往有极端负收益,排除它们会让回测曲线更漂亮
  • 低估风险——你永远不知道下一个退市的是谁
  • 因子失效——很多因子在幸存者样本里有效,但在全样本里无效

我的做法:每次回测前,我会先确认数据是否包含「已退市」的标的。很多免费数据源只提供当前存活的股票,这其实是个大坑。我建议使用专业的金融数据库,或者自己手动补充退市数据。

举个具体的例子:假设你在2010年选了100只股票做回测,到2023年,可能有20只已经退市了。如果你只用剩下的80只做回测,那你的策略收益至少被高估了20%-30%。

总结一下:这四个原因,说白了就是你在用各种方式「作弊」。数据窥探是偷看答案,参数优化是死记硬背,样本划分不当是考试时翻书,幸存者偏差是只统计学霸的成绩。每一个都会让你的回测结果失真。

嗯,说到这里,你应该能理解为什么那么多「完美策略」一上实盘就崩了。不是策略不好,而是你从一开始就埋下了过拟合的种子。下一节我们会聊怎么识别过拟合——毕竟,发现问题只是第一步,解决问题才是关键。


专注资料整理