回测准确率从90%到92%?别急着高兴,可能只是统计噪声
2026/9/14 7:52:56 网站建设 项目流程

先讲个场景:你在回测系统里把新信号叠加到已有策略上,面板显示准确率从 90% 跳到 92%。那个数字跳动的瞬间,心跳也会跟着跳一下——我太熟悉这种感觉了。但接下来我要泼一盆冷水:在绝大多数情况下,这两个百分点证明不了任何事,既不说明新策略更优,也不说明你的改动真的有效。

“机器人策略”这几个字听起来很硬核,但落到评估环节,本质就是一套预测或决策流程。回测就是给这套流程打分,90 和 92 是两次得分。问题在于:分数波动是常态,真正要回答的是“这个提升是系统性的进步,还是随机波动带来的幻觉”。这篇文章就围绕这个判断展开,讲清楚为什么两个百分点通常不够用,以及我们应该用什么方式评估策略提升,才能避免被回测数字欺骗。

1. 为什么 90% 到 92% 这两个点最容易骗人

1.1 先算一笔账:置信区间直接告诉你答案

准确率不是一个精确的数字,它是一个基于有限样本的估计值。同样是 90% 的准确率,建立在 100 个样本和建立在 10000 个样本上的可信度完全不同。我们通常用置信区间来表达这种不确定性。

以 500 个样本、准确率 90% 为例,用 Wilson 区间粗略估算,95% 置信区间大约是 87.1% 到 92.5%。什么意思?就是真实准确率大概率落在这个范围里。那么 92% 的版本在哪里?它的置信区间大约是 89.3% 到 94.2%。两个区间有大量重叠,你根本没法区分 90% 和 92% 来自两个不同的真实水平,还是同一水平下的随机波动。

我习惯用一个简单的 Python 片段快速计算:

from statsmodels.stats.proportion import proportion_confint for acc, n in [(0.90, 500), (0.92, 500), (0.90, 2000), (0.92, 2000), (0.90, 10000), (0.92, 10000)]: ci = proportion_confint(int(acc * n), n, method='wilson') print(f"acc={acc:.2f}, n={n}: 95% CI = [{ci[0]:.4f}, {ci[1]:.4f}]")

输出大致如下:

准确率样本量95% 置信区间
90%50087.1% ~ 92.5%
92%50089.3% ~ 94.2%
90%200088.7% ~ 91.3%
92%200090.8% ~ 93.2%
90%1000089.4% ~ 90.6%
92%1000091.5% ~ 92.5%

样本量到 10000 时,两个区间开始分离,这时两个百分点的差异才可能有统计意义。但很多机器人策略的验证集停留在几百到几千个样本,这个量级下,90% 和 92% 几乎无法区分。

1.2 两个百分点的差异大概率落在噪声带里

准确率这类指标天然带噪声。真实场景里,市场状态、样本分布、随机种子这些因素都会让结果抖动。同一个策略,换一个随机种子,或者换一段验证数据,回测结果经常就波动 1 到 3 个百分点。

我之前做过一次测试:同一个参数组合,跑 10 个不同的随机种子,最好的结果和最差的结果差了 4.6 个百分点。这还只是处理器的浮点误差和数据划分顺序的影响。在这样宽的噪声带里,90% 到 92% 的提升根本称不上“信号”,只能算噪声范围内的普通波动。

理解这件事,关键在于区分“统计显著性”和“实际显著性”。统计显著性回答的是“这个差异是不是偶然”,实际显著性回答的是“如果差异是真的,它值不值得你付出成本去切换”。很多人在 90% 到 92% 上兴奋,连第一步都没做完——差异是否显著都不知道,就直接跳到“新策略更优”的结论。

1.3 从 A/B 测试逻辑看策略对比

评估机器人策略和做 A/B 测试的逻辑一样。你在两个策略上得到两个数字,想知道哪个更好,本质是在做假设检验。零假设是“两个策略的真实水平相同”,观测到的差异是抽样误差造成的。

