必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

各自赋予一定的权重来对近日的股价进行预测必

2019-11-08 16:41 来源:未知

  硕士毕业之前曾经对基于LSTM循环神经网络的股价预测方法进行过小小的研究,趁着最近工作不忙,把其中的一部分内容写下来做以记录。

引自:

农田有效灌溉面积指有固定水源、灌溉工程设施配套、土地平整、在一般年景下能够进行正常灌溉的耕地面积,包括机灌面积、电灌面积、自流灌溉面积和喷灌面积[1]。它是反映农田水利建设和水利化的重要指标,也是我国各地区制定水利发展规划的重要指标之一。对农田有效灌溉面积进行预测可以为了解未来农村水利基础设施的建设状况提供有价值的参考信息,同时也可为相关部门合理制定行业发展规划提供理论支持。

机器学习算法分类

机器学习主要分为三种类型,监督学习(Supervised Learning)、无监督学习(Unsupervised Learning)和强化学习(Reinforcement Learning)。我们对主流分类方法来介绍机器学习在量化投资中的应用,实际上,各种方法的应用模式可以互相交叉。

监督学习的主要目的是使用有类标的训练数据构建模型,我们可以使用经训练得到的模型对未来数据进行预测。术语监督是指训练数据集中的每个样本均有一个已知的输出项。如利用分类对类标进行预测、使用回归预测连续输出值。

在无监督学习中,将处理无类标数据或者总体分布趋势不明朗的数据,通过无监督学习,我们可以在没有已知输出变量和反馈函数指导的情况下提取有效信息来探索数据的整体结构。如通过聚类发现数据的子群,数据压缩中的降维。

强化学习的目标是构建一个系统,在与环境交互的过程中提高系统的性能。环境的当前状态信息中通常包含一个反馈信号,我们可以将强化学习视为与监督学习相关的一个领域,然而,在强化学习中,这个反馈值不是一个确定的类标或者连续类型的值,而是一个通过反馈函数产生的对当前系统行为的评价。通过与环境的交互,系统可以通过强化学习来得到一系列行为,通过探索性的试错或者借助精心设计的激励系统使得正向反馈最大化。一个常用的强化学习例子就是象棋对弈的游戏,在此,系统根据棋盘上的当前局态(环境) 决定落子的位置,而游戏结束时胜负的判定可以作为激励信号。AlphaGo 就是强化学习的成功应用。

一、CNN的引入

在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的。当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢,例如一张黑白的 28×28

的手写数字图片,输入层的神经元就有784个,如下图所示:

必威 1

若在中间只使用一层隐藏层,参数 w

就有 784×15=11760

多个;若输入的是28×28

带有颜色的RGB格式的手写数字图片,输入神经元就有28×28×3=2352

个…… 。这很容易看出使用全连接神经网络处理图像中的需要训练参数过多的问题。

而在卷积神经网络(Convolutional Neural Network,CNN)中,卷积层的神经元只与前一层的部分神经元节点相连,即它的神经元间的连接是非全连接的,且同一层中某些神经元之间的连接的权重 w

和偏移 b

是共享的(即相同的),这样大量地减少了需要训练参数的数量。

卷积神经网络CNN的结构一般包含这几个层:

  • 输入层:用于数据的输入
  • 卷积层:使用卷积核进行特征提取和特征映射
  • 激励层:由于卷积也是一种线性运算,因此需要增加非线性映射
  • 池化层:进行下采样,对特征图稀疏处理,减少数据运算量。
  • 全连接层:通常在CNN的尾部进行重新拟合,减少特征信息的损失
  • 输出层:用于输出结果

当然中间还可以使用一些其他的功能层:

  • 归一化层(Batch Normalization):在CNN中对特征的归一化
  • 切分层:对某些(图片)数据的进行分区域的单独学习
  • 融合层:对独立进行特征学习的分支进行融合

 

 

1 预测方案的确定与预测方法的选择

机器学习在量化投资中的应用

监督学习:对未来事件进行预测

1、 回归——预测连续型目标变量

(1) OLS 回归

OLS 回归的目标是:求误差的最小平方和。对于线性回归模型,最小二乘有解析解,即:

必威 2

非线性最小二乘没有解析解,通常用迭代法求解。

最小化代价函数的迭代法有:梯度下降法,可以用于线性和非线性模型;高斯-牛顿法,用于非线性模型; Levenberg-Marquardt 法,结合了梯度下降和高斯-牛顿法,用于求解非线性模型。

(2)正则化方法——岭回归、LASSO回归、弹性网络

正则化是通过在模型中加入额外信息来解决过拟合的一种方法。加入的信息称为惩罚项,惩罚项增加了模型的复杂度,但降低了模型参数的影响。

常用的正则化线性回归方法有:基于 L2 罚项的岭回归、基于 L1 罚项的 LASSO 回归, 以及结合了 L1 与 L2 的弹性网络。

岭回归:在最小二乘的代价函数中加入权重的平方和。其中增加超参λ的值可以增加正则化的强度,同时降低了权重对模型的影响。

必威 3

LASSO 回归:在最小二乘的代价函数中加入权重绝对值的和。

必威 4

弹性网络:包含 L1 罚项和 L2 罚项。

必威 5

(3)评价回归模型性能的方法

残差图:对于一个好的回归模型,期望误差随机分布,残差也随机分布于中心线附近。

