样本内 与 样本外

样本内(in-sample)数据是用来选定策略规则和参数的那段历史;样本外(out-of-sample)数据是之后的一段时期,它完全没有参与选择,只用来评估已经冻结的结果。这个区分之所以重要,是因为在「挑选了参数的那批数据」上衡量出来的表现,会高估同一组参数在它没见过的数据上的成绩。

Senzoukria · 术语表 · 更新于 2026 年 9 月


两段时期,两项分工

切分必须在检视参数之前就定下来。如果边界是在看到结果之后挪动的,或者测试期被用来在两个决赛选手之间做取舍,那么无论它挂着什么标签,它都已经变成了样本内数据。

每段时期被允许做什么
时期用于绝不能用于
样本内(训练)挑选规则、阈值、参数把表现当成可实现的成绩来报告
样本外(测试)对冻结后的配置做一次评估在看到结果之后再调任何东西
最终留出集对已经做完的决策做最后一次评估任何进一步的挑选

两条曲线为什么会分叉

任何优化器在拟合训练数据时,既会拟合其中可重复的结构,也会拟合其中的偶然形态。偶然的那部分不会重现,所以样本外结果里只剩下结构性的那部分。样本内稳步上扬、样本外随即走平或下滑,这是一条主要拟合了噪声的规则最常见的签名。即便规则本身靠谱,也会有一定程度的分叉;真正要看的是样本内成绩活下来了多少,以及活下来的这部分够不够覆盖成本。

获取样本外证据的几种方式

  • 一次按时间的切分:在较早的一段上训练,在较晚的一段上测试一次。
  • 前推分析:沿着历史反复切分,每个测试窗口前面都有属于它自己的训练窗口。
  • 把同一条规则换到另一个品种或另一个交易时段上,前提是规则的逻辑并不针对特定品种。
  • 在完成历史工作之后,到模拟账户上做前向测试;这会加入实时行情的真实行为,但仍然给不出成交的确定性。

在 Senzoukria 里

在自动回测面板里跑完一次前推分析后,报告会给出一张名为「样本内 对 样本外」的图:优化器看到的那条曲线以虚线画出,和你实际会拿到的那条并排比较,两者各按自己的交易笔数展开。面板的提示写明了读法:样本内一路直上、样本外一片平坦,这就是过拟合的样子——在任何数字说出口之前。

报告里的每一片都标注了训练期和真实测试期,于是两段时期之间的边界是看得见的,而不是靠暗示。「闯关」一节还会给出一个在样本外交易上计算的紧缩夏普比率,以及试过的配置数量。这些报告总结的是它们在给定数据上执行的那套流程;一个漂亮的标签不是对未来结果的担保。

常见错误

  • 在设计规则的过程中一直盯着测试期看,然后宣称它是样本外。
  • 结果不理想就在留出集上重新优化,于是它悄悄变成了训练数据。
  • 测试期选得太短,几笔交易就决定了结论。
  • 在摘要里报告样本内曲线,只在附录里提一句样本外曲线。

其他语言版本

常见问题

样本外应该留多少数据?
没有通用比例。测试期需要足够多的交易,结果才有意义;训练期也需要足够多的数据,才能在不追逐个别事件的前提下拟合规则。请根据规则的交易频率,在跑任何东西之前就定好切分,写下来,并且在看到结果之后不再挪动它。
样本外时期可以重复使用吗?
可以,代价是它不再是样本外。凡是在看过某段时期的结果之后做出的决定,都会让那段时期成为选择过程的一部分。请为最后一次评估保留一段完全未被触碰的时期,并接受这个事实:一旦它被用来决定了什么,下一个决定就需要一段新的时期。
漂亮的样本外结果能证明存在优势吗?
它比样本内结果是更好的证据,但不是证明。样本外时期仍然只是历史的一次抽样,在一套成交模型和一组成本之下。要掂量它的分量,还需要看它对更高成本的敏感性、在邻近参数上的稳定性,以及一份「一共试过多少条规则」的记录。

继续阅读