新浪财经

机器学习基金失败的十大原因及应对策略

新浪财经

关注

来源:量化先行者

机器学习基金失败的十大原因及应对策略

文献来源:De Prado, Marcos Lopez. "The 10 Reasons Most Machine Learning Funds Fail." The Journal of Portfolio Management 44.6 (2018): 120-133.

推荐原因:量化基金的失败率比较高,尤其是基于机器学习进行量化投资的基金。本文从经验的角度探讨了大部分机器学习基金失败的十大原因并给出了解决方案。

1

团队分工

问题:独立工作的投资经理通常依据自己对信息的判断来进行股票交易,他们通常基于某些故事来合理化自身的判断。因为没有人能够完全理解自己的交易逻辑,所以他们几乎不能像一个团队一样工作。如果让 50 个投资经理一起工作,那么他们之间最终会因为相互影响直到等价于只有一个投资经理。因此需要投资经理间尽可能降低交流,独立工作。

然而,当把这一套方法应用在量化或者机器学习方面的工作时,会产生意想不到的后果。例如,如果我们招聘了50个博士并要求他们6个月内各自产生一个投资策略,那么他们会疯狂搜索各自投资策略并最终选择两种策略,一是一个过拟合后看起来不错的策略,二是一个标准的因子投资策略,一个有学术支撑但是由于过度拥挤导致夏普率比较低的策略。两种结果都不是希望看到的,即使其中有5个人真的能发现较好的投资策略,这个项目的收益可能也覆盖不了50人的成本,那么这5个人就会需求其他的工作机会。

解决方案:元策略模式

机器学习类投资策略开发的复杂度非常高,包括数据收集、数据清洗、高性能基础架构的建设、软件开发、特征分析、模拟回测等等。这些工作对于一个单一人员来说工作量非常高,且每一步骤都要自己开发,工作量极其巨大,疲于奔命。

因此,投资公司应该是分工合作,每一个步骤都独立监控来保持质量。每一个研究人员都专注于一个特定的步骤,成为这方面的专家,并保持对整个流程的全局视角。每一个成功的量化投资公司都会用到这个模式。

2

基于回测来研究

问题:我们经常拿到一些数据,利用一些机器学习的算法来做回测,不断重复这个过程直到获得一个看似很好的回测结果。无论这种做法是否进行了滚动样本外的分析,这都是一种非常常见的错误做法。事实上我们不断在同一个数据集上重复这个过程,很可能导致虚假的发现。在标准偏误5%的情况下,只要重复20次就有可能发现一个看起来不错实际没用的投资策略。

解决方案:特征重要性分析

假设现在有一组数据X和y,X是特征集,y是标签。我们可以学习一个分类器并通过交叉验证来获得其预测效果。如果我们能得到一个较好的分类效果,那么一个自然的问题就是试图理解到底是哪些特征起到了决定性的作用。也许我们可以添加一些特征来增强预测能力,或者减少一些实际是噪声的特征。并且这一步打开了分类器的黑箱,我们可以更清楚地了解到分类器的决策逻辑。一旦我们发现某些特征非常重要,那么我们可以进一步分析这些特征是否一直重要,还是只是某些特殊环境下重要,特征重要性的变化由什么因素触发,这些重要性的切换能够被预测,这些特征时候和其他指标有关联,等等。这种研究的方式是一种更好的研究手段,而不是一遍遍地尝试回测不同算法寻找“好”的结果。特征重要性是一种研究工具,而回测并不是。

3

时序样本采样

问题:为了将机器学习算法应用到金融时序上,我们通常都要将时序数据拼接整理成一张“大表”的形式,每一行表示一个k线上的数据。我们认为这种方式应该尽量避免。第一个原因是市场对于信息的处理并不是一个恒定的速度,通常开盘后一小时内的交易活跃度远大于下午一小时。作为一个人,他处理信息会存在时间上的不均衡性,而电脑不会。因此很有可能会对于低活跃时间的样本过采样,而对高活跃时间段的样本低采样。第二个原因是时序样本通常由于时序自相关、异方差、非正态等因素造成其统计特征较差。

解决方案:成交量时钟

我们可以以市场成交活跃度来构造时序样本数据。例如,以一段固定成交额为单位来构造k线。如果我们分析一只一段时间内上涨100%的股票,在上涨后卖出1000元的股票,需要交易掉在上涨前花1000元买股票的份额的一半。这样,交易份额就是对于实际发生交换的股票价值的函数。因此,相比于用tick或成交量来构造k线,用成交额为单位来构造k线更加合理。如果用tick或成交量来构造k线,那么全年中不同日期的k线数量可能相差非常大,而如果以成交额来构造,那么其数量或方差会更平稳。

用成交额为单位来构造k线的另一个好处是流通股通常会由于增发、解禁等原因变化,而市值不会,所以时序上构造的基本单位不会改变。

4

整数阶差分

问题:金融时间序列通常是不平稳序列,为了对其进行分析,我们通常都需要对其进行加工,例如一阶差分,将其转换为平稳序列。这种转换会丧失原始序列的记忆性,而通常我们并不希望完全抹除其记忆性,因为记忆性是预测模型的基础。

监督式学习通常要求数据特征是平稳的。平稳性对于机器学习算法是一个必要但不充分的条件。平稳性和记忆性之间是一个权衡,我们总是可以通过多次差分来消除不平稳性,但是其代价就是损失记忆性,进而会降低其预测能力。

解决方案:分数阶差分

