利用CNN对股票「图片」进行涨跌分类——一次尝试

摘要:本文尝试用CNN对股票图片进行了一个涨跌分类,并在文末附上实现代码,为大家提供一个新的思路,大家可以直接点击文末链接,前往BigQuant人工智能量化投资平台直接进行实现。

首先解释一下标题:

  • CNN卷积神经网络(Convolutional Neural Network), 在图像处理方面有出色表现,不是被川普怒怼的那个新闻网站;
  • 股票涨跌:大家都懂的,呵呵;
  • 股票图片:既然使用CNN,那么如果输入数据是股票某个周期的K线图片就太好了。当然,本文中使用的图片并不是在看盘软件上一张一张截下来的,而是利用OHLC数据“画”出来的;
  • 尝试:这个词委婉一点说就是“一个很好的想法",比较直白的说法是“没啥效果T_T”。

进入正题:
首先是画出图片。本文目前是仿照柱线图画的。

大致的想法是:

  1. 对每个样本,将32time_steps×4features(OHLC)数据归一化处理,即所有取值均在[0,1]之间;
  2. 构建一个128×128像素的全0数组,将[0,1]区间等分为128份,分到每列的128个像素点上;
  3. 然后使用每四列构建一根K线(前三列画柱状线,第四列作为间隔行):第一列描绘开盘价,开盘价与该列的哪个像素点最近,那么这个像素点取值就由0变为1;第二列描绘高低价区间,将 最高价至 最低价 范围内的像素点取值由0变为1;第三列描绘收盘价,收盘价与该列的哪个像素点最近,那么这个像素点取值就由0变为1。

这样每个样本就构建了一张由32根K线组成,类似柱线图的“图片”,下面是一个样本画的一张图(为了便于观看,将0替换成空格,将1替换成圆点):

其实还蛮像柱线图的。

测试阶段:

  • 原始数据:最终选择的数据是100只2005年以前上市的股票。1只股票数据太少,全部股票数据又太多,所以 股票三千,我只取一百;“上市时间前于2005年”这个条件 主要考虑在每只股票上取样数量不会太少。
  • 生成样本:每只股票每32根K线生成一个样本,每隔8根K线取一次样。然后按照上述作图方法将其变成图片。标签:若未来五日收益为正,标签为[1,0],否则,标签为[0,1]。15年1月1日之前数据用作train和evaluate,之后数据用作test。
  • 构建模型:本文所用模型共5层,先后顺序为 卷积层-池化层-卷积层-池化层-全连接层,中间还夹杂了两个Dropout和一个Flatten,用来防止过拟合和一维化数据,不过由于他们是无权重的,所以没将他们算作一层。

预测效果

在train和evaluate阶段,看起来还是不错的:

但是在test阶段:

第一个值是loss,第二个值是准确率,不要看反。。。呵呵

听说有一种很厉害的操作——去除label不明显的样本——可能会提高模型效果。所以本文又对训练样本进行了一次筛选,只保留了未来五日收益在最前30%和最后30%的样本。然后input到模型做训练。最终test集上效果:

有(mei)所(sha)改(xiao)善(guo)!

问题分析

目前发现的一个问题:一幅图中被标记的像素点太少了。下面两张图为train-evaluate样本和test样本中值为1的像素点占总像素点(128×128=16384)比重的分布。

值为1的像素点占总像素点比重平均不到5%,最大的比重也未超过10%。这说明在模型训练阶段有些像素点对应的weights仅仅被训练了很少的次数甚至未经训练,这影响了模型在test数据上的表现。之后可能会针对这一问题做一些改进,以增加每张图值为1的像素点占总像素点比例

代码部分: 

利用CNN对股票“图片”进行涨跌分类

本文由BigQuant人工智能量化投资平台原创推出,版权归BigQuant所有,转载请注明出处。 

宽邦科技
宽邦科技

提供金融行业人工智能平台和服务解决方案,研发了全国首个人工智能量化投资平台BigQuant,拥有全栈人工智能平台和大规模机器学习和深度学习框架与算法,为券商、银行、保险、资管等金融机构以及更多企业提供AI技术方案和业务解决方案,实现机构及企业的AI转型和升级。

工程股票卷积神经网络
6
相关数据
池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

Dropout技术

神经网络训练中防止过拟合的一种技术

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

过拟合技术

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

图像处理技术

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

推荐文章
暂无评论
暂无评论~