← 返回博客列表

量化投资从入门到精通

【量化投资从入门到精通 #28】参数优化的陷阱网格搜索为什么会过拟合

2026年08月22日 16:58 · 麦蕊智数 MyData

上篇教你切样本。这篇告诉你:就算切了样本,"挑冠军"这个动作本身仍然有毒。

一、这个方法解决什么投资问题

每个人学会回测后的第一件事,都是写个循环把参数全试一遍,然后挑收益最高的那组。

这个动作叫网格搜索(grid search),它在机器学习里是标准操作,在量化里却是头号杀手。原因很简单:历史只有一条,你试的组合越多,撞上"运气好"的组合的概率就越大。

二、核心思想:冠军 ≠ 最优,冠军 = 最会拟合噪声的那个

一组参数的样本内收益 = 真实规律 + 噪声

你按样本内收益排名,排在第一的往往不是"真实规律最强",而是"恰好把这段噪声吃得最准"。噪声不会重复,所以到了样本外,冠军就现原形。

判断标准也很直白:样本内冠军,在样本外能不能跑赢所有参数的平均值? 跑不赢,说明你的排名毫无预测力。

三、实操演示

grid = [(f, s) for f in (3,5,8,10) for s in (15,20,30,40)]   # 16 组
rows = [(f, s, ret(ins,f,s), ret(oos,f,s)) for f,s in grid]  # 样本内/外各跑一遍
rows.sort(key=lambda r: -r[2])                                # 按样本内排名

真实输出(2026-08-06,000001,16 组参数,样本内/外各 125 根):

样本内排名 参数 样本内收益 样本外收益
第 1 名 (8, 20) +1.31% −2.32%
第 2 名 (10, 30) +0.37% −7.42%
第 3 名 (5, 40) +0.35% −1.23%
第 4 名 (8, 30) −0.35% −3.31%
第 5 名 (10, 20) −0.60% −3.24%
  • 样本内冠军 (8,20):+1.31% → −2.32%
  • 全部 16 组样本外平均:−0.12%
  • 冠军样本外跑输平均 2.2 个百分点

四、结果解读

这张表最刺眼的地方在于:样本内前五名,样本外全是负的。

如果排名有预测力,你至少应该看到"名次越靠前,样本外越好"的趋势。实际是完全没有相关性——第 3 名 (5,40) 的样本外 −1.23%,反而比冠军好。

更要命的是:冠军 −2.32% 还跑输了 16 组的平均 −0.12%。这意味着你花力气挑出来的参数,还不如闭着眼睛随便选一组。这就是过拟合的定义——优化过程不但没帮上忙,还起了反作用。

参数数量与过拟合的关系:本例只有 2 个参数、16 种组合就已经这样了。如果你加上止损比例、持仓上限、过滤条件……组合数轻松破万,"总能找到一组回测翻倍的",然后你就真的信了。

五、常见陷阱

  • 参数越多越自豪:每多一个可调参数,过拟合风险指数上升。能用 2 个别用 5 个。
  • 只报冠军不报分布:正确做法是看整个参数曲面——如果只有一个孤峰赚钱、周围全亏,那就是噪声;如果是一片连续的高原,才可能是真规律。
  • 拿样本外反复试:试第二次,样本外就污染了。
  • 忽略"策略本身不成立"的可能:本例 16 组里样本内正收益只有 3 组,这本身就是红灯。

六、小结 + 下篇预告

网格搜索找到的"最优参数",多数时候只是最会背答案的那个学生。判据只有一条:样本内冠军,样本外能否跑赢参数平均。跑不赢,就别信排名,去看参数高原。

下篇 #29:相关性与分散——不改策略、不调参数,只靠"多买几个"就能降 26% 的波动。

免责声明

本文为量化方法教学,标的为示例,不构成投资建议,不承诺收益。投资有风险,入市需谨慎。

标签: 指数数据
QQ 客服 3826425416 咨询时请提供证书号或订单号,便于快速处理
咨询