3、过拟合的根源:数据窥探偏差、参数过度优化、样本内选择偏差
聊完了过拟合的几种表现,咱们得挖一挖根儿了。说实话,我见过太多策略,回测曲线漂亮得像教科书,一上实盘就崩。为什么?因为根儿上就歪了。
过拟合不是凭空冒出来的。它有三个主要源头:数据窥探偏差、参数过度优化、样本内选择偏差。这三个家伙,就像量化策略里的「三座大山」,压得很多策略研究员喘不过气来。
我个人习惯,每次开发新策略前,都会把这三条贴在显示器边上。时刻提醒自己:别踩坑。
3.1 数据窥探偏差:你看到的「规律」可能只是噪音
什么叫数据窥探偏差?说白了,就是你用同一份数据又看又测,最后找到的「规律」其实是数据本身的噪音。
举个例子。你拿过去5年的股票数据,反复测试了100个不同的因子。终于发现「周三下午两点买入,周四上午十点卖出」这个策略收益最高。你兴奋得不行。
等等,你想想看——你测试了100次,总有一个「看起来不错」的结果。这就像扔硬币,扔100次,总会有连续10次正面。你能说这是规律吗?
我在项目中遇到过一件事。有个同事花了三个月,在某个商品期货数据上找到了一个「稳赚不赔」的套利策略。回测夏普比3.5,最大回撤不到2%。我当时就问他:「你测试了多少个参数组合?」他说:「大概5000多个吧。」
嗯,问题就在这里。5000多次尝试,总有一个看起来完美的。但那是数据窥探的结果,不是策略本身的能力。
3.2 参数过度优化:追求完美回测的代价
参数过度优化,是量化新人最容易掉进去的坑。你想想看,一个简单的均线策略,参数无非就是长短周期。但有些人非要加上止损、止盈、仓位管理、过滤条件……最后搞出十几个参数。
然后呢?用优化算法一顿搜索,找到一组「完美参数」。回测曲线漂亮得不得了,年化收益50%,最大回撤5%。
但问题来了——这组参数是专门为历史数据「量身定制」的。稍微换一段数据,立马失效。
| 参数数量 | 过拟合风险 | 典型表现 |
|---|---|---|
| 1-2个 | 低 | 参数变化时策略表现稳定 |
| 3-5个 | 中等 | 部分参数敏感,整体尚可 |
| 6个以上 | 高 | 参数微调导致收益剧烈波动 |
我见过最夸张的一个案例:有人做了一个策略,包含17个可优化参数。回测结果堪称完美。但实盘跑了不到一个月,亏了30%。为什么?因为那17个参数组合,恰好拟合了过去3年的所有噪音。
我个人习惯,参数尽量控制在3个以内。如果非要超过5个,我会用交叉验证来检验稳定性。说白了,就是换几段不同的数据跑一跑,看看参数是不是「万金油」。
3.3 样本内选择偏差:你选的「好股票」可能只是幸存者
样本内选择偏差,这个坑更隐蔽。什么意思呢?就是你在构建策略时,有意无意地只选择了「表现好」的样本,忽略了那些「表现差」的。
举个例子。你想做一个A股选股策略。你发现过去5年,消费板块涨得最好。于是你专门针对消费板块设计因子。回测结果当然漂亮——因为你在「好学生」里挑尖子生。
但问题是,未来消费板块还能继续领涨吗?万一风格切换了呢?
我在项目中遇到过类似情况。有个策略在沪深300成分股上回测效果极好,但一换到中证500上就完全失效。为什么?因为策略的因子设计时,无意中「学习」了沪深300的某些特性,而这些特性在其他股票上并不存在。
怎么避免?我建议做两件事:
- 扩大样本范围:不要只选某个板块或某个指数成分股。把全市场股票都纳入考虑,看看策略在不同类型股票上的表现。
- 引入「坏样本」:主动加入一些表现差的股票,看看策略能不能识别出它们。如果策略只在好股票上有效,那说明它可能只是「跟风」。
知识体系总览
下面这张图,是我自己总结的过拟合根源分析框架。每次做策略,我都会对照着检查一遍。
这三个根源,其实相互关联。数据窥探偏差让你看到「假规律」,参数过度优化让你「记住噪音」,样本内选择偏差让你「只看好的一面」。三者叠加,策略的过拟合程度会指数级上升。
嗯,说到这里,我想起一个经典案例。有个量化团队开发了一个「高频因子」,回测效果惊人。后来发现,他们无意中用了未来数据——用当天的收盘价去预测当天的涨跌。这就是数据窥探偏差的极端表现。
所以,每次做策略,我都会问自己三个问题:
- 我有没有用同一份数据反复测试?
- 我的参数是不是太多了?
- 我选的样本是不是有偏?
这三个问题,能帮你避开大部分过拟合的坑。下一节,咱们聊聊怎么具体诊断过拟合——毕竟,发现问题只是第一步,解决问题才是关键。