1. 过拟合的本质:从偏差-方差权衡看择时模型的过拟合根源

做量化择时这些年,我见过太多人掉进同一个坑里——模型在历史回测上漂亮得不像话,一上实盘就原形毕露。说白了,这就是过拟合在作祟。今天咱们就从偏差-方差这个经典视角,把过拟合的底裤扒干净。

1.1 偏差与方差:一对天生的冤家

先问个问题:你训练择时模型,到底在追求什么?

我个人习惯把这个问题拆成两部分看。模型预测的误差,其实可以分解成三个部分:

  • 偏差(Bias):模型对真实关系的简化程度。偏差高,意味着模型太简单,连训练数据都拟合不好。
  • 方差(Variance):模型对训练数据波动的敏感程度。方差高,换个数据集模型就大变样。
  • 噪声(Noise):数据本身不可约的随机误差,谁也救不了。

总误差 = 偏差² + 方差 + 噪声

嗯,这里要注意:偏差和方差是此消彼长的关系。你压低了偏差,方差就会翘起来;你控制了方差,偏差又可能抬头。这就是所谓的偏差-方差权衡

核心观点:过拟合的本质,就是模型在训练集上把偏差压得太低,结果方差爆炸,导致模型在未知数据上彻底失灵。

1.2 择时模型为什么特别容易过拟合?

我在项目中遇到过不少择时策略,回测曲线跟教科书一样完美,年化收益30%+,最大回撤不到5%。但实盘一跑,三个月就亏掉20%。为什么会这样?

金融数据有几个要命的特性:

  1. 信噪比极低:价格波动中,真正的信号可能只有1%,剩下99%都是噪声。模型很容易把噪声当信号学进去。
  2. 非平稳性:市场规律会变。去年有效的因子,今年可能就是毒药。
  3. 样本量有限:你想想看,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 偏差-方差权衡给我们的启示

理解了偏差-方差权衡,你就明白了一个道理:择时模型不是越复杂越好,也不是越简单越好,而是在合适的位置找到平衡点。

我个人习惯在建模初期就做两件事:

  1. 设定复杂度上限:根据样本量,倒推模型最多能用多少参数。比如1000个样本,参数就别超过50个。
  2. 做交叉验证:用K折交叉验证来估计模型的泛化误差,而不是只看训练集表现。

说白了,过拟合就是贪心。总想在训练集上做到最好,结果反而害了自己。做量化择时,有时候「差不多」反而是最好的状态。

嗯,这一章咱们把过拟合的根源讲清楚了。下一章我会聊聊如何用量化指标来诊断过拟合,到时候给你看几个我踩过的坑。


专注资料整理