WranglerNN建立股票预测模型,机器学习在量化投资中的应用

  博士结业在此以前已经对遵照LSTM循环神经网络的股票价格预测方法开始展览过小小的研讨,趁着近期干活不忙,把在那之中的一部分剧情写下来做以记录。

机械学习算法分类

机器学习重大分为三种档次,监督学习(Supervised
Learning)、无监察和控制学习(Unsupervised Learning)和激化学习(Reinforcement
Learning)。大家对主流分类方法来介绍机器学习在量化投资中的应用,实际上,各个方法的应用方式能够相互交叉。

监察学习的机要目的是采取有类标的教练多少构建立模型型,大家能够利用经磨练取得的模子对今后数据开始展览预测。术语监督是指练习多少汇总的各样样本均有1个已知的输出项。如利用分类对类标实行预测、使用回归预测接连输出值。

在无监督学习中,将拍卖无类标数据或然完全分布趋势不明朗的数额,通过无监察和控制学习,我们能够在平昔不已知输出变量和举报函数辅导的景况下提取有效消息来切磋数据的完整布局。如通过聚类发现数指标子群,数据压缩中的降维。

加重学习的指标是创设二个种类,在与环境互相的进度中抓牢系统的天性。环境的近期地方音信中常见包涵一个申报信号,我们得以将深化学习正是与监察和控制学习有关的三个领域,不过,在加剧学习中,那几个报告值不是1个鲜明的类标只怕三番五次类型的值,而是三个通过举报函数产生的对近期系统作为的评说。通过与环境的交互,系统能够由此深化学习来赢得一星罗棋布行为,通过探索性的试错或许借助精心设计的振奋连串使得正向反馈最大化。贰个常用的深化学习例子正是象棋对弈的游玩,在此,系统依据棋盘上的当前局态(环境)
决定落子的地点,而游戏停止时胜负的判定可以作为激励信号。AlphaGo
就是深化学习的中标采用。

前言

WranglerNN建立股票预测模型,机器学习在量化投资中的应用。如上一篇所述,那篇文章讲一讲建立模型的持续:怎么着增强benchmark模型质量。

先说一下结论:在获得更好的前瞻模型那件事上,作者失利了。

对,没错,作者从没成功进步模型预测率。无论是处理非平衡数据,特征归一化,独热编码,仍旧选拔区别算法,小编都不能增强模型预测率,它们的结果还是和benchmark模型大约,要么更差。

那之中的原故大概有:

  • 特征工程做得倒霉。老实说,由于UCI的那个数据集一定完整(丰裕多的变量,没有缺点和失误值,没有特别值),在特点工程地方我从未太多的想法。
  • 算法接纳不当或调参不当。在这几天的建立模型实验里,除了对sklearn自笔者素不相识之外,笔者发现自家的反驳功底有所欠缺,所以在用某种算法的时候,面对一箩筐的参数,日常不能。接下来的几周里,笔者打算好好回想算法,巩固理论功底。

但除此之外这个,依然有一些诙谐的觉察。上边笔者会具体讲述本人在建模进程中做过的品味,以及从中获得的意识。

前言:下边介绍其它一种集成算法思想—boosting,升高学习(Boosting)是一种机器学习技术,能够用于回归和分类的标题,它
每一步产生弱预测模型(如决策树),并加权累加到总模型中;假设每一步的弱预
测模型的生金奈以根据损失函数的梯度情势的,那么就叫做梯度进步(Gradient
boosting);
提高技能的含义:尽管叁个题材存在弱预测模型,那么能够通过提高技术的方式获得四个强预测模型;
广阔的模型有: Adaboost
Gradient Boosting(GBT/GBDT/GBRT)

 

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

监察学习:对前景事变展开展望

一 、 回归——预测连续型指标变量

(1) OLS 回归

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

www.30064.com 1

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

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

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

正则化是通过在模型中出席额外音信来化解过拟合的一种办法。参加的新闻称为惩罚项,惩罚项扩充了模型的复杂度,但下落了模型参数的熏陶。

常用的正则化线性回归艺术有:基于 L2 罚项的岭回归、基于 L1 罚项的 LASSO
回归, 以及构成了 L1 与 L2 的弹性网络。

岭回归:在小小的二乘的代价函数中投入权重的平方和。个中扩张超参λ的值能够增添正则化的强度,同时下跌了权重对模型的震慑。

www.30064.com 2

LASSO 回归:在非常的小二乘的代价函数中投入权重相对值的和。

www.30064.com 3

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

www.30064.com 4

(3)评价回归模型品质的法子

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

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

www.30064.com 5

决定周密( 智跑2 ):MSE 的原则版本,预测值的方差。

www.30064.com 6

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

以沪深 300 成分股为底蕴,选拔 PE、PB、ROE、LFLO、十日本资本金流量、应付账款周转率、净利润增加率、当前价位处于过去 1
年股票价格中的地方这 8 个因子构造模型,使用二〇一一0801-20130531
的月数据用来陶冶,二〇一一0601-20171001 进行回测,按月调仓;

首先对数码开始展览去极值、中性化、标准化、归一化处理,再分别使用二种不相同的模型在教练集上获得回归全面,依照调仓眼前一天的因数与回归周全的乘积作为分数,取排行前
20 的股票,按分数在钻探分数中的比例总结买入权重;

分级选取 OLS、LASSO回归、岭回归的回测结果净值如下:

www.30064.com 7

OLS回归

www.30064.com 8

LASSO回归

www.30064.com 9

岭回归

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

(1) logistic回归

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

www.30064.com 10

其中,输入 Z:

www.30064.com 11

Logit回归模型能够看成由两有的组成,一部分和线性回归一样,另一局地是sigmoid
函数。直观情势如下图:

www.30064.com 12

Logistic回归

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

逻辑斯蒂回归并不是木人石心地将分类结果定为 0 或 1,而是交由了 0 和 1
之间的可能率。这一定于对分类结果提交了1个打分。例如我们想选出沪深 300
成分股中回涨可能率最大的前 三十只股票,我们能够用逻辑斯蒂回归的结果对每只股票算出叁个打分,分数越接近于3遍升可能率越大,只要选出打分排行前 30
的就足以了。别的也得以鲜明2个阈值,大于阈值的归为一类,小于阈值的归为另一类。

(2) SVM

SVM(support vector
machine)俗称协理向量机,是一种监督学习算法,可用来分类和回归。它在解决小样本、非线性及高维形式识别中突显出众多故意的优势。

支撑向量机分类的法则如下:

假设有七个门类:实心圆和空心圆,大家的数目有两脾性状:x 和
y,要求取得一个分类器,给定一对(x,
y),输出实心圆和空心圆。大家将已标记的教练多少体今后下图:

www.30064.com 13