传统 A/B 测试里,我们不会因为某天转化率从 10% 涨到 10.5% 就宣布实验成功,样本量不够时,这种波动很正常。策略回测对 90% 和 92% 的比较,也是同一个道理:样本量不够,差异就不可靠。

但这里有个更隐蔽的问题:回测不是一次独立的观测。你在同一段历史上反复测试,相当于把同一批数据用了无数回,任何一次偶然的 92% 都会被放大成“改进有效”的证据。这就引出后面要说的过拟合和多重比较问题。

2. 什么时候两个百分点能说明问题

2.1 样本量足够大且方差够小时

统计教条是:样本量足够大,微小差异也可能显著。这个说法没错,但要加上前提——数据质量可靠,且不存在隐藏的依赖结构。

如果验证集有 10 万个独立样本,90% 和 92% 的置信区间几乎不重叠,这时说“新策略准确率更高”是有底气的。但注意,金融时间序列的样本往往不是独立的,相邻样本之间高度相关。实际有效的独立样本数远小于表面样本数,所以门槛应该定得更高。

我的经验标准是:如果样本量只有几千,两个百分点就当没看见;样本量几万,可以谨慎参考;样本量几十万以上,并且做了去重和独立性检查,两个百分点的提升才值得当作备选结论。

2.2 变化集中在关键子集时

另一种情况:总体准确率只涨了两个点,但把样本拆开看,变化集中在某个关键子集。

举个例子,一个交易策略对全部品种的胜率从 90% 涨到 92%,整体看意义不大。但如果你发现在高波动时段,胜率从 76% 涨到了 84%,而低波动时段基本没变,那这个变化可能不是噪声。它说明新策略确实在某个特定状态下捕获到了新的规律。

实操上,我把这种分析叫做“子群拆解”。对比两个策略时,不只盯总准确率,还要按品种、按时段、按市场状态拆开看,找到变化来源。真正有价值的提升通常有迹可循,而不是均匀分布在各处。均匀涨两个点的贡献,反而是最该怀疑的。

2.3 对风险和成本高度敏感时

有些场景里,两个百分点的价值不是靠统计显著性衡量的,而是靠业务影响衡量的。

比如某个策略的止损触发率从 92% 降到 90%,虽然差异在统计上不一定显著,但按当前仓位规模换算,这 2% 可能对应每月几十万的成本差异。又比如在高频场景下,准确率从 90% 到 92% 可能直接影响盈亏比,哪怕统计上不完全确定,也值得小仓位试验。

这时候的关键是区分“回测差异”和“业务决策”。统计上不显著,不代表业务上不能试。但你要承认,试错成本是被当作用真金白银换验证数据。

3. 比“涨两个点”更危险的事:过拟合与多重比较

3.1 回测里的 90% 可能已经在记忆噪声

90% 准确率本身可能就已经被过拟合污染了。一个策略参数越多、调整次数越多,它在回测集上的表现就越偏离真实水平。

你可以这样理解:给策略加参数,就像给一个学生增加做题时的“小抄”。考试题目不变,小抄越多,成绩越高。但一旦换一套新题,抄来的东西全没用。回测本质上就是拿同一套过去的数据反复“考试”,策略反复在上面调整,分数自然越调越高。

这带来一个残酷的结果:你看到的 90% 变成 92%,很可能不是新策略学到了更多规律,而是它在训练集上把噪声也记住了。两个百分点的提升,只是“记忆”加深的产物,而不是“理解”加深的产物。

3.2 反复调参让 92% 变成“幸存者”

每次修改策略后都跑一遍回测,然后选结果最好的版本,这是很多人都在做的事。但这里存在一个数学陷阱:尝试次数越多,纯靠运气出现高分的概率就越大。

假设真实水平没有任何变化,每次回测结果在 90% 附近随机波动。你试 20 种改动,哪怕每一种都无效,按正态分布的规律,总有一个结果可能跑到 92% 以上。这时候你把 92% 当作改进的证据,实际上你只是选出了一个“幸运样本”。

这就是多重比较问题。它在我们这个行业尤其隐蔽,因为很多人的迭代流程本身就是“改一下、跑一下、看分数”,把整个调参过程当成了一次大型抽奖。最终选出的 92%,可能只是抽奖盒子里的最高那张彩票。