均方误差(MSE):最小化误差平方和(SSE)的均值,可用于不同回归模型的比较,
参数调优和交叉验证。

必威 6

决定系数( R2 ):MSE 的标准化版本,预测值的方差。

必威 7

(4)实例:OLS、LASSO、岭回归拟合月收益率

以沪深 300 成分股为基础,选择 PE、PB、ROE、LFLO、20 日资金流量、应付账款周转率、净利润增长率、当前价格处于过去 1 年股价中的位置这 8 个因子构造模型,使用20110801-20130531 的月数据用来训练,20130601-20171001 进行回测,按月调仓;

首先对数据进行去极值、中性化、标准化、归一化处理,再分别采用三种不同的模型在训练集上获取回归系数,根据调仓日前一天的因子与回归系数的乘积作为分数,取排名前 20 的股票,按分数在合计分数中的比例计算买入权重;

分别应用 OLS、LASSO回归、岭回归的回测结果净值如下:

必威 8

OLS回归

必威 9

LASSO回归

必威 10

岭回归

2、 分类——预测分组或标签

(1) logistic回归

Logit回归(logistic regression)是一个分类模型。它通过一个Logistic 函数将输入映射到[0,1]区间,logistic 函数又称sigmoid函数,形式如下:

必威 11

其中,输入 Z:

必威 12

Logit回归模型可以看做由两部分组成,一部分和线性回归一样,另一部分是sigmoid 函数。直观形式如下图:

必威 13

Logistic回归

逻辑斯蒂模型的求解:归结为以似然函数为目标函数的优化问题,用迭代法求解。

逻辑斯蒂回归并不是硬性地将分类结果定为 0 或 1,而是给出了 0 和 1 之间的概率。这相当于对分类结果给出了一个打分。例如我们想选出沪深 300 成分股中上涨概率最大的前 30 只股票,我们可以用逻辑斯蒂回归的结果对每只股票算出一个打分,分数越接近于1 上涨概率越大,只要选出打分排名前 30 的就可以了。另外也可以规定一个阈值,大于阈值的归为一类,小于阈值的归为另一类。

(2) SVM

SVM(support vector machine)俗称支持向量机,是一种监督学习算法,可用于分类和回归。它在解决小样本、非线性及高维模式识别中表现出许多特有的优势。

支持向量机分类的原理如下:

假设有两个类别:实心圆和空心圆,我们的数据有两个特征:x 和 y,需要得到一个分类器,给定一对(x, y),输出实心圆和空心圆。我们将已标记的训练数据展示在下图:

必威 14

SVM分类

假设我们要把实心圈和空心圈分成两类。支持向量机会接受这些数据点,并输出一个超平面(在二维图中是一条直线)将两类分割开来。两类中,分别有距离分界线最近的点, 被称为支持向量(图中加粗的圆点)。而我们要寻找的最优的分界线要满足:支持向量到最优分界线的距离最大。

用数学表达式表述:

定义直线

必威 15

任意点 x 到该直线的距离为

必威 16

N 个训练点的信息记为

必威 17

分类器满足

必威 18

以上分类原理可拓展至高维平面。

我们已经了解到了 SVM 处理线性可分的情况,对于非线性的情况,SVM 的处理方法是选择一个核函数,通过将数据映射到高维空间,最终在高维特征空间中构造出最优分离超平面,来解决在原始空间中线性不可分的问题。

(3)决策树、随机森林

决策树

决策树最吸引人的地方在于其模型的可解释性。正如其名称“决策树”所意味的那样,我们可以从树根开始,根据节点的不同变量值划分建立树的分枝,自顶向下重复建下层和分枝,直到完成建立整棵决策树。

在每一个节点,选择可获得最大信息增益(information gain,IG)的特征来对数据进行划分。通过迭代重复此划分过程,直到叶子节点。在实际应用中,这可能会导致生成一棵深度很大、拥有众多节点的树,即发生过拟合,为此,一般通过“剪枝”限定树的最大深度。

最大信息增益即每次划分时优化的目标函数,为了实现每次划分对信息增益的最大化。

信息增益:

必威 19

其中,f 为将要进行划分的特征, Dp 和 Dj 分别是父节点和第 j 个子节点,I 为信息含量, Np 和 Nj 分别为父节点和子节点中的样本数量。所以信息增益即父节点信息与子节点信息之差。

信息 I 一般有三个度量标准:基尼系数( IG )、熵( IH )、误分类率( IE )。

最常用的是熵,其定义为:

必威 20

其中, p( i | t) 为节点 t 中,属于类别 c 的样本占节点 t 中总样本数的比例。

随机森林

随机森林可以看作多棵决策树的集成,通过多数投票的方式对每棵决策树的结果汇总。随机森林具有更好的鲁棒性,因此一般不需要剪枝。

(4)K-近邻算法

K-近邻算法(K-nearest neighbor,KNN)是惰性学习算法的典型例子,惰性学习在学习阶段的计算成本为 0。

KNN算法非常简单,首先,选择近邻的数量 k 和距离度量方法;然后找到待分类样本的 k 个最近邻居;最后,根据最近邻的类标进行多数投票。

必威 21

KNN算法

(5)神经网络、深度学习

神经网络

人工神经网络是模仿大脑神经元之间信息传递的模型,可以以任意精度逼近任意函数, 能够处理各种复杂的非线性关系,多用于处理分类问题。

下图描述了一个简单的神经元:

必威 22