SVM分类

借使大家要把实心圈和空心圈分成两类。协理向量机会接受那一个数据点,并出口叁个超平面(在二维图中是一条直线)将两类分割开来。两类中,分别有偏离分界线近来的点,
被称之为辅助向量(图中加粗的圆点)。而大家要物色的最优的分界线要满意:扶助向量到最优先分配界线的相距最大。

用数学表明式表述:

概念直线

www.30064.com 14

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

www.30064.com 15

N 个训练点的音讯记为

www.30064.com 16

分类器知足

www.30064.com 17

如上分类原理可进展至高维平面。

我们早已精通到了 SVM 处理线性可分的情状,对于非线性的意况,SVM
的处理方法是挑选一个核函数,通过将数据映射到高维空间,最后在高维特征空间中结构出最优先分配离超平面,来化解在原来空间中线性不可分的难题。

(3)决策树、随机森林

决策树

决策树最吸引人的地点在于其模型的可解释性。正如其名目“决策树”所表示的那样,我们可以从树根发轫,依据节点的不比变量值划分建立树的分枝,自顶向下重新建下层和分枝,直到完结建立整棵决策树。

在每五个节点,采纳可获得最大消息增益(information
gain,IG)的风味来对数据开始展览剪切。通过迭代再度此划分进度,直到叶子节点。在实际上选拔中,这或许会招致生成一棵深度一点都不小、拥有众多节点的树,即发生过拟合,为此,一般经过“剪枝”限定树的最大深度。

最大信息增益即每一趟划分时优化的对象函数,为了落到实处每一回划分对音讯增益的最大化。

音信增益:

www.30064.com 18

中间,f 为即将举办私分的天性, Dp 和 Dj 分别是父节点和第 j 个子节点,I
为新闻含量, Np 和 Nj
分别为父节点和子节点中的样本数量。所以音讯增益即父节点消息与子节点音信之差。

音信 I 一般有四个心眼儿标准:基尼周详( IG )、熵( IH )、误分类率( IE
)。

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

www.30064.com 19

里头, p( i | t) 为节点 t 中,属于类型 c 的范本占节点 t
中总样本数的百分比。

随意森林

轻易森林能够当作多棵决策树的集成,通过多数投票的主意对每棵决策树的结果汇总。随机森林拥有更好的鲁棒性,因而一般不须要剪枝。

(4)K-近邻算法

K-近邻算法(K-nearest
neighbor,KNN)是惰性学习算法的超人例证,惰性学习在学习阶段的盘算本金为
0。

KNN算法格外简单,首先,选用近邻的多寡 k
和离开衡量方法;然后找到待分类样本的 k
个如今邻居;最终,依照方今邻的类标进行多数投票。

www.30064.com 20

KNN算法

(5)神经互联网、深度学习

神经网络

人工神经网络是人云亦云南大学脑神经元之间新闻传送的模子,能够以随机精度逼近任意函数,
可以处理各类繁复的非线性关系,多用来拍卖分类难题。

下图描述了三个不难的神经细胞:

www.30064.com 21

单个神经元

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

www.30064.com 22

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

www.30064.com 23

和双曲正切函数

www.30064.com 24

神经网络是将四个单一神经元联结在一块儿,多少个神经元的输出能够变成另贰个神经元的输入。

www.30064.com 25

神经网络模型

神经互连网由最左边输入层、最右的输出层(本例中,输出层唯有2个节点)和中等隐藏层构成。上海体育场面的神经网络例子中有
3 个输入单元(偏置单元不计在内),3 个藏匿单元及四个出口单元。

深度学习

此时此刻超越四分之二分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计量单元情形下对复杂函数的代表能力简单,针对繁复分类难题其泛化能力受到肯定制约。深度学习可经过学习一种深层非线性互联网布局,完结复杂函数逼近,具有强大的从个别样书集中学习数据集本质特征的力量。

深度学习的龙虎山真面目是经过营造具有众多隐层的机器学习模型和海量的练习多少,来学学更使得的性子,从而最终晋级分类或预测的准头。

深度神经互连网的教练体制与历史观神经互联网不一致。古板神经互联网选用反向传播的磨练体制,即经过残差的反向传播调整权重。深度神经互连网层数较多,残差传播到最前头的层已经变得太小,会出现梯度扩散的题材。

纵深神经网络选用的教练体制为逐层开端化。

简短的说,分为两步,一是每便练习一层网络,二是调优。深度学习练习进度具体如下:

1)使用自下回升非监督学习(从底层逐层向顶层磨炼):

选拔无标定数据(有标定数据也可)分层陶冶各层参数,这一步能够看做是二个特色学习进度,是和古板神经网络分化最大的一对。逐层学习每一层的参数,每一步能够当做是取得多少个使得出口和输入差距非常小的三层神经互联网的隐层。使得获得的模型可以学习到多少本身的布局,获得比输入更拥有象征能力的特点;

2)自顶向下的监督检查学习(正是经过带标签的数量去陶冶,误差自顶向下传输,对网络展开微调):

依照第三步获得的各层参数进一步微调整个多层模型的参数,这一步是一个有监察和控制磨炼进程;第3步类似神经互连网的随机初阶化初值进度,由于深度学习的首先步不是任意开始化,而是通过学习输入数据的组织获得的,由此那一个初值更类似全局最优,从而能够获得更好的成效;所以深度学习效果好极大程度上归功于第壹步的本性学习进度。

(6)实例:决策树对沪深 300 市场价格分类

模型构建:

模型的输入因子,大家挑选了八个大类,分别是市集先前时代汇兑、宏观经济目的和利率因素。

市镇汇兑中精选沪深 300
指数上3个月收益率、上贰个月区间波动率作为因子,以期反映市镇在多事、动量等维度的音信;在宏观经济指标中,我们采纳了
GDP(国民经济生产总值,当季相比)、CPI(消费者物价指数)、PMI(购销首席营业官人指数)、Capital
Investment
(固定资金财产投资达成额,当月可比)等与 A
股票集镇场关系密切的变量作为因子;类似地,在利率因素中则选用了 YTM1Y(1
年期国债到期受益率,当月较之)、M2(广义货币,当月同期相比较)。宏观经济指标和利率因素数据中出于
CPI、M2 等数据一般都在月尾公布,因而大家在展望中选拔的是向下一期的多少。

光阴世隔为 二〇〇五 年 1 月至 2017 年 7 月,陶冶时间为 叁17个月,选拔滚动陶冶预测的章程。用 t-36 到 t-四月的因数数据为演习样本,举行样本内的参数计算,再用其来预测第 t 个月沪深
300 指数的起落。