3.3 准确率提升的三种伪解释

我把常见的伪解释总结成三种类型,对比时可以直接对照:

伪解释典型表现真实情况
随机波动型只跑一次回测,看到 92% 就宣布提升重跑一次可能又回落到 90%,甚至更低
过拟合型验证集没有独立于调参过程新策略在训练集上提升,换新数据就打回原形
幸存者型尝试了几十种改动,只报告最好的一个其他 19 种改动可能全是负贡献,只是你选择忽略

这三种情况都有一个共同点:回测数字看起来漂亮,但无法在独立数据上复现。要识别它们,光靠看 90% 和 92% 的对比图是不够的,必须从流程上改变评估方式。

4. 策略评估的正确姿势:少看单点,多看分布

4.1 用样本外与前向测试替代来回测

对抗过拟合最直接的方法是做样本外测试。把数据按时间切分,前段用来开发策略、调参数,后段留出来,只在最后验证一次。留在后面的数据就像考试的新卷子,策略之前没见过。

更严格的做法是前向测试。模拟真实交易节奏,每天只用已知数据做决策,然后用之后的数据评估。这个方式最接近实盘,也最不会“作弊”。

很多量化平台都提供 walk-forward 分析,其实就是把数据切成多段,依次滚动验证。这样做的好处是,你可以看到策略在不同时间段都有稳定的表现,而不是某一小段特别亮眼。

4.2 同时看多个指标而不是只盯准确率

准确率是一个单薄的指标,它只看方向对不对,不管对的时候赚多少、错的时候亏多少。真正评估策略,需要同时看多个维度。

我常用的一组指标包括:

  • 准确率:方向判断的正确比例,作为基础参考
  • 盈亏比:平均盈利和平均亏损的比例,决定单次胜负的实际收益
  • 最大回撤:连续亏损带来的高峰到低谷的跌幅,衡量风险
  • 夏普比率:收益与波动的比值,衡量风险调整后的表现
  • 稳定性:分月或分周的胜率波动情况,判断结果是否均匀分布

只看准确率的话,可能出现一种情况:准确率从 90% 提到 92%,但盈亏比从 1.5 掉到 0.8,最终收益反而下降。另一个策略准确率只有 88%,但盈亏比高,赚钱更多。评估策略时,准确率只是其中一个参考维度,综合指标才更有说服力。

4.3 给提升定一个“显著门槛”

我建议在项目里预设一个显著门槛。不是看两个数字之间的差值,而是看置信区间是否分离,以及差异在业务上是否划算。

我把门槛设成三档:

档位条件结论
明确通过两者的 95% 置信区间不重叠,且提升方向与假设一致可以继续推进
边缘状态置信区间部分重叠,但子群拆解显示关键部分有改善小仓位试运行,观察实盘
明确不通过置信区间大量重叠,或提升仅集中在单一随机种子当作噪声,不切换

这个门槛不复杂,但它迫使你从“看两个点”升级到“看区间和分布的差异”,能过滤掉很大一部分没意义的迭代。

关于配对样本,其实还有一个更精细的工具:McNemar 检验。它只关注新旧策略在相同样本上的预测变化。旧策略错、新策略对的样本数,和旧策略对、新策略错的样本数,如果两者明显不均衡,说明改进不是随机波动。这个检验在少数样本上也能工作,比直接对比准确率更能说明问题。我有几个项目就是靠它才发现,虽然整体准确率只涨了 1.5 个点,但预测变化的分布极度偏向新策略,差异确实存在。

5. 实操:如何对比两个策略,结论才站得住

5.1 一个可复现的对比流程

这个流程是我在多个项目里固化下来的,每一步都有明确目的:

第一步,固定数据。对比必须用同一份验证集,数据划分规则一致,不能一个策略用了新数据、另一个没更新。数据时间范围、预处理方式都要写清楚。

第二步,固定随机种子。很多策略流程里涉及初始化、采样或数据打乱,随机种子不统一,结果差异就有了非策略因素。多数框架支持设置全局随机种子,做法上建议在每次实验开始时固定下来。