单个神经元

这个神经元是一个以 x1, x2, x3及截距+1为输入值的运算单元,其输出为:

必威 23

函数 f 被称为激活函数。常用的激活函数有 sigmoid 函数

必威 24

和双曲正切函数

必威 25

神经网络是将多个单一神经元联结在一起,一个神经元的输出可以成为另一个神经元的输入。

必威 26

神经网络模型

神经网络由最左边输入层、最右的输出层(本例中,输出层只有一个节点)和中间隐藏层构成。上图的神经网络例子中有 3 个输入单元(偏置单元不计在内),3 个隐藏单元及一个输出单元。

深度学习

当前多数分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,具有强大的从少数样本集中学习数据集本质特征的能力。

深度学习的实质是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。

深度神经网络的训练机制与传统神经网络不同。传统神经网络采用反向传播的训练机制,即通过残差的反向传播调整权重。深度神经网络层数较多,残差传播到最前面的层已经变得太小,会出现梯度扩散的问题。

深度神经网络采用的训练机制为逐层初始化。

简单的说,分为两步,一是每次训练一层网络,二是调优。深度学习训练过程具体如下:

1)使用自下上升非监督学习(从底层逐层向顶层训练):

采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个特征学习过程,是和传统神经网络区别最大的部分。逐层学习每一层的参数,每一步可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层。使得得到的模型能够学习到数据本身的结构,得到比输入更具有表示能力的特征;

2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):

基于第一步得到的各层参数进一步微调整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于深度学习的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以深度学习效果好很大程度上归功于第一步的特征学习过程。

(6)实例:决策树对沪深 300 走势分类

模型构建:

模型的输入因子,我们选取了三个大类,分别是市场前期走势、宏观经济指标和利率因素。

市场走势中选取沪深 300 指数上一个月收益率、上一个月区间波动率作为因子,以期反映市场在波动、动量等维度的信息;在宏观经济指标中,我们选取了 GDP(国民经济生产总值,当季同比)、CPI(消费者物价指数)、PMI(采购经理人指数)、Capital Investment
(固定资产投资完成额,当月同比)等与 A 股市场关系密切的变量作为因子;类似地,在利率因素中则选取了 YTM1Y(1 年期国债到期收益率,当月同比)、M2(广义货币,当月同比)。宏观经济指标和利率因素数据中由于 CPI、M2 等数据一般都在月中公布,因此我们在预测中使用的是滞后一期的数据。

时间区间为 2005 年 1 月至 2017 年 7 月,训练时间为 36 个月,采用滚动训练预测的方式。用 t-36 到 t-1 月的因子数据为训练样本,进行样本内的参数测算,再用其来预测第 t 个月沪深 300 指数的涨跌。

所有的数据我们都进行了异常值、缺失值等各种预处理。在每个月的月末判断下个月沪深 300 指数的涨跌,并将该结果与下个月的真实涨跌情况进行比较,计算决策树方法预测的准确率(预测正确个数/预测期总月份数)。

采用改进后的 CART 方法,加入了自动剪枝过程,从而减少过拟合。

下图为一个样本生成树的示例:

必威 27

决策树分类示例

下图显示了决策树(CART)模型的涨跌预测准确率的变化过程。在总共 114 个预测期内我们预测大盘涨跌正确的月份达到 68 个,也就是说准确率达到了 60%的水平。从准确率随时间变化趋势来看,除去刚开始时的波动,后期基本稳定在 60%上下,整体准确率还算是较为理想。

必威 28

决策树分类准确率变化

接下来我们考虑以上述决策树预测为基础的择时策略(对应下图中 CART Strategy):如果模型看涨则在下一个交易日全仓买入,看跌则在下一个交易日清仓(假定初始购入资金为 10 万,单边买卖的成本定为 0.5%)。与之对应的为基准交易策略(对应下图中 HS300 Strategy),即在开始时全仓购入沪深 300 指数并持续持有。由此我们得到了下图中两种
策略的资产净值比较:尽管 2008-2017 年期间大盘整体表现不佳,但决策树策略仍然保持了为正的累计收益率,并且其收益率比持续持有沪深 300 指数要高出 21.3%。

从下图中可以看出,这部分高出的收益率主要来自于决策树策略能够有效地规避大部分下跌(大盘指数下跌时 CART Strategy 曲线大多走势平缓),并且把握住了主要的上涨 行情。但我们也发现决策树策略的上涨行情的把握略差于对下跌行情的规避,尤其是2015-16 年间的一波中级牛市,基本没有较大幅度的上涨(还好规避掉了后来大盘的下跌)。究其原因,我们认为像经济指标的滞后、因子覆盖面不足(例如忽略了市场情绪变化)等 都是可能干扰决策树模型的噪声。

必威 29

决策树择时与基准净值变化

无监督学习:发现数据的潜在规律

1、聚类——无类标数据潜在模式的挖掘

(1)K-means

K-means 计算高效,易于实现,是一种经典的聚类技术。它是根据样本之间的相似性对样本进行分组,划分为k个类簇,组内的对象之间具有更高的相似度。相似性的度量通常采用欧氏距离的倒数。

初始状态下,随机选取k个点作为初始类簇中心。随后将每个样本依据相似度划分到离它最近的中心点,并重新计算每个簇的中心。重复这一步骤,直到中心点不变或者达到预定的迭代次数时终止。