几乎所有的研究都基于整数阶差分来将非平稳序列转为平稳序列,例如常见的一阶差分,但是一阶差分并不是最优方案。分数阶差分能够帮助我们将差分作用到一个非整数的间隔d上。一个在标普500上进行分数阶差分的实验可以看到,如果以原始对数价格来进行单位根检验,我们无法拒绝原始假设,而如果以0.4为单位差分,我们就可以拒绝原始假设并且转换后的序列和原始序列的相关性超过0.995,说明其保留了尽可能多的记忆性,而以一阶差分来计算,我们能拒绝原始假设,但是转换后序列和原始序列相关性只有0.05。也就是说一阶差分抹除了其必要的更多的记忆性。

5

固定时间标签

问题:在金融领域中,通常都是以一个固定的时间长度来打标签。例如对未来5天的收益进行标记,5天收益超过一定的值标记为1,低于一定的值标-1。这里面有几个问题,一个就是像前文所述,时间为单位的k线上统计特征较差,并且固定时间长度没有考虑到波动率,不同波动率下的收益相差较大,很有可能由于波动率低导致大部分样本都没有达到标记的阈值。

解决方案:三界线标注法

一种更好的标记方法是遵循离场触发条件。首先,我们设置两条水平线,止盈线和止损线,是估计波动率的动态函数。还有一条是竖线,定义为建仓后的k线数量。如果先触发了止盈线,则标记为1,如果先触发止损线则标记为-1,如果触发竖线,则有两种选择,一是收益率的方向,或者就直接标记为0。很容易发现这种方法是路径依赖的。为了标记样本,我们需要考虑整个路径的过程。

6

同时学习买卖方向和交易头寸

问题:机器学习的一个通常错误是建议一个异常复杂的模型,必须同时学习买卖的方向和头寸。交易方向是一个交易的基础决策,而交易头寸是属于风险管理决策。交易头寸和风险预算、总规模、交易方向的信心高度相关。同时在一个模型中决定两个维度的决策是没有必要的。实践中一种更好的方式是建立两套模型,一套预测方向,另一套预测仓位。

另一个将两个维度拆分的原因是机器学习算法通常都有更高的准确性、较低的召回率。这种方式有个问题就是太保守而会错失很多机会。我们应该更多地关注模型的F1 score,来兼顾准确性和召回率。我们可以通过分别构建两个模型,用第二个模型来进行元标记。

解决方案:元标记

当更关注F1 score时,元标记是一种非常有效的方法。首先我们构建第一个方向预测的模型来获得更高的召回率,然后我们根据第一个模型的输出将一些准确性较低标记进行修正。这种做法的目标就是靠第一个模型来获取召回率,靠第二个模型提高准确性。

元标记方法有四大好处。第一,机器学习算法通常都是黑箱,而元标记允许我们将机器学习系统构建在一个白盒模型之上,例如建立在经济学理论的基本面模型之上。第二,过拟合问题可以得到一定程度的控制,因为机器学习模型只决定仓位,不决定方向。第三,将方向和仓位分解的方法可以利于构造更精细的策略结构。例如,专门开发一个机器学习模型来基于一个方向预测模型输出的买入信号控制多头仓位,开发另一个机器学习模型来基于另一套方向预测模型输出的卖出信号控制空头仓位。第四,在小仓位上获取高准确性而在大仓位上获得低准确性是一种灾难。和方向预测同等重要的是给出适合的仓位,因此专门为仓位控制开发一套模型是合理且必要的。

7

非独立同分布样本的权重

问题:大部分非金融领域的机器学习算法都可以假设样本满足独立同分布假设。而金融领域中,标签是由输出决定,输出由多个样本决定,并且标签的时间区域通常有重叠,这些都会导致我们无法确定哪些特征会起作用。

解决方案:独特性权重和时序bootstrapping

采用独特性权重能够帮助我们标记每次观察能够获得的收益强弱,收益越强其独特性越高,那么其权重越大。相比于在全样本中等权式抽样,我们在抽样时加大那些具有高度独特性样本的权重,这样能够使得我们获得一些更具代表性的样本。

8

交叉验证泄露

问题:金融时序数据上进行k折交叉验证失败的一个原因是每一次观察不满足独立同分布假设。当训练集包含的信息在测试集中也存在时,泄露就发生了。如果用上一个观察样本训练的模型来预测下一个观察样本,由于时序上的自相关,即使输入特征和结果不相关,其仍然可能有预测能力。

解决方案:数据清洗和数据封存

一种数据清洗的做法是从训练集中将和测试集的标签有时序重叠的样本剔除。由于金融数据存在时序自相关,因此在训练集中需要将测试集的样本的直接后续样本也一并剔除,来消除时序自相关带来的问题。这一步称为数据封存,即将测试集可能产生影响的样本暂时封存。

9

滚动回测

问题:滚动回测是一种非常常见的回测方式,每一次策略决策都基于之前的观察样本,其有两大优点:一是历史解释性较好,其收益可以实际拿到,二是其能保证测试集是样本外。

但是滚动回测有三大问题。第一,只有一个历史路径,很容易过拟合。第二,其并不能代表未来的表现,可能由于特定的数据集序列导致偏差。第三,滚动回测的起始训练的决策只由头部的少部分样本决定。

解决方案:数据清洗+交叉验证

我们可以通过同时生成上千个训练集测试集的划分来帮助我们进行更多的训练,只需要在样本切分时进行必要的数据清洗即可。这样我们就可以得到一个策略夏普比例的分布,而不是仅仅只有一条路径下的夏普率。

10

回测过拟合

问题:滚动回测可能由于一些样本少会随机得到一些夏普率较高的结果,由于是在起始训练时。在多次重复尝试后,很容易会找到一个夏普率较高的策略而发生过拟合的情况。

解决方案:收缩夏普率

收缩夏普率能够在多次尝试后对所有样本的真实夏普率阈值进行修正,将一些具有较高夏普率的伪真策略排除。

海外文献推荐:因子选股类

加载中...