过拟合(曲线拟合)
过拟合(overfitting),也叫曲线拟合(curve fitting),指的是一条交易规则被调得太贴合某一段历史样本,以至于在抓住可重复结构的同时,也把这段样本的偶然形态一并抓了进去,于是它的回测成绩会高估这条规则在新数据上的表现。参数越多、在同一批数据上试过的配置越多,过拟合就越容易出现。
Senzoukria · 术语表 · 更新于 2026 年 9 月
它是怎么被造出来的
每一段历史样本里都含有不会重现的形态。一条可调部件足够多的规则,总能被凑得贴合它们:加一个过滤条件去掉亏得最惨的那天,把阈值往旁边挪一挪以多抓一笔盈利,看完资金曲线之后再挑一个时段截断点。每一次这样的调整都会改善样本内成绩,却不会给未来增加任何兑现的东西。
「挑选」这件事不改规则也能起到同样的效果。在同一段样本上跑很多组配置,只留最好的那个;在纯噪声上,多次随机抽样中的最优者看起来也像一个优势。这就是为什么「试过多少组配置」必须和结果一起写进记录里。
要留意的征兆
- 样本内稳步上扬,接着样本外曲线走平或下滑。
- 相邻的参数取值表现远差于选中的那个;靠谱的规则通常坐落在一片高原上,而不是一根尖刺上。
- 成本稍微提高一点,结果就崩掉。
- 规则里含有说不出经济或微观结构理由的条件,而且是在检视亏损之后才加上去的。
- 在试过并丢掉大量变体之后才得到的亮眼结果。
能把它揪出来的检验
| 检验 | 它回答的问题 |
|---|---|
| 前推分析 | 在过去选出的参数,在紧随其后的时期上还成立吗? |
| 参数稳定性 | 在每个维度上挪一步,这条规则还能用吗? |
| 紧缩夏普比率 | 这个结果和「试过的那堆配置里的最优者」区分得开吗? |
| 回测过拟合概率 | 样本内的冠军在样本外掉队的频率有多高? |
| 置换检验 | 在打乱后的数据上,这个结果和运气区分得开吗? |
| 成本敏感性 | 手续费和滑点提高之后,优势还在吗? |
在 Senzoukria 里
自动回测面板里的「闯关」一节,标题是「闯关——这个优势是真的吗?」,它会在一次跑完的前推分析上执行上述检验:一个按试过的配置数量做过修正的紧缩夏普比率、一次针对纯运气的置换检验,以及回测过拟合概率——后者建立在一张全时期网格之上,网格里的每一组配置都会在全部 K 线上重跑一遍。每项标准都被标为淘汰性或参考性,整节最终收敛到 GO、NO-GO 或有条件通过。
紧缩夏普的解读分三档措辞:结果扛住了这项修正;试过的配置数量能解释其中相当一部分;或者它和随机抽样中的最优者已经区分不开——面板把最后这种情况描述为「过拟合长什么样」。参数稳定性图会把选中的配置和网格上紧邻它的配置画在一起,并说明「高原才是真优势的样子」。当扫描规模过大时,面板会警告:越过那个点,你量的是过拟合的运气。这些都是针对给定数据的报告,不是保证。
常见错误
- 因为某个过滤条件能去掉某一串连亏,就把它加进规则。
- 在整段历史上做优化,然后把这段历史的成绩当成结果报出来。
- 把参数网格上一根孤零零的尖刺当成一项发现。
- 找到一个好配置之后,就把「试过多少变体」这个计数丢掉。
相关内容
其他语言版本
常见问题
- 参数多少算多?
- 没有固定数字;真正要看的是可调部件的数量相对于样本中独立交易笔数的比例,以及一共试过多少种组合。一条只有两个参数、却在几十笔交易上扫了几百种组合的规则,可以和一条有十个参数的规则一样过拟合。请记录配置数量,并读一个把它考虑进去的紧缩统计量。
- 前推分析的结果对过拟合免疫吗?
- 不免疫。前推分析把「挑选」这件事挪出了测试窗口,从而消除了最直接的那种曲线拟合;但分析者仍然可以在看到结果之后修改切片、网格或选择规则,从而对流程本身过拟合。请在开跑之前固定这些选择,并记录每一次运行,包括被你丢掉的那些。
- 参数高原告诉了我什么?
- 它告诉你,这条规则的成绩并不依赖于恰好落在某一个精确取值上。如果每个维度上挪一步的相邻配置表现也差不多,说明规则抓到的东西比样本的一次巧合更宽泛。反过来,一根四周邻居都很差的孤立尖刺,是完全相反的信号。