实际运用中,初始k个中心点的选取以及聚类簇数k对结果的划分有较大影响。因此, 除了随机选取初始中心,我们还有两种其他的方式选取初始中心。

初始中心的选取

1、 选择批次距离尽可能远的 k 个点:首先随机选择一个点作为第一个初始类簇的中心点,然后选择距离它最远的那个点作为第二个初始类簇的中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点……直到选出 k 个初始类簇的中心点。

2、 选用层次聚类或 canopy 算法进行初始聚类,然后利用这些类簇的中心点作为k-means 算法初始类簇中心点。

K 值的确定

通过选定一个类簇指标,比如平均半径或直径,当假设的簇数 k 大于等于真实的类簇数目时,该指标上升很慢,而少于真实数目时,该指标会急剧上升。类簇指标变化的拐点最接近真实类簇数目。

其中,类簇的半径指类簇内所有点到类簇中心距离的最大值。类簇的直径指类簇内任意两点之间的最大距离。

必威 30

类簇指标变化的拐点为最佳 K 取值

(2)层次聚类

层次聚类无需事先指定簇数量。层次聚类有两种:凝聚(agglomerative)层次聚类和分裂(divisive)层次聚类。

凝聚层次聚类是一个自下而上的聚集过程,初始时把每个样本看作一个单独的簇,重复地将最近的一对簇合并,直到所有样本都在同一个簇中为止。由此生成整个树形图。在这个过程中,度量两个簇之间距离的方式有三种:

单链(single-link):不同两个聚类簇中离得最近的两个点之间的距离(即 MIN);

全链(complete-link):不同两个聚类簇中离得最远的两个点之间的距离(即 MAX);

平均链(average-link):不同两个聚类簇中所有点对距离的平均值(即 AVERAGE)。

而分裂层次聚类是自上而下的,首先把所有样本看作在同一个簇中,然后迭代地将簇划分为更小的簇,直到每个簇都只包含一个样本。

层次聚类的缺点在于计算开销比较大。

(3)实例:趋势动量模式聚类选股模型

策略思路:使用聚类的方法,找到短期内表现较好股票的动量和趋势模式特征,选择最接近该特征的股票构建投资组合,使得组合能够在较短周期内取得较好收益。

策略的大致流程如下所示:

1、在 t 时刻,计算所有股票在 t-20时刻的动量和趋势指标值(计算方法见下),根据股票的指标值和市值(均已去极值标准化处理)对所有股票进行 K-means 聚类,得到M个股票组(类别);

2、每个股票组构成一个投资组合,假设对组合内每只股票等权重分配资金,计算每个投资组合从 t-20 持有至 t 天的组合收益值;

3、对 M 个组合的收益值进行排序,找到排序最高的股票组合,并得到这个类别的指标中心向量,记为 center;

4、在 t 时刻下计算所有股票的指标向量,计算每个向量与最优中心 center 的欧氏距离,按照距离由小到大排序,得到前 20 支股票,作为当前选出的股票组合进行投资, 持有 20 天后卖出;

5、策略逐日滚动。

策略所采用的动量和趋势指标计算方法如下:

ROC(rate of change) = (Pricetoday – Pricen days ago) / Pricen days ago * 100 TrendIndicator = (Price - EMA) / EMA * 100

其中,EMA 为股价的指数移动均值。分别选取 125 天 ROC、20 天 ROC 和 200 天
TrendIndicator、50 天 TrendIndicator 为长、短周期动量和趋势指标。

对 2007 年 1 月 1 日至 2017 年 7 月 14 日全 A 股市场所有股票的日线数据进行分析,基准分别选取上证综合指数和沪深 300 指数。

交易手续费设置为双边千分之三,使用收盘价计算策略指标,使用发出交易信号第二天的开盘价进行交易。初始资金等分为 20 份,用于一个 20 天周期内不同交易日的策略交易,各份资金之间互不影响。

在构建投资组合时,剔除停牌以及上市未满一年的股票。策略表现如下:

必威 31

聚类数为 10 的长短期 ROC 指标聚类图

必威 32

聚类数为 10 的长短期 trend 指标聚类图

必威 33

聚类数为 10 的净值表现

2、降维——数据压缩

(1)主成分分析

对不适合正则化的模型,可以用主成分分析或者线性判别分析降维。

主成分分析是一种常用的降维方法,能够在尽可能多地保留相关信息的情况下,把多指标转化为少数几个综合指标。

其基本原理是把数据沿着方差最大的方向映射到维度更低的子空间上,新特征的坐标相互正交。如果原始数据是 d 维,新的子空间是 k 维( k ≤ d ),那么我们需要构建一个d×k维的转换矩阵 W。

构造转换矩阵的基本步骤是:首先对数据标准化,并构造样本的协方差矩阵,求协方差矩阵的特征值和特征向量,选择与前 k 个最大特征值对应的特征向量构建映射矩阵。

(2)线性判别分析

线性判别分析(linear discriminant analysis,LDA)是一种监督的数据压缩方法。使用 PCA 降维时, PCA 可以把两个特征合并为一个,但 PCA 没有类别标签,如果这两个特征对于类别标签的分类没有任何影响,那么我们完全可以把这两个特征去除。LDA 就是要从高维特征中抽取出与类别标签关系最密切的低维特征。

假设我们有两个类别标签,当原始数据是二维,想将二维降到一维,我们可以把数据投影到最佳向量 w 上,使得类别间的距离最大,每个类别内部点的离散程度最小。

