在这片文章中,我们介绍用深度学习来构建量化投资策略的基本步骤以及一些建议。并从控制论和信息论的角度来科学的分析这些步骤。这篇文章一共有四个部分:
深度学习(deep learning, DL),也就是神经网络(neural network, NN)作为机器学习(machine learning, ML)中最火爆的分支,其典型作用是做分类(classification)。深度学习在量化投资(quantitative trading)中的主要应用——预测股票或者期货下一天的涨跌情况,其实就是一个分类问题:
要用深度学习来预测股票或者期货下一天的涨跌,也就是要训练一个分类器。要训练一个分类器 ,我们第一件要做的事情一定是,确定一个唯一的评价指标(metric),用这个评价指标来判断你的分类器效果是好还是坏。这个评价指标一般可以选:
这里的重点是,确定‘唯一’的评价指标。只有这样子,我们才能明确、清楚的判断,二个模型中哪一个模型更好,我们最终要选用哪一个模型。比如用精确率评价模型好坏,得到的结果,和用召回率评价模型好坏,得到的结果往往会不一样。正确的做法是只选择精确率,或者只选择召回率作为评价指标。如果非要同时考虑精确率和召回率,那或许我们可以选择F1-得分作为评价指标。因为F1-得分综合了精确率和召回率的信息。
如果是要同时考虑精确率和召回率,可以选择F1-得分。但是对于其他有矛盾目标的项目,比如我们同时希望:
这时候最好的办法是做一个条件优化(constrained optimization)问题:在多个想要最优化的指标(在这个例子里是‘分类准确率’和‘计算一个样本分类结果所需时间’)中,只选择一个指标(比如你选择‘分类准确率’)作为最重要的优化指标,其他指标(在这个例子里是‘计算一个样本分类结果所需时间’)只要满足一个足够好的条件(比如,计算一个样本分类结果所需时间不超过50毫秒)就可以了。
举个例子,如果我们做的是螺纹钢(RB)期货的高频交易,那么交易所(上海期货交易所)发送相邻二笔行情数据的时间间隔的时间是500毫秒(就是二分之一秒)。我们需要模型:
对于这二个矛盾的目标, 我们就可以做一个条件优化。对于这个预测螺纹钢期货在下一个tick涨跌(也就是在500毫秒后的涨跌)的分类器,我们首先把计算时间限制在50毫秒(相邻二笔行情数据的时间间隔是500毫秒,这里取500毫秒的1/10)之内,在这个前提下,致力于最大化预测准确率。
确定好唯一的评价指标之后,我们要做的第二件事就是,把手头的数据分成训练集(train set),验证集(cross-validation set, CV set)和测试集(test set)。然后尽快用训练集数据训练出一个简单的深度学习分类器,接着计算出这个分类器:
在最终用测试集来测试分类器的表现之前,我们的努力目标是最小化验证误差。验证误差可以分解成二部分:
验证误差 = 可避免偏置 + 方差
假设贝叶斯最优误差(bayesian optimal error,分类器理论上可以达到的最小误差)是0%。这样我们就可以估计出:
比如我们做的分类器,训练误差 = 7.5%,验证误差 = 9%。那么我们的分类器的:
可避免偏置明显大于方差(欠拟合,under-fit),因此想办法减少可避免偏置,效果会比想办法减少方差更好。因此我们下一步工作就是想办法减少可避免偏置。减少可避免偏置,有这几个常用办法:
反过来,如果可避免偏置明显小于方差(过拟合,over-fit),那么想办法减少方差,效果会比想办法减少可避免偏置更好。因此我们下一步工作就是想办法减少方差。减少方差,有这几个常用办法:
如果我们的分类器的作用是预测螺纹钢期货价格明天是涨还是跌,并且你的分类器的验证误差是8%。你想优化你的分类器,减少验证误差。这时候你可以依次按照下面4个步骤,做一个误差分析:
比如我们发现,分类器在震荡市中最容易出错,那么我们可以加入更多的震荡市的数据,用来训练模型,或者直接在模型中加入一些符合震荡市的交易逻辑。
那我们怎么把螺纹钢期货行情数据划分成牛市、熊市、震荡市这三种情景?一个常用的办法是通过均线(moving average,移动平均线)。计算螺纹钢期货价格的8条均线(3天,5天,8天,13天,21天,34天,55天,89天均线:这是一个斐波那契数列,Fibonacci sequence)。然后根据螺纹钢期货当天(close)和这8条均线的相对位置,把螺纹钢期货的行情成3种情况:
如果我们只交易螺纹钢这一个商品期货,那我们可以按照刚刚讲的方法做误差分析。但是如果我们同时交易多个品种,或者多个行业的商品期货,比如我们同时交易钢铁行业,化工行业,基本金属行业这3个行业的商品期货,那么我们在做误差分析的时候,不仅可以按照牛市、熊市、震荡市来划分情景,也可以按照行业划分情景。如果误差分析结果是我们的分类器在钢铁行业最容易出错,那就加入更多钢铁行业的数据,用来训练模型,或者在模型中加入一些更符合钢铁行业的逻辑。
到此为止我们介绍了用深度学习来构建量化投资策略,并且优化这个量化投资策略的基本做法。在每一个做法中,不论是确定唯一的评价指标,还是分析偏置与方差,或者是做误差分析,都体现着控制论和信息论的思想。事物在发展的初期,往往有很多可能性。我们在这些可能性中选择几个作为目标,用一定工具让事物朝着既定目标转化,就是控制过程。 也就是说,控制过程就是通过干预,使得可能性空间缩小的过程。我们来看一种简单的控制过程:带记忆的随机控制。看二个例子:
除了带记忆的随机控制,还有二种控制过程特别常见:
指导我们用深度学习构建量化投资策略这一过程的,是负反馈调节。负反馈调节系统有这3个特点:
控制过程是通过干预,使得可能性空间缩小的过程。而负反馈调节,就是通过干预,使得目标差缩小的过程。
我们在用深度学习构建量化投资策略的过程中,第一步就是确定唯一的评价指标,就是在设定系统目标。然后我们花少则半天,多则三天的时间,尽快做出第一代的分类器,用我们设定的评价指标来判断,这个第一代的分类器表现是不是足够好。这就是在比较目标和结果是不是匹配。大概率的情况是,第一代分类器的表现不够好,也就是说出现了目标差。这时候,我们要分析分类器的偏置和方差,我们要分析分类器在牛市、熊市、震荡市这三个情景下,哪个情景中最容易出错,并且以此改进,升级第一代分类器。
在改进,升级分类器的过程中,为什么要分析分类器的偏置和方差?为什么要分析分类器在牛市、熊市、震荡市这三个情景下,哪个情景中最容易出错?为了回答这个问题,我们要先看一些信息论的内容。信息论是一门用数量化的方式来度量信息,研究信息的学问。信息论跟上面提到的控制论,以及系统论(systemtheory)合称三论。在我的专栏‘联合大脑’中的另一篇文章‘信息论’视角下的‘外向’中,也有提到信息论,控制论,系统论。
信息论创始人香农,提出了信息的量化度量方式之后,紧接着提出了香农第一定律和香农第二定律。香农第一定律有一个推论,叫做霍夫曼编码(Huffman coding)。比如我们要对汉字进行编码,有些汉字用的多,有些汉字用的少。我们让常用汉字的编码短一点,生僻汉字的编码长一点,这样就可以是的汉字的总体编码长度最短。也就是说,我们把更好的资源(更短的编码)分配给更常用的汉字,从而使得汉字的总体编码长度最短。
和汉字编码一样,根据香农第一定律,或者说霍夫曼编码的方式,我们首先着手解决导致更大误差的情况。如果可避免偏置明显大于方差,我们就首先想办法减小可避免偏置。如果在分类器在震荡市中出错的频率最高,我们就首先想办法减少分类器在震荡市中的出错。哪一种情况导致了更大的误差,我们就优先处理哪一种情况。
精益创业,说的也是这种用控制论和信息论来指导的创业模式:
对于做商品期货的朋友,还有一个有趣的建议。相比于A股,商品期货品种少,上市时间晚。我们想要训练一个足够复杂的深度学习模型,用来交易商品期货,经常会发现商品期货的数据量不够大。不用怕,我们有一个神器——迁移学习。A股的数据量足够大,我们先用A股数据,来训练一个深度学习模型,然后再做迁移学习,让模型适用于商品期货交易。
到此为止,我们介绍了在控制论和信息论的指导下,用深度学习构建量化投资策略的科学步骤。首先确定系统目标,也就是对于模型的唯一的评价指标。然后尽快做出第一代分类器,也就是MVP。接着分析偏置和方差,做误差分析,用霍夫曼编码的原则用最高的效率改进分类器。直到模型结果跟预先设定的系统目标相匹配。