抱有的数量大家都开展了很是值、缺点和失误值等各类预处理。在种种月的月末判断下个月沪深
300
指数的起伏,并将该结果与下个月的真实性涨跌情状举行相比较,总计决策树方法预测的准确率(预测正确个数/预测期总月份数)。

应用创新后的 CA本田CR-VT 方法,参与了电动剪枝进程,从而收缩过拟合。

下图为3个样本生成树的言传身教:

www.30064.com 26

决策树分类示例

下图显示了决策树(CARAV4T)模型的大起大落预测准确率的成形进度。在一起 115个预测期内大家预计大盘上涨或下降正确的月份达到 68 个,也正是说准确率达到了
五分三的程度。从准确率随时间变化趋势来看,除去刚初阶时的骚动,中期基本稳定在
伍分叁前后,全部准确率还算是较为理想。

www.30064.com 27

决策树分类准确率变化

接下去大家着想以上述决策树预测为根基的择时策略(对应下图中 CA奥德赛T
Strategy):假使模型看涨则在下三个交易日全仓买入,看跌则在下贰个交易日清查仓库(假定起首购入资金为
10 万,单边购买销售的工本定为 0.5%)。与之相应的为规范交易策略(对应下图中
HS300 Strategy),即在上兔时全仓购入沪深 300
指数并连发保有。由此大家取得了下图中二种
政策的本金净值相比较:尽管 2009-2017
年之间大盘全体展现不好,但决策树策略照旧维持了为正的总共受益率,并且其收益率比不断拥有沪深
300 指数要高出 21.3%。

从下图中能够见见,那有的高出的收益率主要来自于决策树策略可以使得地逃脱大多数消沉(大盘指数大跌时
CA宝马X5T Strategy 曲线大多市价平缓),并且把握住了根本的上涨市价。但大家也发觉决策树策略的上升汇兑的握住略差于对下降行情的回避,特别是二〇一六-16
年间的一波中路牛市,基本没有较大幅面包车型客车高涨(辛亏规避掉了新兴大盘的低沉)。究其原因,我们觉得像经济指标的滑坡、因子覆盖面不足(例如忽略了市面情感变化)等
都以唯恐烦扰决策树模型的噪音。

www.30064.com 28

仲裁树择时与规则净值变化

无监察和控制学习:发现数目标隐私规律

壹 、聚类——无类标数据潜在情势的发掘

(1)K-means

K-means
总计高效,易于落到实处,是一种经典的聚类技术。它是依照样本之间的相似性对样本进行分组,划分为k个类簇,组内的目的时期有着更高的相似度。相似性的气量经常使用欧氏距离的倒数。

起首状态下,随机挑选k个点作为初叶类簇中央。随后将各种样本依照相似度划分到离它近年来的为主点,比量齐观复总计种种簇的中央。重复这一步骤,直到中央点不变只怕达到预订的迭代次数时停下。

实在使用中,开首k个主旨点的选项以及聚类簇数k对结果的分割有较大影响。因而,
除了自由挑选开首大旨,大家还有三种其余的法子采纳开端主旨。

开班主旨的选择

一 、 选拔批次距离尽也许远的 k
个点:首先随机选拔2个点作为第二个起先类簇的骨干点,然后采用离开它最远的不得了点作为第3个开端类簇的着力点,然后再选用离开前两个点的近日相差最大的点作为第⑦个开端类簇的中央点……直到选出
k 个开始类簇的主导点。

② 、 选取层次聚类或 canopy
算法进行开始聚类,然后采取那个类簇的宗旨点作为k-means
算法早先类簇核心点。

K 值的明确

通过选定二个类簇目的,比如平均半径或直径,当若是的簇数 k
大于等于实际的类簇数目时,该目的稳中有升不快,而简单真实数据时,该指标会激烈上涨。类簇目标变化的拐点最相近实际类簇数目。

其中,类簇的半径指类簇内全部点到类簇大旨距离的最大值。类簇的直径指类簇内任意两点时期的最大距离。

www.30064.com 29

类簇目标转移的拐点为最佳 K 取值

(2)层次聚类

层次聚类无需事先钦命簇数量。层次聚类有三种:凝聚(agglomerative)层次聚类和崩溃(divisive)层次聚类。

成群结队层次聚类是3个自下而上的聚合进度,初步时把各种样本看作3个独立的簇,重复地将近年来的一对簇合并,直到全体样本都在同二个簇中结束。由此生成整个树形图。在那么些进度中,衡量五个簇之间距离的章程有二种:

单链(single-link):分裂五个聚类簇中离得近期的四个点时期的相距(即
MIN);

全链(complete-link):差异八个聚类簇中离得最远的多少个点之间的距离(即
MAX);

平均链(average-link):差异三个聚类簇中全体点对相差的平均值(即
AVERAGE)。

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

层次聚类的老毛病在于总结成本比较大。

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

方针思路:使用聚类的艺术,找到长时间内显示较好股票的动量和大势方式特点,选用最相仿该特征的股票营造投资组合,使得组合能够在较短周期内取得较很低收入。

策略的光景流程如下所示:

一 、在 t 时刻,计算有所股票在
t-20整日的动量和自由化指标值(总括情势见下),依据股票的目标值和股票总值(均已去极值标准化处理)对负有股票进行K-means 聚类,获得M个股票组(体系);

二 、各类股票组构成三个投资组合,借使对构成内每只股票等权重分配资金财产,总括每一个投资组合从
t-20 持有至 t 天的组合受益值;

叁 、对 M
个结合的受益值进行排序,找到排序最高的股票组合,并收获这些类型的目的基本向量,记为
center;

肆 、在 t 时刻下计算有所股票的指标向量,总括每一个向量与最优主导 center
的欧氏距离,依据距离由小到大排序,得到前 20
支股票,作为当前选出的股票组合展开投资, 持有 20 天后卖出;

伍 、策略逐日滚动。

方针所选拔的动量和可行性指标总计方法如下:

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 为长、短周期动量和动向指标。

对 二〇〇七 年 1 月 1 日至 2017 年 7 月 14 日全 A
股票商场场全部股票的日线数据进行分析,基准分别采取上证综合指数和沪深 300
指数。

www.30064.com,交易手续费设置为两者千分之三,使用收盘价总括策略指标,使用发生交易信号第③天的开盘价进行交易。开始费用等分为
20 份,用于一个 20 天周期内不相同交易日的策略交易,各份资金之间互不影响。

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

www.30064.com 30

聚类数为 10 的长长期 ROC 目标聚类图

www.30064.com 31

聚类数为 10 的长长时间 trend 目标聚类图

www.30064.com 32

聚类数为 10 的净值表现

② 、降维——数据压缩

(1)主成分分析

对不切合正则化的模子,能够用主成分分析大概线性判别分析降维。

主成分分析是一种常用的降维方法,可以在尽量多地保留相关音讯的景况下,把多目的转化为少数多少个综合指标。

