LSTM 股票市场预测入门

做者:宋彤彤前端

相信不少人都会对股票市场数据的起起伏伏感到好奇,特别想知道他们将来的趋势会是怎样,最近看到一篇用 LSTM 作初步的股票市场预测的文章,在这里分享给你们。网络

1. LSTM 神经元

首先咱们来认识一下 LSTM 神经元:
长期困扰传统神经网络结构的一个基本问题是解释“信息”和“上下文”相互依赖的输入序列。这里的“信息”能够是句子中先前的单词以容许上下文预测下一个单词多是什么,或者它能够是序列的时间信息以容许上下文作基于时间的序列元素预测。
简而言之,传统的神经网络每次都会输入独立的数据向量,而且没有内存概念来帮助他们处理须要内存的任务。
解决这个问题的早期尝试是对网络中的神经元使用简单的反馈类型方法,其中输出被反馈到输入中以提供最后看到的输入的上下文。 这些被称为递归神经网络(RNN)。 虽然这些 RNN 在必定程度上起做用,但任何大规模使用 RNN 都会致使消失梯度的问题。这个问题致使 RNN 在大多数现实问题中都不适合,所以,须要找到另外一种解决上下文存储的方法。
这时长期短时间记忆(LSTM)神经网络就派上用场了。 与 RNN 神经元同样,LSTM 神经元在其管道中存储上下文,以容许解决顺序和时间问题,且没有影响其性能的消失梯度问题。
对于上下文,下面是 LSTM 神经元的典型内部工做图。 它由若干层和逐点操做组成,这些操做充当数据输入、输出和遗忘的门,为 LSTM ****单元状态提供信息。 这种单元状态是保持网络和输入的长期记忆和上下文的缘由。
app

lstm_cell.png

2. 几种预测方法

第一种是逐点预测,即咱们每次仅预测一个点,将此点画出来,而后使用刚预测的点的真实数据填补到下一个窗口数据再预测下一个点。
该方法作正弦波预测会呈现出这样的图像:
机器学习

sinwave_pointbypoint.png

第二种是完整序列预测,咱们只用训练数据的第一部分初始化一次训练窗口。而后模型预测下一个点,而后咱们像逐点预测同样移动窗口。不一样之处在于咱们使用 先前预测中预测的数据来预测。 在第二步中,这意味着只有一个数据点(最后一个点)来自先前的预测。 在第三个点的预测中,最后两个数据点未来自先前的预测,依此类推。 通过 50 次预测后,咱们的模型将彻底根据本身先前的预测进行预测。 这使咱们可使用该模型提早预测许多将来的时间点,但因为它预测的预测能够反过来基于预测,这将增长咱们预测的错误率。随着咱们对将来愈来愈多的预测,偏差幅度会随着先前预测中的偏差在用于将来预测时被愈来愈多地放大而增长。
该方法作正弦波预测会呈现这样的图像:
sinwave_full_seq.png

第三种是多序列预测,它是完整序列预测的混合,由于它仍然使用真实数据初始化测试窗口,预测下一个点,而后使用该预测点建立一个新窗口。 可是一旦它 到达输入窗口彻底由过去预测的点组成的状态,它就会中止,用 真实的数据重置窗口,而后再次启动该过程。 实质上,这给出了对数据的 多个趋势线预测,以便可以分析模型可以得到 将来动量趋势的程度。

3. 不那么简单的股票市场数据

咱们能够用逐点估计精确预测几百个正弦波步长。 但咱们并不能将此办法应用于股票市场,由于现实世界,并非那么简单。
与正弦波不一样,股票市场时间序列不是能够映射的任何特定静态函数。 描述股票市场时间序列运动的最佳属性是随机游走。 做为随机过程,真正的随机游走没有可预测的模式,所以尝试对其进行建模将毫无心义。 幸运的是,许多方面都在持续争论说股票市场不是一个纯粹的随机过程,这使咱们可以从理论上说明股票市场时间序列可能具备某种隐藏模式。 正是因为这些潜在的隐藏模式,LSTM 深度网络在股票市场的研究才有了意义。
股票市场的数据又涉及到开盘价,最高价,最低价,收盘价以及每日交易量。它是多维的。
若是仅用收盘价做为输入,作一维的模型预测,分别用上面的三种预测方法,咱们将获得如下结果:
逐点预测:
函数