第三步,多次运行取分布。不要只跑一次,至少跑 5 到 10 次,记录每次的准确率。这样你会得到一个波动范围,而不是一个孤立数字。如果多次运行的波动本身就有 2 个百分点,那对比中的 2 个百分点就毫无说服力。

第四步,计算配对差异。对每个样本记录新旧策略的预测结果,得到“旧对新错”和“旧错新对”两个数,用 McNemar 检验或简单的二项检验判断差异是否显著。

第五步,拆解子群。按品种、按时段、按波动状态拆开看,找出差异集中在哪。如果差异均匀分布,反而更可疑。

第六步,做样本外确认。所有测试通过后,用从未参与调参的数据再做一次最终验证。这次结果不回头调整参数,作为是否上线的依据。

5.2 判断 90% 与 92% 差异的简易规则

如果你不想每次都跑完整的统计检验,我提供一个简化的经验规则:

  • 样本量低于 1000:两个百分点以内,忽略。
  • 样本量 1000 到 5000:看多次运行的均值,均值差仍大于两个点,才值得考虑。
  • 样本量大于 5000:计算置信区间,区间不重叠再下结论。
  • 无论样本量多少:如果新策略的参数数量明显多于旧策略,默认假设提升是过拟合,除非样本外验证推翻这个假设。

这套规则牺牲了一些统计严谨性,换来了执行力。很多团队缺的不是方法,而是判断节奏。有了这条规则,就不会再因为回测面板跳了 2 个点就冲动重构策略。

顺带提一下“提升比例”这个坑。从 90% 提到 92%,错误率是从 10% 降到 8%,相对降幅 20%,听起来很可观。很多人会拿这个数字说事,但从统计角度看,这个相对提升依然改变不了置信区间大量重叠的事实。以后看到“相对提升 20%”这样的说法,一定要回到绝对差异和区间上看。

5.3 我踩过的坑和现在的检查习惯

讲一个真实的例子。早年间我做过一个信号叠加,回测显示准确率从 89% 涨到 91.5%,当时很兴奋,觉得终于找到规律了。结果上线跑了三周,实盘准确率只有 88%,比旧策略还低。

复盘原因,出在三个地方:验证集太短,只有 400 多个样本,波动本身就大;两个策略共用了太多相同的历史数据,算不上独立;新参数是在多次尝试后选出来的,本身就带了幸存者偏差。

这个教训让我养成了几个习惯:

第一,每次调参都记录尝试过的所有组合,包括失败的。这样最后复盘时,能知道“最优结果”是从多少次尝试里挑出来的,避免被蒙蔽。

第二,实验记录里强制写置信区间或波动范围。准确率旁边如果不带区间,我会默认它不可信。

第三,所有结论在切换策略前,必须过一遍样本外数据。无论回测多漂亮,样本外表现不好,一律不切换。

这些习惯听起来繁琐,但真正坚持下来之后,被回测数字欺骗的次数大幅减少。做策略这一行,慢就是快,宁可多花几天验证,也别因为两张漂亮的回测截图冲昏头。

6. 用分布思维代替数字对比

90% 和 92% 的对比,本质上是在用单个点估计做决策,而点估计天生就不可靠。更合理的做法是同时看区间、看分布、看配对差异、看多个指标。机器人策略的评估,核心不是找那个“更高”的数字,而是判断差异是否稳定、能否复现、值不值得付出成本。

我现在的习惯是,每次拿到一个新回测结果,先不看准确率本身,先看样本量、再看多次运行的波动、再看配对检验结果。如果这些关卡都过了,再看那个数字也不迟。数据量和波动范围不一样的情况下,结论的可靠性完全不同。

如果你手上正有一个 90% 到 92% 的提升,先别急着宣布胜利,把验证集拉到足够长,多跑几个随机种子,算一算置信区间。结果出来之后你会发现,大部分时候这两个百分点就是一个普通的统计噪声。真正值得推进的策略改进,从来不需要靠两个百分点来证明自己。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询