其基本原理是把数据沿着方差最大的动向映射到维度更低的子空间上,新特点的坐标相互正交。假使原本数据是
d 维,新的子空间是 k 维( k ≤ d ),那么大家需求营造三个d×k维的更换矩阵
W。

结构转换矩阵的主导步骤是:首先对数码标准,并组织样本的协方差矩阵,求协方差矩阵的特征值和特征向量,选拔与前
k 个最大特征值对应的特征向量创设映射矩阵。

(2)线性判别分析

线性判别分析(linear discriminant
analysis,LDA)是一种监督的数据压缩方法。使用 PCA 降维时, PCA
能够把两性子格合并为3个,但 PCA
没有项目的签,假设那三个特色对于项指标签的分类没有任何影响,那么我们完全能够把那多少个特点去除。LDA
正是要从高维特征中抽取出与类型标签关系最缜密的低维特征。

假设大家有八个门类标签,当原始数据是二维,想将二维降到一维,大家得以把数据投影到最佳向量
w 上,使得项目间的偏离最大,每种种类内部点的离散程度最小。

www.30064.com 33

线性判别分析

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

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

www.30064.com 34

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

www.30064.com 35

个中,m 为大局均值,

www.30064.com 36

③ 、 总括矩阵

www.30064.com 37

的特征值及特征向量;

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

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

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

我们选择2017 年第贰季度沪深300
成分股的每股收益和基金收益率,并开始展览标准化,
获得下图的二维数据点。大家希望找到一条直线,使得这一势头上的数据值对方差的震慑最大,即,将数据点投影到那条直线后,获得的方差最大。

www.30064.com 38

每股受益和净资金财产受益率主成分分析

上海体育地方的直线是第2主元素所在的维度。新个性 Z 为率先主成分:

Z = 0.707×1-0.707×2

经过主成分分析的办法,大家将相关性较高的多少个因子,每股收益和开支受益率降为3个一Witt征。

火上加油学习:交互式最大化获益

① 、强化学习

加重学习(Reinforcement
Learning)是让电脑落成在一定的景况下,通过持续地品尝, 从漏洞百出中学习,
最终找到规律,
找到能够获得最大回报的一言一行。强化学习有三个宗旨组件,包蕴输入:环境(States),动作(Actions),回报(Rewards)以及出口:方案(Policy)。和监艺术学习不一样,强化学习没有规定的价签,须求机械本身查找,每3个动作对应1个褒奖,最终收获贰个奖赏最大的措施进行数量处理。AlphaGo
便是多个强化学习的实例。强化学习的机要算法有:Sarsa,Q Learning, Policy
Gradients, Actor-Critic, Deep-Q-Network 等。

www.30064.com 39

深化学习

加重学习的对象是发现最优策略π(x),使得达到最优价值Q
。首要有二种途径得以学习最优值函数:一种是依照模型的就学,
在上学的长河中对模型举办估价, 如实时动态规划(Real-Time Dynamic
Programming, TiguanTDP);另一种是无模型学习,
在攻读的进度中央直属机关接推断最优行动值。

Q学习算法是 沃特kins 在 一九八八年建议的一种无模型强化学习算法:它用状态s下选拔行动的下多少个意况s’,对假定的行动s’所对应的最大Q’值更新当前的Q值。

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

由前文介绍可以,对于系统环境改变频仍的动态决策难题,
强化学习Q算法具有持续试错、优化调整的性状。而量化投资一样面临着独具风险和高不分明的环境,而且往往要求在区别等级动态调整分歧股票的投资比重,这么些标题经过深化学习Q算法能够赢得较好的缓解。

假诺此构成投资种类在第t-1等级投资时对股票 i 的未来绩效评价值为Y(i,t –
1),期望值为Yˆ(i,t –
1)。在第t-1期投资甘休时,对投资结果举行评论,并盘算下一期绩效的期望值:

www.30064.com 40

第t期停止后,总括股票i 运作绩效变化率:

www.30064.com 41

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

www.30064.com 42

里面a是一个控制学习进程的正恒量,一般取a = 0.1。

也等于说,要是Y(i,t) >
Yˆ(i,t),即股票i在第t期的显现超出预期,则对其进展“奖励”,增添股票i的投资比重;不然其将碰到惩治,
即调低该股票的投资比重,直到退出截止。最后对具有股票的权重再统一乘以二个周到,以保险全数权重的加总为
1。

先来回看一下banchmark模型

www.30064.com 43

001 – ROC curve of the benchmark model

以此banchmark模型用的是XGBoost,AUC值为0.8044,模型完全性能不错,但从ROC曲线能够见见,假中性(neuter gender)率(FP福特Explorer)低的时候,对应的真阴性率(TP陆风X8)不高,比如0.2的FP凯雷德对应的TP奥迪Q5不到0.7,表明模型没有能很好地捕捉到
class = 1(y = yes)的pattern。

一个大概的因由是数码的非平衡性,即目的变量y下的三个类目(yes和no)占比不均:y
= yes
的客户只占了总客户的11.27%,不到三分一。大部分存活算法不能够很好地拍卖非平衡数据。

根据此,小编第1尝试通过sampling来缓解非平衡难点。

Adaboost

艾达ptive Boosting是一种迭代算法。每轮迭代中会在演习集上爆发2个新的学
习器,然后选用该学习器对持有样本举行前瞻,以评估每一种样本的显要性
(Informative)。换句话来讲正是,算法会为各类样本赋予贰个权重,每一次用训练好的学习器标注/预测各样样本,若是有些样本点被推断的越正确,则将其权重
下降;不然升高样本的权重。权重越高的样书在下2个迭代替磨练练中所占的比重就
越大,也正是说越难区分的样书在教练进程中会变得越首要;
全体迭代进度直到错误率丰盛小依旧达到自然的迭代次数结束。
只顾:是给样本增添权重,样本加权的长河能够如下图所示:

www.30064.com 44

image.png

  本次股价预测模型仅遵照股票的历史数据来树立,不考虑消息面对个股的震慑。曾有日本大家使用深度学习的艺术来对当天的信息内容开始展览辨析,以咬定其对股票价格正面性/负面性影响,并将其与股票的野史数据相结合,各自赋予一定的权重来对不久前的股票价格进行展望\[1\]。该预测方法取得了自然的效果。

AI+量化的选用和展望

