1. 过拟合的本质:从偏差-方差权衡看择时模型的过拟合根源
做量化择时这些年,我见过太多人掉进同一个坑里——模型在历史回测上漂亮得不像话,一上实盘就原形毕露。说白了,这就是过拟合在作祟。今天咱们就从偏差-方差这个经典视角,把过拟合的底裤扒干净。
1.1 偏差与方差:一对天生的冤家
先问个问题:你训练择时模型,到底在追求什么?
我个人习惯把这个问题拆成两部分看。模型预测的误差,其实可以分解成三个部分:
- 偏差(Bias):模型对真实关系的简化程度。偏差高,意味着模型太简单,连训练数据都拟合不好。
- 方差(Variance):模型对训练数据波动的敏感程度。方差高,换个数据集模型就大变样。
- 噪声(Noise):数据本身不可约的随机误差,谁也救不了。
总误差 = 偏差² + 方差 + 噪声
嗯,这里要注意:偏差和方差是此消彼长的关系。你压低了偏差,方差就会翘起来;你控制了方差,偏差又可能抬头。这就是所谓的偏差-方差权衡。
核心观点:过拟合的本质,就是模型在训练集上把偏差压得太低,结果方差爆炸,导致模型在未知数据上彻底失灵。
1.2 择时模型为什么特别容易过拟合?
我在项目中遇到过不少择时策略,回测曲线跟教科书一样完美,年化收益30%+,最大回撤不到5%。但实盘一跑,三个月就亏掉20%。为什么会这样?
金融数据有几个要命的特性:
- 信噪比极低:价格波动中,真正的信号可能只有1%,剩下99%都是噪声。模型很容易把噪声当信号学进去。
- 非平稳性:市场规律会变。去年有效的因子,今年可能就是毒药。
- 样本量有限:你想想看,A股30年数据,日频也就7000多个样本。参数一多,自由度根本不够用。
我曾经接手过一个团队留下的择时模型,用了47个技术指标,还做了各种非线性变换。回测漂亮,但实盘一塌糊涂。后来我砍到只剩5个核心因子,效果反而好了。这就是典型的过拟合案例。
1.3 偏差-方差权衡在择时中的可视化
为了让你更直观地理解,我画了一张图:
从这张图可以看得很清楚:模型复杂度太低时(左侧),偏差高,模型欠拟合,连训练数据都学不好。复杂度太高时(右侧),方差飙升,模型把噪声也学进去了,这就是过拟合。最优的点,在中间那个绿色虚线位置。
1.4 择时模型过拟合的典型症状
我总结了几条实战中判断过拟合的经验,你对照看看:
| 症状 | 表现 | 我见过最夸张的案例 |
|---|---|---|
| 回测完美,实盘崩盘 | 训练集夏普3.0+,实盘变负 | 有人用100个因子拟合出年化50%的曲线 |
| 参数敏感 | 参数微调1%,收益差10倍 | 移动平均线参数从20改成21,结果天差地别 |
| 样本外失效 | 不同时间段回测结果差异巨大 | 2015年有效,2016年就失效 |
| 策略复杂 | 规则多到写满三页纸 | 一个择时策略用了47个条件 |
⚠️ 避坑指南:我曾经犯过一个低级错误——用全样本数据做特征选择,然后做回测。结果看起来很好,实际上已经偷窥了未来信息。记住:特征选择必须在训练集内完成,测试集绝对不能碰。
1.5 从偏差-方差看常见的过拟合原因
咱们把几个典型场景套进偏差-方差框架里看看:
- 特征太多:每加一个特征,模型就多一个自由度。自由度多了,方差自然就大。我建议初始特征不要超过样本量的1/10。
- 模型太复杂:比如用5层神经网络做择时,而你的数据只有2000个样本。这就像用大炮打蚊子,打不中不说,还容易走火。
- 反复调参:在同一个数据集上反复试参数,本质上是在拟合噪声。你想想看,试100次参数,总有一次运气好能碰上好结果,但那不是真本事。
- 数据泄露:用未来数据训练模型,偏差看起来很低,但方差其实已经失控了。这是最隐蔽的过拟合。
💡 我的经验:判断一个择时模型是否过拟合,有个简单粗暴的方法——把回测期分成三段,用前两段训练,第三段验证。如果三段结果差异很大,基本可以断定过拟合了。我管这叫「三段验证法」,虽然简单,但很管用。
1.6 偏差-方差权衡给我们的启示
理解了偏差-方差权衡,你就明白了一个道理:择时模型不是越复杂越好,也不是越简单越好,而是在合适的位置找到平衡点。
我个人习惯在建模初期就做两件事:
- 设定复杂度上限:根据样本量,倒推模型最多能用多少参数。比如1000个样本,参数就别超过50个。
- 做交叉验证:用K折交叉验证来估计模型的泛化误差,而不是只看训练集表现。
说白了,过拟合就是贪心。总想在训练集上做到最好,结果反而害了自己。做量化择时,有时候「差不多」反而是最好的状态。
嗯,这一章咱们把过拟合的根源讲清楚了。下一章我会聊聊如何用量化指标来诊断过拟合,到时候给你看几个我踩过的坑。