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