过度拟合什么意思?过拟合怎么判断?过度拟合最初是统计学数据挖掘领域中的概念,如今在机器学习、量化策略领域里有着重要地位。
首先,什么是“拟合”?拟合指在训练集上训练模型,使模型的预测结果和已知数据相符。通俗地讲,拟合就是指定一个量化策略模型。
当一个量化策略模型在确定了基本投资框架和交易规则后,还需要将策略中的参数进行细调和优化,进一步提高收益并降低波动率,在这个细调优化的过程中,就容易发生“过度拟合”。
参数调优是优化的主要方法之一,其中包括调整参数值和增减参数数量。比如将原参数“亏损15%止损”调整为“亏损10%止损”,增加参数“上穿25日均线买入”等,如果在参数设置调整后,该策略模型的回溯测试表现更好,那么就会保留这个新的参数设置。
然而,当这个根据样本数据进行参数调优后的策略模型,在对样本外的数据进行测试时效果并不佳,这就是过度拟合。专业概念上讲,过度拟合就是指在调试一个复杂策略模型时,使用或调整了过多参数,导致根据回测样本训练出来的模型对样本外的数据预测效果很差。简单而言,策略模型在拟合后,回溯测试表现很好,但到了实盘执行就不灵了。
我们将产生过度拟合的原因一般总结为:训练样本数据不够、模型过度训练(使用过多的参数,导致策略模型在训练集外数据的预测效果并不好)。
策略模型过度拟合的一些征兆表现为:
1. 使用奇怪的筛选阀值。比如市盈率在2.05到12.61之间等;
2. 参数过于复杂,参数的数量级接近甚至超过样本的数量级;
3. 不能解决广泛的问题,只在特定范围内有效。
所以相对的,避免过度拟合的方法包括:
1. 增加数据集;我们要采取大量的历史数据来测试,如果测试数据过少,即使我们的策略在样本内的表现非常好,那么也不具备说服力;
2. 使用一些方法比如Early Stopping、正则化、Dropout来避免模型过度训练。
问任何一个有经验的交易系统开发者有关回测(Backtest)的优劣问题,你很可能得到一个“然并卵”的答案。一方面,他们会告诉你,回测是必须要做的,因为它能告诉你一个策略想法在历史交易中是否能被印证有效。
但是另一方面,他们又会补充说,很多时候回测并不能告诉你未来的盈利可能性,因为你在回测的时候拟合了收益率曲线甚至过度拟合。因此,交易系统回测是个天使与魔鬼的组合。
(“交易员说”注:过度拟合(Overfitting)或曲线拟合:系统可能太过复杂,以至于失去了预测价值。由于它与历史数据的吻合度太高,市场行为的一个轻微变化就会造成效果的明显恶化。)
那些交易新手们往往无法看到交易系统回测的两面性,常过于迷信历史收益表现,并期望在真实交易中也能够实现如此漂亮的收益率曲线。他们期望历史表现会在未来继续,而事实证明,不少策略在随后的真实交易中并不能达到交易者的预期。
传统的交易系统回测最大的问题在哪里?在找到症结前,我们必须定义到底什么是“交易系统回测”,有没有可替代的方式存在。如下图所示是各种回测方式,假设回测终止于2014年12月31日。
红色方块表示跑过回测数据的年份;绿色方块表示样本外测试阶段,或没有进行参数优化的数据做的测试;蓝色方块表示实盘账户,真实交易。
首先,第一个是传统的交易系统回测,目前为止最为流行的测试方法,也是最为危险的方法。绝大多数交易软件鼓励这种测试方法。简单地找到一个图表,插入一个策略,并使用所有可用历史数据来优化所有参数。这个方式对绝大多数交易者来说具有很大的交易风险。
很多被传统交易回测带来的不佳体验的交易者开始寻求变化:增加样本外(Out of Sample)回测评估期。作为全历史数据测试的替代品,交易者会先测试50%-80%数据,其他历史数据暂时搁置一旁。优化过的交易系统在这个样本外期间的表现将被评估。相比传统的回测,这个方法要好很多,尽管很多人反复测试,实际上已经将样本外阶段转变为样本内,因为交易系统的创建者对数据和倾向性的熟悉感已经蔓延至整个开发过程。
样本外回测的下一个阶段是推进分析测试(Walk-forwad testing)。在这个方式下,一个长期的样本外测试期被建立,这个方式受到很多职业交易员的喜爱,尽管这个方法依然会在反复的测试中被“污染”。
最后一个方法就是直接在没有历史回测的情况下开始实际交易测试。这是个最为可信的方式,因为测试基于真实时间、实盘账户。
但这个方法需要极长的时间来评估策略是否有利可图,更不必说这个方法的高成本。那些用这个方法成功的交易者很可能本身就具有良好的交易策略和对市场动能极深的理解,使他们对交易系统在真实环境中是否合格有个很强的预判。在实盘环境里没有模棱两可的结果,甚至不是所有类型的回测都一定适用。
如上所述,相比传统的回测方法,其他三种替代方案都相当复杂和困难,这也是为什么大多数人,特别是那些菜鸟只是用最简单的方式。而因为传统回测的危险性,人们开始认为改善回测是测试的目标,一个更好的回测成为交易者的渴望。让我们来举个例子,你就知道这是个“然并卵”的事情。
过度回测的例子
我们就把这个菜鸟叫为“小明”吧。小明希望针对黄金交易建立一个策略,使用2008-2012年这五年的数据来做回测。然后他取出了现货黄金的这五年日图K线数据,并基于从书上和网站上学到的移动平均线交叉理论,建了一个简单的交易系统,代码如下:
input: mavg (2)
If Close crosses above average (close,mavg) then buy next bar at market;
(若收盘价高于均线,则在下一个烛台做多)
If Close crosses below average (close,mavg) then sell short next bar at market.
(若收盘价低于均线,则在下一个烛台做空)
显然,小明对交易系统的变量“mavg”,即移动平均线的周期做了不断的优化,在进行了49次的迭代后,他获得了正的利润曲线,如下图的交易系统A。显然这个策略还不够好,小明开始对回测进行改进。
对于改进后的交易系统B,小明认为多头市场和空头市场是不一样的,因此多头交易和空头交易的移动平均线周期也应该不同。当他增加了这个优化参数后,迭代次数升至1681次,绩效表现也显著提升。
现在小明对自己的系统表示满意,但他希望获得更好的绩效表现,因此在系统C上,他增加了另一条移动平均线,同时也做了优化。现在他有8405次迭代优化,不意外的,收益率曲线更加漂亮了。
在这个节点上,小明已经将一个很难获利的移动平均线策略转变为了一个从历史上看很棒的策略。但是他真的建立了一个更好的交易系统了么?显然他获得了一个更令人印象深刻的历史回测,但在真实交易中呢?
用这种方式开发策略注定悲剧,增加规则以提升回测效果并不意味着在真实环境中有效,事实上,很多时候,改善了的回测令真实交易表现更糟糕。
样本外测试的现实
为了证实这一点,我们把小明的策略放到真实环境中测试一下,因为小明只做了2008-2012年的回测,正好可以将策略放在2013-2015年的周期内跑一下(见下图)。如图所示,表现更好的回测带来的是更糟糕的真实表现。
不幸的是,这是个常见的结果。许多交易者做了他们认为对的事情,但结果不佳。当然,并不是完全如此,有些时候加入规则令策略在回测和实盘环境中都得到了改善。
以下是克服这种改善回测倾向的小建议:
· 设定合理的绩效预期。不要尝试去建立一个看上去完美的收益率曲线。现实的策略不时会有深幅回撤和很多收益率走平的周期。如果你的回测结果太过于优秀,那策略本身可能并不可靠。
· 不要不断地增加规则和迭代,只为了改善回测表现。记住,过去的表现不代表未来的结果。
· 考虑尝试不同的测试方式。样本外测试、推进分析测试和实盘交易测试都好于传统回测。试试看这些方式,或许更适合你的策略。
许多交易者觉得历史回测是必不可少的,这给了他们分析不同策略和找到问题的方式。尽管这并不意味着良好的表现会持续,但过去历史表现的优越令人安心。
问题是,交易者费尽心思建立了一个更好的过去,却在实盘交易中得到了更差的表现。因此,你在建立策略时应该更加小心,不要一味追求更好的回测,最终给自己带来一个过于拟合的交易系统。