AI 在国内的施用仍有肯定的局限性,近期 AI
在境内投研投顾领域重庆大学用来支援决策与用户画像上。将来有望落地的将会是“AI+”的量化投资情势,即在观念量化思想的功底上,伏贴地应用一些
AI 算法,支持贡献有益的投资决策。长时间来看,全面 AI
还很遥远。这一面是由于,AI 学习的效益跟数据的质量有相当大关系,笔者国 A
股票市集场腾飞的时光还非常短,数据量不够丰硕,噪声也正如多,使 AI
学习效果的安居无法取得丰硕的保证。另一方面,脱离人类经历的通通强化学习方今仅在有特定约束规范的环境下成功采纳,
离普适还有一定距离,深度学习、强化学习等技术仍亟需 GPU、TPU 发展的支撑。

人为智能,在财政和经济领域已经初叶逐年从探索走向应用,从金融大数量,到智能投顾、智能投研,在不断获得新的应用举办。依托于电脑和数码音信的上扬,“AI+”的方式将给我们的投资研讨带来越多的帮助和益处。将来将在“AI+”量化投资中探索愈来愈多的想法和行使。

数码非平衡难题 Imbalanced Data

处理非平衡难题一般有以下两种方法:

  1. 哪些也不做
  2. 通过一些sampling方法使数据变得平衡
  3. 在算法的布局、选用和调节和测试上寻求解决方法

作者在艺术2上展开了尝试,具体方法有:

  • Under-sampling:random under-sapling
  • Over-sampling:SMOTE
  • Combined method:SMOTEENN

实现sampling的python封装是imbalanced-learn,具体能够看它的GitHub。

经过上述那三种sampling方法,笔者构造了多个区别的陶冶集,并动用XGBoost分别对它们实行磨炼,磨炼结果如下。

算法原理

Adaboost算法将基分类器的线性组同盟为强分类器,同时给分类误差率较小的
基本分类器以大的权值,给分类误差率较大的基分类器以小的权重值;营造的线
性组合为:

www.30064.com 45

说到底分类器是在线性组合的底蕴上展开Sign函数转换:

www.30064.com 46

何以举办转向呢?因为获得的线性组合是个再而三的值,必须开始展览转账才能实行分类操作。

Sign函数如下图所示:

www.30064.com 47

为了使得预测的结果尽量或许正确,则写出损失函数,损失函数为当预测战败的时候I函数加一,损失函数如下:

www.30064.com 48

营造的学习器如下:

www.30064.com 49

带走上述损失函数公式,求得最终损失函数为:

www.30064.com 50

为了使损失函数最小,对上述式子进行化简,然后分别对其无人问津变量求偏导,能够解的茫然变量,也正是后边所说的权重,求解进程如下:

www.30064.com 51

终极解得:

www.30064.com 52

个中参数e为第k轮的误差

构建立模型型的末梢结出如图所示:

www.30064.com 53

image.png

营造adaboost模型的进度如下:

  1. 借使磨炼多少集T={(X1,Y1),(X2,Y2)….(Xn,Yn)}

  2. 开首化演习多少权重分布

诚如景色下刚先导的样本权重都是相同的

  1. 动用全数权值分布Dm的操练多少集学习,得到基本分类器

  2. 计量Gm(x)在教练集上的归类误差

  3. 据书上说误差e总括Gm(x)模型的权重周到αm

  4. 从新得到权重磨练数据集的权值分布

www.30064.com 54

里头Zm为为正式引子约等于归一化引子

www.30064.com 55

  1. 塑造基本分类器的线性组合

www.30064.com 56

  1. 收获终极分类器
![](https://upload-images.jianshu.io/upload_images/1652713-3ab540318eb99988.png)

  而那边小编从没引入新闻面包车型大巴震慑,首假设因为以下几点考虑:

1. Random Under-sampling

Under-sampling的思路是,通过收缩多数类(数量占比大的class)的数码,使得演练集中的多个品种在数量上海大学致非凡。

因为自己的数目集有4w+数据,即便是用under-sampling,所剩下的数码在数码上也是相比可观的。假若数据量原本就很少,就绝不在用under-sampling啦。

www.30064.com 57

002 – ROC curve with under-sampling data

蓝绿是应用了under-sampling数据的演习结果,镉黄是benchmark模型。很鲜明,under-sampling无功无过,大概对结果没什么影响(AUC稍微下跌至0.8025)。

若是说在数据量丰硕的情形下,做under-sampling之后,其归来的教练结果没什么差距,那么对于大数额来说,是否能用under-sampling数据来陶冶模型,从而增强总结作用呢?

小结

首若是知情七个权重,分类器权重和样本权重

(1)依照误差率总计的权重周密αm是分类器的权重

(2)样本的权重是根据已经求得的αm,做多个归一化之后更新种种样本的权重,指标是驱动划分错误的数额的权重增大。
上面以贰个简易示例

#-*- conding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

from sklearn.ensemble import AdaBoostClassifier#adaboost引入方法
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles#造数据
## 设置属性防止中文乱码
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
## 创建数据
X1, y1 = make_gaussian_quantiles(cov=2.,
                                 n_samples=200, n_features=2,
                                 n_classes=2, random_state=1)#创建符合高斯分布的数据集
X2, y2 = make_gaussian_quantiles(mean=(3, 3), cov=1.5,
                                 n_samples=300, n_features=2,
                                 n_classes=2, random_state=1)

X = np.concatenate((X1, X2))
y = np.concatenate((y1, - y2 + 1))
plot_step = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),
                     np.arange(y_min, y_max, plot_step))
#构建adaboost模型
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1),
                         algorithm="SAMME.R",#可以不写
                         n_estimators=200)
#数据量大的时候,可以增加内部分类器的树深度,也可以不限制树深
#max_depth树深,数据量大的时候,一般范围在10——100之间
#数据量小的时候,一般可以设置树深度较小,或者n_estimators较小
#n_estimators 迭代次数或者最大弱分类器数:200次
#base_estimator:DecisionTreeClassifier 选择弱分类器,默认为CART树
#algorithm:SAMME 和SAMME.R 。运算规则,后者是优化算法,以概率调整权重,迭代速度快,
#需要能计算概率的分类器支持
#learning_rate:0<v<=1,默认为1,正则项 衰减指数
#loss:linear、‘square’exponential’。误差计算公式:一般用linear足够
bdt.fit(X, y)

#预测
Z = bdt.predict(np.c_[xx.ravel(), yy.ravel()])
#设置维度
Z = Z.reshape(xx.shape)
## 画图
plot_colors = "br"
class_names = "AB"

plt.figure(figsize=(10, 5), facecolor='w')
#局部子图
plt.subplot(121)
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)
for i, n, c in zip(range(2), class_names, plot_colors):
    idx = np.where(y == i)
    plt.scatter(X[idx, 0], X[idx, 1],
                c=c, cmap=plt.cm.Paired,
                label=u"类别%s" % n)
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.legend(loc='upper right')
plt.xlabel('x')
plt.ylabel('y')
plt.title(u'AdaBoost分类结果,正确率为:%.2f%%' % (bdt.score(X, y) * 100))

