2. 过拟合的数学定义:偏差-方差权衡与泛化误差分解
聊到过拟合,很多人第一反应就是「模型在训练集上表现太好,在测试集上拉胯」。嗯,这个直觉没错,但咱们做量化交易的,不能只停留在感觉层面。你得能用数学语言把它说清楚。
我个人习惯把过拟合拆成三个核心问题:偏差、方差、还有它们之间的权衡。搞懂了这三兄弟,你就能从根上理解——为什么你的策略回测曲线那么漂亮,实盘却一塌糊涂。
2.1 泛化误差:你到底在优化什么?
先问一个问题:我们训练一个量化策略,最终目的是什么?
不是让它在历史数据上赚最多钱。而是让它在未来未知数据上表现稳定。这个「未来未知数据上的表现」,数学上就叫泛化误差。
我见过太多人,回测曲线画得跟教科书一样完美,结果一上实盘就崩。为什么?因为他优化的根本不是泛化误差,而是训练误差。说白了,他一直在「背答案」,而不是「学方法」。
泛化误差可以分解成三部分:
泛化误差 = 偏差² + 方差 + 噪声
这个公式,就是整个过拟合问题的数学起点。咱们一个一个拆开看。
2.2 偏差:你的模型够「准」吗?
偏差衡量的是模型预测值的期望与真实值之间的差距。说白了,就是你的模型「平均来看」偏不偏。
举个例子。你用一个简单的均线策略去预测股价趋势。均线策略本身假设「过去N天的平均价格能代表未来方向」。这个假设对不对?不一定。如果市场是强趋势行情,均线策略的偏差就小;如果市场是震荡行情,均线策略的偏差就大——因为它根本抓不住震荡中的反转点。
我在项目中遇到过这样的情况:用线性回归去拟合期权隐含波动率曲面。线性模型简单、解释性强,但偏差很大——它根本描述不了波动率微笑的曲度。这就是高偏差的典型表现。
高偏差模型的特点:
- 对训练数据拟合不足(欠拟合)
- 在训练集和测试集上表现都差
- 模型过于简单,假设太强
2.3 方差:你的模型够「稳」吗?
方差衡量的是模型对训练数据微小变化的敏感程度。如果训练数据稍微变一点点,你的模型参数就剧烈抖动——那方差就高。
为什么会这样?
你想想看,一个复杂的模型(比如带了几十个参数的神经网络),它为了拟合训练数据中的每一个细节,会把决策边界画得弯弯曲曲。训练数据里有一个异常点?没关系,模型会专门为它「绕个弯」。但问题是,这个异常点可能只是随机噪声。模型记住了噪声,而不是信号。
我曾经做过一个CTA策略,用了20多个技术指标做特征,还加了二次项和交叉项。回测结果好得吓人,年化收益50%+,夏普比率3.0。我当时还挺得意。结果换了一个样本外时间段测试,收益直接变成负的。为什么?因为模型把过去几年中几次偶然的「共振行情」当成了规律,方差太大了。
高方差模型的特点:
- 对训练数据拟合过度(过拟合)
- 训练集表现极好,测试集表现极差
- 模型复杂,参数多,对数据敏感
2.4 偏差-方差权衡:你不可能两头都占
这里有个残酷的现实:偏差和方差通常是此消彼长的。你降低偏差,方差就会升高;你降低方差,偏差就会升高。你不可能两头都占。
我画了一张图,帮你直观理解这个关系:
看到那条绿色的U型曲线了吗?那就是总误差。模型太简单(左边),偏差高,总误差大;模型太复杂(右边),方差高,总误差也大。只有在中间某个点,偏差和方差达到平衡,总误差最小。
这个「中间点」,就是我们做量化策略时追求的最优模型复杂度。
2.5 噪声:你永远无法消除的部分
分解公式里还有一项——噪声。这是数据本身固有的随机性,任何模型都无法消除。
金融市场里噪声无处不在:
- 订单流中的随机波动
- 新闻事件引发的瞬时冲击
- 其他交易者的非理性行为
我经常跟团队说一句话:「不要试图预测噪声。你预测不了,也不该去预测。」
噪声的存在,给泛化误差设定了一个下界。就算你的模型完美捕捉了所有真实规律,误差也不可能降到零。因为数据里有一部分就是随机的。
⚠️ 重要提醒: 如果你在回测中看到某个策略的R²接近1.0,或者夏普比率超过5.0,第一反应不应该是「我发财了」,而应该是「我过拟合了」。因为金融数据中的噪声比例很高,任何声称能完美预测市场的模型,大概率是在拟合噪声。
2.6 量化交易中的实际含义
好了,数学讲完了。咱们回到量化交易的实际场景里,看看这个偏差-方差权衡到底意味着什么。
假设你在开发一个股票择时策略:
| 模型类型 | 偏差 | 方差 | 典型表现 |
|---|---|---|---|
| 简单均线策略(如MA5/MA20) | 高 | 低 | 趋势行情赚钱,震荡行情亏钱 |
| 多因子线性模型(10个因子) | 中 | 中 | 多数行情稳定,极端行情可能失效 |
| 深度神经网络(100+参数) | 低 | 高 | 回测完美,实盘崩溃 |
我个人习惯的做法是:先控制方差,再优化偏差。因为方差过高的模型,你根本不知道它什么时候会崩。而偏差高的模型至少是可解释的、可预期的。
💡 实用技巧: 判断一个策略是否方差过高,有个简单方法——把回测数据随机切分成5份,每次用4份训练、1份测试,重复5次。如果5次测试结果差异很大(比如夏普比率从0.5到3.0),那你的策略方差就太高了。这就是交叉验证的思想,后面章节会详细讲。
2.7 小结:记住这三句话
这一章内容不少,但核心就三句话:
- 泛化误差 = 偏差² + 方差 + 噪声——这是过拟合问题的数学根源
- 偏差和方差不可兼得——降低一个,另一个就会升高
- 最优模型在中间——不是越复杂越好,也不是越简单越好
我曾经花了大半年时间,在一个高频策略上反复调参,试图把回测夏普做到4.0以上。结果呢?每次调完参数,回测好看两天,换段时间又崩了。后来我才明白,我一直在跟噪声较劲,而不是在优化真正的泛化能力。
嗯,希望你别走我这条弯路。
公众号:蓝海资料掘金营,微信deep3321