阅读 703

LSTM 股票市场预测入门

作者:宋彤彤

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

1. LSTM 神经元

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

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

关注下面的标签,发现更多相似文章
评论