必威 34

线性判别分析

找最佳向量 w 的过程如下:

1、 对 d 维数据进行标准化处理,并计算 d 维的均值向量:

必威 35

2、 构造类间散布矩阵 SB 及类内散布矩阵 SW:

必威 36

其中,m 为全局均值,

必威 37

3、 计算矩阵

必威 38

的特征值及特征向量;

4、 提取前k个特征值所对应的特征向量,构造d×k维的转换矩阵W,其中特征向量以列的方式排列;

5、 使用转换矩阵把样本映射到新的子空间。

(3)实例:主成分因子降维

我们选取2017 年第一季度沪深300 成分股的每股收益和资产收益率,并进行标准化, 得到下图的二维数据点。我们希望找到一条直线,使得这一方向上的数据值对方差的影响最大,即,将数据点投影到这条直线后,得到的方差最大。

必威 39

每股收益和净资产收益率主成分分析

上图的直线是第一主成分所在的维度。新特征 Z 为第一主成分:

Z = 0.707x1-0.707x2

通过主成分分析的方法,我们将相关性较高的两个因子,每股收益和资产收益率降为一个一维特征。

强化学习:交互式最大化收益

1、强化学习

强化学习(Reinforcement Learning)是让计算机实现在特定的情况下,通过不断地尝试, 从错误中学习, 最后找到规律, 找到可以获得最大回报的行为。强化学习有四个基本组件,包括输入:环境(States),动作(Actions),回报(Rewards)以及输出:方案(Policy)。和监督学习不同,强化学习没有确定的标签,需要机器自己摸索,每一个动作对应一个奖赏,最后得到一个奖赏最大的方式进行数据处理。AlphaGo 就是一个强化学习的实例。强化学习的主要算法有:Sarsa,Q Learning, Policy Gradients, Actor-Critic, Deep-Q-Network 等。

必威 40

强化学习

强化学习的目标是发现最优策略π(x),使得达到最优价值Q 。主要有两种途径可以学习最优值函数:一种是基于模型的学习, 在学习的过程中对模型进行估计, 如实时动态规划(Real-Time Dynamic Programming, RTDP);另一种是无模型学习, 在学习的过程中直接估计最优行动值。

Q学习算法是 Watkins 在 1987 年提出的一种无模型强化学习算法:它用状态s下采取行动的下一个状态s',对假定的行动s'所对应的最大Q'值更新当前的Q值。

2、实例:Q 学习优化投资组合权重

由前文介绍可知,对于系统环境变动频繁的动态决策问题, 强化学习Q算法具有不断试错、优化调整的特点。而量化投资同样面临着具有高风险和高不确定性的环境,而且往往需要在不同阶段动态调整不同股票的投资比例,这些问题通过强化学习Q算法可以得到较好的解决。

假设此组合投资系统在第t-1阶段投资时对股票 i 的未来绩效评价值为Y(i,t - 1),期望值为Yˆ(i,t - 1)。在第t-1期投资结束时,对投资结果进行评价,并计算下一期绩效的期望值:

必威 41

第t期结束后,计算股票i 运作绩效变化率:

必威 42

接下来对该股票的投资权重K(i,t) 进行调整:

必威 43

其中a是一个决定学习速度的正恒量,一般取a = 0.1。

也就是说,如果Y(i,t) > Yˆ(i,t),即股票i在第t期的表现超出预期,则对其进行“奖励”,增加股票i的投资比例;否则其将受到惩罚, 即调低该股票的投资比例,直到退出为止。最后对所有股票的权重再统一乘以一个系数,以保证所有权重的加总为 1。

二、CNN的层次结构

  此次股票价格预测模型仅根据股票的历史数据来建立,不考虑消息面对个股的影响。曾有日本学者使用深度学习的方法来对当天的新闻内容进行分析,以判断其对股价正面性/负面性影响,并将其与股票的历史数据相结合,各自赋予一定的权重来对近日的股价进行预测[1]。该预测方法取得了一定的效果。

中文文档: 
官方文档: 
文档主要是以keras2.0。

1.1 预测方案的确定

AI+量化的应用和展望

AI 在国内的应用仍有一定的局限性,目前 AI 在国内投研投顾领域主要用于辅助决策与用户画像上。将来有望落地的将会是“AI+”的量化投资模式,即在传统量化思想的基础上,恰当地运用一些 AI 算法,帮助贡献有益的投资决策。长期来看,全面 AI 还很遥远。这一方面是由于,AI 学习的效果跟数据的质量有很大关系,我国 A 股市场发展的时间还不长,数据量不够充足,噪声也比较多,使 AI 学习效果的稳定性不能得到充分的保证。另一方面,脱离人类经验的完全强化学习目前仅在有特定约束条件的环境下成功运用, 离普适还有相当距离,深度学习、强化学习等技术仍需要 GPU、TPU 发展的支持。

人工智能,在金融领域已经开始逐步从探索走向应用,从金融大数据,到智能投顾、智能投研,在不断取得新的应用进展。依托于计算机和数据信息的发展,“AI+”的模式将给我们的投资研究带来更多的助益。未来将在“AI+”量化投资中探索更多的想法和应用。

输入层:

在CNN的输入层中,(图片)数据输入的格式 与 全连接神经网络的输入格式(一维向量)不太一样。CNN的输入层的输入格式保留了图片本身的结构。