sp500_pointbypoint.png

序列预测:
sp500_full.png

多序列预测:
sp500_multi.png

从上面的对比结果能够看出:用 逐点预测运行数据能够很是接近地匹配真实数据。 但这有点欺骗性。 由于预测线由单个的预测点组成,这些预测点基于的整个先前历史窗口都是真实数据。 所以,网络除了知道每一个下一个点不会离最后一点太远,并不须要太了解时间序列自己。 即便它预测了一个错误的点,再下一次预测也将考虑真实的历史而忽略不正确的预测,而后再次容许发生错误。虽然对于下一个价格点的精确预测这可能听起来并不乐观,但它确实有一些重要的用途,好比精确预测下一个价格的范围或应用于异常检测。
完整序列预测,彷佛是对这种类型的时间序列最没用的预测(至少是使用这些超参数训练的这个模型)。 咱们能够看到预测开始时有轻微波动,其中模型遵循着某种类型的动量,可是很快模型收敛到时间序列的某个均衡值。 对于预测股票价格走势,这可能看起来并无太多价值,但平均回归交易者可能会在认为该模型能够找到价格序列的平均值。
多序列预测, 网络彷佛正确地预测了绝大多数时间序列的趋势(和趋势幅度)。 虽然不完美,但它确实代表了 LSTM 深度神经网络在顺序和时间序列问题中的有用性。 经过仔细的超参数调整,确定能够实现更高的准确性。
接下来,我将使用两个输入维度来训练模型: 收盘价和交易量,结果以下:
sp500_multi_2d.png

能够看到两个输入维度可使输出预测变得更加细化。 预测趋势线彷佛更准确地预测即将到来的小幅下跌,不只是从一开始的主流趋势,趋势线的准确性彷佛也在这种状况下获得改善。

4. 总结

目前使用基础的 LSTM 存在一些局限性,特别是在使用金融时间序列时,该系列自己具备很难建模的非平稳特性(尽管在使用贝叶斯深度神经网络方法解决时间序列的非平稳性方面取得了进展)。一样对于一些应用,还发现基于 Attention 的神经网络机制的新进展已经超过 LSTM(而且LSTM 与这些基于 Attention 机制相结合已经超出了它们自身)。这里咱们提供该文章的项目地址和一些参考资料,感兴趣的同窗能够进一步探索。性能

项目源码地址:https://momodel.cn/explore/5d6b22c5c7e247a961bc8084?type=app
** 学习

5. 参考资料

博客:www.altumintelligence.com/articles/a/…
视频资料:www.youtube.com/watch?v=2np…
论文:LSTM,1997 www.bioinf.jku.at/publication…测试

关于咱们

Mo(网址:https://momodel.cn)是一个支持 Python 的人工智能在线建模平台,能帮助你快速开发、训练并部署模型。大数据


Mo 人工智能俱乐部 是由人工智能在线建模平台(网址:momodel.cn)的研发与产品团队发起、致力于下降人工智能开发与使用门槛的俱乐部。团队具有大数据处理分析、可视化与数据建模经验,已承担多领域智能项目,具有从底层到前端的全线设计开发能力。主要研究方向为大数据管理分析与人工智能技术,并以此来促进数据驱动的科学研究。

目前团队每两周(周六)在杭州举办线下沙龙,进行机器学习相关论文分享与学术交流。但愿能汇聚来自各行各业对人工智能感兴趣的朋友,不断交流共同成长,推进人工智能民主化、应用普及化。人工智能

image.png
相关文章
相关标签/搜索