#获取决策函数的数值
twoclass_output = bdt.decision_function(X)
#获取范围
plot_range = (twoclass_output.min(), twoclass_output.max())
plt.subplot(122)
for i, n, c in zip(range(2), class_names, plot_colors):
#直方图
    plt.hist(twoclass_output[y == i],
             bins=20,
             range=plot_range,
             facecolor=c,
             label=u'类别 %s' % n,
             alpha=.5)
x1, x2, y1, y2 = plt.axis()
plt.axis((x1, x2, y1, y2 * 1.2))
plt.legend(loc='upper right')
plt.ylabel(u'样本数')
plt.xlabel(u'决策函数值')
plt.title(u'AdaBoost的决策值')

plt.tight_layout()
plt.subplots_adjust(wspace=0.35)
plt.show()

结果如下:

www.30064.com 58

image.png

先总括一下Bagging、Boosting的界别

  1. 样本采用:Bagging算法是有放回的私行采集样品;Boosting算法是每一轮流培练习集不变,只是演练集中
    的每一个样例在分类器中的权重爆发变化,而权重依据上一轮的归类结果开展调整;
  2. 样例权重:Bagging使用随机取样,样例的权重;Boosting根据错误率不断的调动样例的权重值,
    错误率越大则权重越大;
  3. 预测函数:Bagging全体预测模型的权重相等;Boosting算法对于误差小的分类器具有更大的权重。
  4. 并行总结:Bagging算法能够互相生成种种基模型;Boosting理论上只可以挨个生产,因为后四个模
    型必要前1个模子的结果;
  5. Bagging是减掉模型的variance(方差);Boosting是收缩模型的Bias(偏度)。
  6. Bagging里每一种分类模型都以强分类器,因为下跌的是方差,方差过高要求下落是过拟合;
    Boosting里每一个分类模型皆以弱分类器,因为下降的是偏度,偏度过高是欠拟合。

  1.信息的及时性难以管教:很多时候,在1头股票的利好/利空音讯出来此前,其股票价格已经有了较大开间的拉长/下降。新闻的不对称性导致普通群众缺乏直接音信源。

2. SMOTE

SMOTE全称为Synthetic Minority Oversampling
Technique,其思路是经过某种特定措施合成新的少数类样本,使得练习集中的多少个档次在数据上大约非凡。

合成的政策是,对各样少数类样本a,从它的近年来邻中随机选二个样本b,然后在a、b之间的连线上随机选一点当做新合成的个别类样本。

自笔者的数据量并从未上10w,所以就算做over-sampling,模型的操练进度也未尝一点也不快。对于大数目来说,做over-sampling要慎重。

www.30064.com 59

003 – ROC curve with SMOTE data

紫蓝是采取了SMOTE数据的磨练结果,灰湖绿是benchmark模型。很扎眼模型预测性别变化差了=。=

原因想必是通过SMOTE生成的多少推广了原始数据中不供给的noise,导致模型过拟合(over-fitting)。用XGBoost的时候笔者用了watchlist,磨练的时候磨练集和验证集的AUC差距相当的大,前者有0.95左右,而后人唯有0.78左右。(但无论是作者怎么调参,始终都是过拟合……)

顺带一提,作者一初叶是对练习集和验证集都做了SMOTE,所以训练的时候两边的AUC都很高也很相近,但新兴察觉那样做并不曾什么含义(也很蠢……),因为测试集的AUC其实很差。后来改成只对陶冶集做SMOTE,结果则改为验证集和测试集的AUC很接近(也都很差)。但在同一练习条件下(同算法,同参数),后者的结果比前者要稍稍好一点。

  2.消息的准头难以保障:网络上消息传播速度相当的慢,媒体之间平日会油不过生互相抄袭音信的情状,而那种抄来的音信(非原创音信)往往没有经过严谨的稽审,存在着内容虚假,夸大宣传的或然性。一旦分析模型错用了某条蜚言或诚实不高的音讯,很有也许得出错误的估量结果。

3. SMOTEENN

SMOTEENN是SMOTE和ENN(Edited Nearest
Neighbours)的结合,前者是over-sampling过程,后者是under-sampling过程。

SMOTEENN的笔触是经过SMOTE合成新的少数类样本,然后通过ENN清洗SMOTE进程中生出的噪点(noisy
samples)。

www.30064.com 60

004 – ROC curve with SMOTEENN data

雾灰是使用了SMOTEENN数据的教练结果,杏黄是benchmark模型。同样的,前者的表现差于后人。

但值得注意的是,SMOTEENN数据的磨练结果比SMOTE数据的和谐,那侧面阐明了SMOTE产生了噪点,使得模型过拟合。

  3.语言的歧义性:一条新闻,其正面性/负面性往往存在着冒尖解读。例如“习近平主席公布中华夏族民共和国将裁减军备30万”——新华每天电子通信二零一六.09.04。这条新闻一般意义上得以解读为:中心政党积极开展改造,精兵简政,大力发展国防军事工业事业。那是一种正面性的解读。而在应用机器学习模型时,如守旧的奇异值分解算法(SVD),很有只怕会咬定其与“2018年中国共产党第五次全国代表大会行裁员近3万”那种音讯具有较高的相似度,由此将其分割为负面音信。

小结

对此这次分析中用到的数据集,二种sampling方法都没能提升模型质量,而在模型表现上,Random
Under-sampling优于SMOTEENN,SMOTEENN优于SMOTE。

  4.技术完结比较混乱:那其实是1个卓殊首要的缘由啦~,获取科学的消息并举办NLP操作,往往须求通过以下流程:人工浏览网页鲜明稳定可信赖的音信源→设计爬虫达成有效音讯的取得→设计消息裁剪(填充)方案以应对区别长短的消息→人工标注信息的正/负性(也可以用当日股票价格涨跌来标注)→设计互联网模型→磨炼及表明模型。在那之中的每一步都不行麻烦耗费时间,而且对于个股来说,并不是天天都会有音信出现。

特征归一化与独热编码

之前有说到,数据差异级也许会对算法的学习效果有震慑,所以陶冶模型从前,特征归一化(scaling)是二个值得尝试的步子。

此外,不少模型都不可能很好地处理项目变量(categorical
variable)。若是简单地把项目变量用整数表示(比如在性别变量中,用1意味着男性,2意味女性),则大概使得算法将品种变量视作interval变量,从而发生bias。所以在建立模型在此以前,须求处理项目变量。3个常用的格局是独热编码(one-hot
encoding)。

(顺带一提,作者用sklearn下的算法磨练模型的时候,category型数据足以直接输入,但XGBoost无法,不了然是算法本人能够处理category,依然sklearn在跑模型前会自动把category转换来int。)