对于黑白的 28×28

的图片,CNN的输入是一个 28×28

的的二维神经元,如下图所示:

必威 44

而对于RGB格式的28×28

图片,CNN的输入则是一个 3×28×28

的三维神经元(RGB中的每一个颜色通道都有一个 28×28

的矩阵),如下图所示:

必威 45

  而这里我没有引入消息面的影响,主要出于以下几点考虑:


农田有效灌溉面积的变化受多方面因素的影响,比如政策、中央财政资金投入、地方财政资金投入、农民收入状况等。这些因素并不是孤立地对农田有效灌溉面积产生影响,而是耦合在一起以非线性的方式影响农田有效灌溉面积的变化。

卷积层:

在卷积层中有几个重要的概念:

  • local receptive fields(感受视野)
  • shared weights(共享权值)

假设输入的是一个 28×28

的的二维神经元,我们定义5×5

的 一个 local receptive fields(感受视野),即 隐藏层的神经元与输入层的5×5

个神经元相连,这个5*5的区域就称之为Local Receptive Fields,如下图所示:

必威 46

可类似看作:隐藏层中的神经元 具有一个固定大小的感受视野去感受上一层的部分特征。在全连接神经网络中,隐藏层中的神经元的感受视野足够大乃至可以看到上一层的所有特征。

而在卷积神经网络中,隐藏层中的神经元的感受视野比较小,只能看到上一次的部分特征,上一层的其他特征可以通过平移感受视野来得到同一层的其他神经元,由同一层其他神经元来看:

必威 47

设移动的步长为1:从左到右扫描,每次移动 1 格,扫描完之后,再向下移动一格,再次从左到右扫描。

具体过程如动图所示:

必威 48

必威 49

可看出 卷积层的神经元是只与前一层的部分神经元节点相连,每一条相连的线对应一个权重 w

一个感受视野带有一个卷积核,我们将 感受视野 中的权重 w

矩阵称为 卷积核 ;将感受视野对输入的扫描间隔称为步长(stride);当步长比较大时(stride>1),为了扫描到边缘的一些特征,感受视野可能会“出界”,这时需要对边界扩充(pad),边界扩充可以设为 0

或 其他值。步长 和 边界扩充值的大小由用户来定义。

卷积核的大小由用户来定义,即定义的感受视野的大小;卷积核的权重矩阵的值,便是卷积神经网络的参数,为了有一个偏移项 ,卷积核可附带一个偏移项 b

,它们的初值可以随机来生成,可通过训练进行变化。

因此 感受视野 扫描时可以计算出下一层神经元的值为:

b+∑i=04∑j=04wijxij

对下一层的所有神经元来说,它们从不同的位置去探测了上一层神经元的特征。

我们将通过 一个带有卷积核感受视野 扫描生成的下一层神经元矩阵 称为 一个feature map (特征映射图),如下图的右边便是一个 feature map:

必威 50

因此在同一个 feature map 上的神经元使用的卷积核是相同的,因此这些神经元 shared weights,共享卷积核中的权值和附带的偏移。一个 feature map 对应 一个卷积核,若我们使用 3 个不同的卷积核,可以输出3个feature map:(感受视野:5×5,布长stride:1)

必威 51

因此在CNN的卷积层,我们需要训练的参数大大地减少到了 (5×5+1)×3=78

个。

假设输入的是 28×28

的RGB图片,即输入的是一个 3×28×28

的的二维神经元,这时卷积核的大小不只用长和宽来表示,还有深度,感受视野也对应的有了深度,如下图所示:

必威 52

由图可知:感受视野: 3×2×2

; 卷积核: 3×2×2

,深度为3;下一层的神经元的值为:b+∑2d=0∑1i=0∑1j=0wdijxdij

. 卷积核的深度和感受视野的深度相同,都由输入数据来决定,长宽可由自己来设定,数目也可以由自己来设定,一个卷积核依然对应一个 feature map

注:“stride=1

”表示在长和宽上的移动间隔都为1,即 stridewidth=1

且 strideheight=1

  1.消息的及时性难以保证:很多时候,在一只股票的利好/利空消息出来之前,其股价已经有了较大幅度的增长/下跌。信息的不对称性导致普通群众缺乏第一手消息源。

.

农田有效灌溉面积的预测有两大类方案:一种为结构式的预测方法,就是通过一定的方式建立起各主要影响因素与农田有效灌溉面积之间的关系,然后根据未来各影响因素的变化去预测相对应的农田有效灌溉面积;另一种为数据序列预测法,就是将各年度的农田有效灌溉面积数值作为连续的时间序列看待,可以认为农田有效灌溉面积的变化规律已经蕴含在数据序列之中,再采用合适的方法对该序列在未来的取值进行预测。

激励层:

激励层主要对卷积层的输出进行一个非线性映射,因为卷积层的计算还是一种线性计算。使用的激励函数一般为ReLu函数:

f(x)=max(x,0)

卷积层和激励层通常合并在一起称为“卷积层”。

  2.消息的准确性难以保证:互联网上信息传播速度极快,媒体之间经常会出现相互抄袭新闻的情况,而这种抄来的新闻(非原创新闻)往往没有经过严格的审核,存在着内容虚假,夸大宣传的可能性。一旦分析模型错用了某条谣言或真实性不高的新闻,很有可能得出错误的预测结果。

Keras系列:

1、keras系列︱Sequential与Model模型、keras基本结构功能(一) 
2、keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二) 
3、keras系列︱图像多分类训练与利用bottleneck features进行微调(三) 
4、keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四) 
5、keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完整案例(五)


在第一种方案中,首先需要确定具体影响农田有效灌溉面积变化的因素种类及其影响规律,另外还需要对各因素的未来变化进行预测。准确地确定影响农田有效灌溉面积变化的各种因素本身就很有难度,各因素对有效灌溉面积影响规律的辨识也同样是一个比较复杂的问题,而预测各因素未来的变化更是一个几乎和预测农田有效灌溉面积难度相当的问题。在第二种方案中,首先需要建立起能够充分反映农田有效灌溉面积变化规律的预测模型,然后通过求取该预测模型在未来的输出值即可实现预测。两种方案相比,显然第二种方案更容易实现。因此,在以下研究中采用数据序列预测方案。

池化层:

当输入经过卷积层时,若感受视野比较小,布长stride比较小,得到的feature map (特征图)还是比较大,可以通过池化层来对每一个 feature map 进行降维操作,输出的深度还是不变的,依然为 feature map 的个数。

池化层也有一个“池化视野(filter)”来对feature map矩阵进行扫描,对“池化视野”中的矩阵值进行计算,一般有两种计算方式:

  • Max pooling:取“池化视野”矩阵中的最大值
  • Average pooling:取“池化视野”矩阵中的平均值

扫描的过程中同样地会涉及的扫描布长stride,扫描方式同卷积层一样,先从左到右扫描,结束则向下移动布长大小,再从左到右。如下图示例所示:

必威 53

其中“池化视野”filter: 2×2

;布长stride:2。(注:“ 池化视野”为个人叫法)

最后可将 3 个 24×24

的 feature map 下采样得到 3 个 24×24

的特征矩阵:

必威 54

  3.语言的歧义性:一条新闻,其正面性/负面性往往存在着多种解读。例如“习主席宣布中国将裁军30万”——新华每日电讯2015.09.04。这条新闻一般意义上可以解读为:中央政府深入推进改革,精兵简政,大力发展国防军工事业。这是一种正面性的解读。而在使用机器学习模型时,如传统的奇异值分解算法(SVD),很有可能会判定其与“去年五大行裁员近3万”这种新闻具有较高的相似度,因而将其划分为负面新闻。

零、keras介绍与基本的模型保存

写成了思维导图,便于观察与理解。

1.2 预测方法的选择

归一化层:

  4.技术实现较为繁杂:这其实是一个非常重要的原因啦~,获取正确的信息并进行NLP操作,往往需要经过以下流程:人工浏览网页确定稳定可靠的信息源→设计爬虫实现有效信息的获取→设计新闻裁剪(填充)方案以应对不同长度的新闻→人工标注新闻的正/负性(也可以用当日股价涨跌来标注)→设计网络模型→训练及验证模型。其中的每一步都非常麻烦耗时,而且对于个股来说,并不是每天都会有新闻出现。

1.keras网络结构

必威 55

在数据序列的预测中,目前广泛采用的方法有移动平均法、指数平滑法、线性回归法、灰色预测法、神经网络法和支持向量机方法等。这些方法中神经网络法和支持向量机方法从本质上来说更为适合应用于非线性预测问题。而农田有效灌溉面积所构成的数据序列是一个典型的非线性序列。显然在该研究中采用神经网络法和支持向量机方法较为合适。为了充分研究这两种方法的适用性,以下对这两种方法进行对比分析。

1. Batch Normalization

Batch Normalization(批量归一化)实现了在神经网络层的中间进行预处理的操作,即在上一层的输入归一化处理后再进入网络的下一层,这样可有效地防止“梯度弥散”,加速网络训练。

Batch Normalization具体的算法如下图所示:

必威 56

每次训练时,取 batch_size 大小的样本进行训练,在BN层中,将一个神经元看作一个特征,batch_size 个样本在某个特征维度会有 batch_size 个值,然后在每个神经元 xi

维度上的进行这些样本的均值和方差,通过公式得到 xi∧

,再通过参数 γ

和 β

进行线性映射得到每个神经元对应的输出 yi

。在BN层中,可以看出每一个神经元维度上,都会有一个参数 γ

和 β

,它们同权重w

一样可以通过训练进行优化。

在卷积神经网络中进行批量归一化时,一般对 未进行ReLu激活的 feature map进行批量归一化,输出后再作为激励层的输入,可达到调整激励函数偏导的作用。

一种做法是将 feature map 中的神经元作为特征维度,参数 γ

和 β

的数量和则等于 2×fmapwidth×fmaplength×fmapnum

,这样做的话参数的数量会变得很多;

另一种做法是把 一个 feature map 看做一个特征维度,一个 feature map 上的神经元共享这个 feature map的 参数 γ

和 β

,参数 γ

和 β

的数量和则等于 2×fmapnum

,计算均值和方差则在batch_size个训练样本在每一个feature map维度上的均值和方差。

注:fmapnum

指的是一个样本的feature map数量,feature map 跟神经元一样也有一定的排列顺序。

Batch Normalization 算法的训练过程和测试过程的区别:

在训练过程中,我们每次都会将 batch_size 数目大小的训练样本 放入到CNN网络中进行训练,在BN层中自然可以得到计算输出所需要的 均值方差 ;

而在测试过程中,我们往往只会向CNN网络中输入一个测试样本,这是在BN层计算的均值和方差会均为 0,因为只有一个样本输入,因此BN层的输入也会出现很大的问题,从而导致CNN网络输出的错误。所以在测试过程中,我们需要借助训练集中所有样本在BN层归一化时每个维度上的均值和方差,当然为了计算方便,我们可以在 batch_num 次训练过程中,将每一次在BN层归一化时每个维度上的均值和方差进行相加,最后再进行求一次均值即可。

 

2.keras网络配置

必威 57
其中回调函数callbacks应该是keras的精髓~

2 两种预测方法的理论基础及特性分析

2. Local Response Normalization

近邻归一化(Local Response Normalization)的归一化方法主要发生在不同的相邻的卷积核(经过ReLu之后)的输出之间,即输入是发生在不同的经过ReLu之后的 feature map 中。

LRN的公式如下:

b(i,x,y)=a(i,x,y)(k+α∑min(N−1,i+n/2)j=max(0,i−n/2)a(j,x,y)2) β

其中:
a(i,x,y)

表示第i

个卷积核的输出(经过ReLu层)的feature map上的 (x,y)

位置上的值。
b(i,x,y)

表示 a(i,x,y)

经LRN后的输出。
N

表示卷积核的数量,即输入的 feature map的个数。
n

表示近邻的卷积核(或feature map)个数,由自己来决定。
k,α,β

是超参数,由用户自己调整或决定。

与BN的区别:BN依据mini batch的数据,近邻归一仅需要自己来决定,BN训练中有学习参数;BN归一化主要发生在不同的样本之间,LRN归一化主要发生在不同的卷积核的输出之间。

  上面说了这么多,还没有开始对我这个预测模型进行介绍,下面开始进入正题。在决定排除消息面的考量之后,我开始思考股价涨跌的本质,我认为股价就是资金博弈结果的体现。这次建立的预测模型,朴素的想法是通过深度学习模型来洞悉庄家的操作规律,对拉升、砸盘的情况进行预测。为了达到以下目的,我决定选取以下七个特征来构建网络模型,即:

3.keras预处理功能

必威 58

2.1 BP神经网络预测的理论基础及特性分析

切分层:

在一些应用中,需要对图片进行切割,独立地对某一部分区域进行单独学习。这样可以对特定部分进行通过调整 感受视野 进行力度更大的学习。

涨跌幅  最高涨幅  最低跌幅  大单净流入  中单净流入  小单净流入  换手率

4、模型的节点信息提取

# 节点信息提取
config = model.get_config()  # 把model中的信息,solver.prototxt和train.prototxt信息提取出来
model = Model.from_config(config)  # 还回去
# or, for Sequential:
model = Sequential.from_config(config) # 重构一个新的Model模型,用去其他训练,fine-tuning比较好用

在各类神经网络中,BP神经网络堪称最经典、使用最为广泛的一种神经网络[2,3]。

融合层:

融合层可以对切分层进行融合,也可以对不同大小的卷积核学习到的特征进行融合。

例如在GoogleLeNet 中,使用多种分辨率的卷积核对目标特征进行学习,通过 padding 使得每一个 feature map 的长宽都一致,之后再将多个 feature map 在深度上拼接在一起:

必威 59

融合的方法有几种,一种是特征矩阵之间的拼接级联,另一种是在特征矩阵进行运算 (+,−,x,max,conv)

使用这七个特征来对股票的涨跌情况以及资金的流动情况建立适当的模型。此外,其他的指标类似MACD、均线等也是通过一些基础数据的运算得出,在构建模型时并没有将其纳入考量范围。

5、 模型概况查询(包括权重查询)

# 1、模型概括打印
model.summary()

# 2、返回代表模型的JSON字符串,仅包含网络结构,不包含权值。可以从JSON字符串中重构原模型:
from models import model_from_json

json_string = model.to_json()
model = model_from_json(json_string)

# 3、model.to_yaml:与model.to_json类似,同样可以从产生的YAML字符串中重构模型
from models import model_from_yaml

yaml_string = model.to_yaml()
model = model_from_yaml(yaml_string)

# 4、权重获取
model.get_layer()      #依据层名或下标获得层对象
model.get_weights()    #返回模型权重张量的列表,类型为numpy array
model.set_weights()    #从numpy array里将权重载入给模型,要求数组具有与model.get_weights()相同的形状。

# 查看model中Layer的信息
model.layers 查看layer信息

BP神经网络是误差反向传播(Back error propagation,简称BP)神经网络的简称。BP神经网络通常由1个输入层、若干隐含层和1个输出层组成,在每层中可以包括若干个神经元。各相邻层神经元之间多为全连接方式,而同层神经元之间则无连接[4]。各神经元间的连接传递相应的权值,隐含层及输出层各神经元都有自己的阈值。BP神经网络作为一种前馈网络,具有前馈网络的共性。研究表明,三层前馈网络就能够以任意精度逼近任意连续函数及其各阶导数[5]。对序列进行建模,从本质上来说就是获得序列的变化泛函,BP神经网络的函数逼近功能正好可以实现此过程。

全连接层和输出层

全连接层主要对特征进行重新拟合,减少特征信息的丢失;输出层主要准备做好最后目标结果的输出。例如VGG的结构图,如下图所示:

必威 60

TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:各自赋予一定的权重来对近日的股价进行预测必