在这一片段,作者构造了多少个差异的多寡集来磨练XGBoost模型:

  • 数值型变量归一化
  • 品类变量独热编码
  • 数值型变量归一化 + 体系变量独热编码

指标是为了看看特征归一化和独热编码对XGBoost有哪些影响。

对了,由于上一节中,sampling之后的多少并没能升高模型品质,所以这有个别本人依旧用原数据集来做。

结果如下:

二种处境下的ROC曲线小编就不放了,因为都和benchmark模型的几近(曲线基本重合),表明XGBoost照旧比较稳重的,嗯……

数据 AUC
原数据集 0.8044
数值型变量归一化 0.8024
类别变量独热编码 0.8047
数值型变量归一化 + 类别变量独热编码 0.8048

上表是原本数据集下和上述两种情景下相应的XGBoost模型在测试集上的AUC值。

能够见到,五种景况下的XGBoost模型的AUC值很类似,硬要说的话,归一化和独热编码都做之后的模子表现最好,且综合比较,独热编码比归一化的震慑要大。

 

别的算法

除外XGBoost,分类难点中还有众多算法能够挑选。笔者不难跑了须臾间LightGBM,
GBDT,Random Forest和Logistic Regression。

和XGBoost一样,笔者并从未很密切地调参,一来是小编还不熟习sklearn,二来是自己的论战功底还不够以至于心有余而力不足,三来是想看六柱预测似意况下(都尚未好看调参的情事下=。=)哪种算法表现更好。

除此以外,因为懒,这一部分本人用的原本数据集(即没做归一化也没做独热编码)。

结果

这一部分的ROC曲线笔者也不放了,因为依然都和benchmark模型的大都,曲线基本重合。

AUC值如下。

算法 AUC
XGBoost 0.8044
LightGBM 0.8033
GBDT 0.8071
Random Forest 0.8029
Logistic Regression 0.7842

能够看来LGL450的呈现最差,GBDT表现最好,别的的大半。

值得一提的是,在陶冶功能上,LightGBM最快,XGBoost其次,GBDT最慢。

LightGBM是微软2018年颁发的一个GBM立异算法,号称比XGBoost更神速更省心。亲自试过之后的感觉到是:名不虚传。笔者推测在可预知的快捷的将来,LightGBM会取代XGBoost的地方,毕竟在功效大约的前提下,前者比后者要快,占的内部存储器也更少。

但有一点不得不提,LightGBM的参数卓殊多(大致是XGBoost的两倍啊),学习窍门照旧相比高的。(小编打算回头再完美研究一下那些参数。)

最后想再回过头来说一下Logistic
Regression。作为广义线性模型的一员,L奇骏还是比较神奇的,即便很多时候L科雷傲都不是最优模型,但在多少品质不高的状态下,L路虎极光的稳健性就显示出来了。

跑完上述模型之后,突然就想看看归一化和独热编码对LEscort的影响:

www.30064.com 61

005 – ROC curve of Logistic Regression

能够看出,无论是单独做归一化,单独做独热编码,照旧多头都做,模型的ROC曲线都大约且质量都比benchmark模型要差那么一点。但值得注意的是,单就LR来说,做不做归一化、独热编码,影响也许相比较大的。

别的,本次作者没做WoE编码,现在有时间想把这一块补上,很感叹结合了WoE之后的LKoleos在品质上会不会有显著的增强:)

  上边说了那般多,还一直不起头对自家这几个预测模型进行介绍,上边开头进入正题。在控制免去消息面包车型大巴考量之后,小编起来思索股票价格上涨或下落的本质,笔者认为股票价格就是资金博弈结果的反映。这次建立的展望模型,朴素的想法是透过深度学习模型来侦查破案庄家的操作原理,对拉升、砸盘的情况展开前瞻。为了达成以下指标,笔者主宰选取以下多少个特色来营造互联网模型,即:

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

接纳那八特性情来对股票的上涨或下落景况以及财力的流淌状态树立适用的模型。此外,其余的目的类似MACD、均线等也是因此有个别基础数据的运算得出,在创设立模型型时并从未将其纳入考虑衡量范围。

 

一.源数码及其预处理

  通过某股票交易软件,小编获得的源数据约有20来个天性,包含:上涨幅度、现价、上涨或下降、买入、卖价、成交量等等。为了取得地点所述的八种特色,挑选出上涨或下跌幅、大单净流入、中单净流入、小单净流入、换手率那多个特点,并盘算最高增长幅度、最高跌幅多个天性。通过下列公式总结得到。

www.30064.com 62

通过处理的股票特征数据存款和储蓄在 股票名.csv文件中,类似下图:

 www.30064.com 63

图中的特征顺序为:日期,大单净流入,中单净流入,小单净流入,上涨或下跌幅,最高增幅,最高跌幅,换手率,股票价格。股票价格在此处的用处是东拼西凑锻练样本输出时,计算多日的总上涨或下跌幅。

注:在对源数据实行处理的时候,平常会境遇空值难点:即,有些特征值为0的时候,系统提交的源数据为”-”或”“。需求展开相当规处理。(日常遇见新上市股票第二天的上涨或下下跌幅度为空,或某交易日大单净流入为空。)

1     if fin_temp.ix[day,12]=='-' or  fin_temp.ix[day,12]=='':  # 新股的涨跌幅一栏会出现'','-',需要特殊处理
2         raise_value = 0.0
3     else:
4         raise_value = float(fin_temp.ix[day,12])

 

 二.磨炼样本拼接

        
首先设置1个滑行窗口,这一次试验中校滑动窗口设置为四十四个交易日。每一个磨炼样本由五十多个接二连三的交易日组成,每个交易日的数量包蕴上述的三个特征,即1个50*7的矩阵,而多个样本的输出则是三个交易日之后的收盘价相比较后天(即样本的输入中最终三个交易日)收盘价的上涨或下下跌幅度,设置其上限为0.3,下限为-0.3(当然,三番五次多个涨停板的拉长率会超过0.3,那里将其统一视作0.3)。之所以选用多少个交易日之后的上涨或下跌幅作为磨炼样本的出口,是因为笔者国股票商场是T+1操作规则,当日选购不可卖出,预测的多少靠后有些可留有操作空间;再有就是一天的拉升/砸盘偶然性太大,不易预测,对有个别长期一点的气象进行预测有着更高的平静。

  归一化相关工作:因为神经网络激活函数的限制,供给在磨练前将数据映射到0~1区间。此次考试中,对近两年的数额,获取其各项特色的最大值与小小值。设置归一化与函数,在样本拼接的还要将数据进行归一化。

样本 输入的归一化:

 1 def normalize_oneday(stockN,fdata,day):
 2     max_min = list(max_min_list[stockN])
 3     in_1 = (fdata.ix[day,1]-max_min[1])/(max_min[0]-max_min[1])
 4     in_2 = (fdata.ix[day,2]-max_min[3])/(max_min[2]-max_min[3])
 5     in_3 = (fdata.ix[day,3]-max_min[5])/(max_min[4]-max_min[5])
 6     in_4 = (fdata.ix[day,4]-max_min[7])/(max_min[6]-max_min[7])
 7     in_5 = (fdata.ix[day,5]-max_min[9])/(max_min[8]-max_min[9])
 8     in_6 = (fdata.ix[day,6]-max_min[11])/(max_min[10]-max_min[11])
 9     in_7 = (fdata.ix[day,7]-max_min[13])/(max_min[12]-max_min[13])
10     return [in_1,in_2,in_3,in_4,in_5,in_6,in_7]

样本 输出的归一化与反归一化:

def normalize_raise(volume):
    norm_value = (volume+0.3)/0.6
    if norm_value>1:
        norm_value = 1   #涨跌幅超过30%的都定义为 1或0
    elif norm_value<0:
        norm_value = 0
    return norm_value
def denormalize_raise(value):
    volume = value*0.6-0.3
    return volume

         设置滑动窗口sample_window =
[],每一回遍历一行特征数据,归一化后插入窗口末尾,当窗口大立夏50时,计算3天后上涨或下下跌幅度,拼接出2个磨练样本,并将sample_window中第三个交易日的值弹出。

1 normalized_daily_sample = normalize_oneday(stockN_list_str[i],fin_temp,day)
2 # TODO 给样本插入该日数据
3 sample_window.append(normalized_daily_sample)   #存入一个样本list,特征数为7,全部归一化完毕
4 if len(sample_window)==window_len:  # 窗口大小满50
5     #TODO 需要对涨幅进行归一化 暂定 30% TODO
6     raise_3days = normalize_raise(float(fin_temp.ix[day+3,8])/float(fin_temp.ix[day,8])-1.0)
7     samples.append([sample_window,raise_3days])
8     sample_window = sample_window[1:]

遍历完全部数据行后,获得数百个磨练样本。并将演习样本转存为numpy.array格式以利于磨炼。

 注:跳点难题,具体分为除权(涨跌幅当先百分之十)与停盘(相邻交易日间隔当先10天)。对于跳点难题,大家判断其是还是不是产生,一旦产生跳点,就清空sample_window,从下2个交易日重新起首计算样本输入,以杜绝样本输入中有跳点数据。

1 # 间隔日期大于10天,即day+3大于12天,判断为有停盘,不连续,或者涨跌幅异常(超过10.5%),不能作为训练样本序列, 
2 if int(diff/(24*3600))>12 or abs(raise_value)>10.5:  
3     sample_window = []

 

三.搭建立模型型

        
那里运用keras深度学习框架对模型进行神速搭建。建立Sequential模型,向其中添加LSTM层,设定Dropout为0.2,参加Dense层将其维度聚合为1,激活函数使用relu,损失函数定为交叉熵函数。从前也应用过古板的sigmoid作为激活函数,但经试验感觉作用不如relu。

1 model = Sequential()
2 model.add(LSTM(128, input_shape=(window_len,7), return_sequences=False))  # TODO: input_shape=(timesteps ,data_dim)
3 model.add(Dropout(0.2))
4 model.add(Dense(1))
5 model.add(Activation('relu'))
6 model.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])

  模型搭建完成,使用此前获得的数百个磨炼样本展开练习,并保留模型。

1 hist = model.fit(trainX,trainY,batch_size=1,epochs=50)
2 score = model.evaluate(trainX, trainY, batch_size=10)
3 if os.path.exists('./model/'+file_name[:-5]):
4     model.save('./model/'+file_name[:-5]+'/model_%s_%s.h5'%(window_len,date))  # HDF5 保存模型
5 else:
6     os.mkdir('./model/'+file_name[:-5])
7     model.save('./model/'+file_name[:-5]+'/model_%s_%s.h5'%(window_len,date)) 

 

四.效益呈现

  最初的时候,笔者对具备的股票的陶冶样本堆叠到一道,练习出二个大模型(貌似当时有9万五个锻练样本,整整编操练练了一天=,=),之后对每一个股票都开始展览前瞻,企图找出今天增长幅度最高的前5支股票。后来意识根本做不到……每支股票的操作原理都不雷同,使用单个模型不可能有效的把握个股的起降趋势。

  之后,小编单独选了中华软件这些股票(这些票看起来像庄家主导的那种),对它独立开始展览解析。使用了一年半的交易数额作为演习集,共有2九十四个磨练样本,练习1叁21个epoch。最后磨练出模型对测试集中的五20个测试样本进行求证。预测误差如下图。

 www.30064.com 64

 

当中前叁拾五个是操练集中的样书,大家选择其输入部分举行预测,发现预测结果贴合1/10环扣一环;后五二十个是大家测试集的样书,作者对其预测效果依然相比较知足的,大跌、大涨基本都有预计到,除了第⑥7到第9二十一个点那一波大跌预测的不佳。随后小编动用模型进行效仿交易,设定起首开销一万元,在预计1日后会上升时选购,预测四天后会下落时卖出,均以收盘价为交易价格,买入时扣除13分之2.5的回扣。收益曲线如下,桔红线条代表按模型进行交易的收益,紫褐线条代表直接拥有股票的低收入。

www.30064.com 65

  能够看看,模型的揣测效果如故不错的。尤其是发端的20八个点,能够相比规范的避开一波回调下落。

  但笔者也领略,对模型举办表达的样本数量如故太少,又过了二个月,在附加收集了二十一个交易日的数码之后,小编又对该样本进行了测试。

展望误差:

 www.30064.com 66

由上海教室能够见到,尾数贰11个交易日的这一波大幅度面,模型并不曾能够预测到。

收入曲线:

 www.30064.com 67

  从上海体育地方能够看到,在鲜黄方框圈出来的地点,模型多次预测会有一波上涨幅度,但紧跟着又及时预测股票价格要跌,对股票进行了抛售,错过了这四回大涨的机会;在驼灰方框圈出的地方,模型五回在极限做出了精确的预测,精准抛售,躲过五次大跌。

 

经过股票数量的验证,使用LSTM-OdysseyNN来对股票进行预测具有一定的趋向,但效果不好(就算效果好的话笔者猜度也不会享受到网上,本人闷声发大财啦,哈哈~~~)。

 

[1]R. Akita, A. Yoshihara, T. Matsubara and K. Uehara, “Deep learning
for stock prediction using numerical and textual information,” 2016
IEEE/ACIS 15th International Conference on Computer and Information
Science (ICIS)
, Okayama, 2016, pp. 1-6.     
()

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图