当前位置:首页> AI教程> MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

释放双眼,带上耳机,听听看~!
本文介绍了基于长短期记忆网络(LSTM)的SP500股票价格预测方法,以及相关的数据分析和可视化实战。文章探讨了股票预测的研究背景、现状和意义,以及LSTM在股票预测中的应用。

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

摘要

近些年,随着计算机技术的不断发展,神经网络在预测方面的应用愈加广泛,尤其是长短期记忆人工神经网络(Long Short-Term Memory,LSTM)在各领域、各学科都有应用。它是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,非常适合处理长周期时间序列预测问题,并且预测速度快,准确度高。因此LSTM预测方法被广泛应用在天气预报、股票预测、行为预测等众多领域。基于这些优点,本文采用LSTM建立预测模型,根据美国标准普尔500股票指数的历史收盘价来预测未来收盘价的变化趋势。

关键词:LSTM长短期记忆人工神经网络,时间序列分析,股票预测

第一章 前言

1.1 研究背景

股票市场具有高收益与高风险并存的特性,预测股市走势一直被普通股民和投资机构所关注。股票市场是一个很复杂的动态系统,受多方面因素的影响,例如国家金融政策的调整、公司内部结构的调整以及媒体舆论的渲染。针对股票预测,人们在长期实践和研究的基础上总结出一套股票预测方法,并进行了基本的统计分析,但这种传统的股票预测方法很难准确地揭示股票的变化规律。金融领域一直是机器学习算法应用较为活跃的领域,由于新的算法可能会给金融领域带来显著的经济利益,在人工智能和机器学习不断发展的背景下,金融领域的机器学习以及深度学习应用也得到了人们的关注。所以本文使用长短期记忆人工神经网络(LSTM),一种在时间序列分析中有较好效果的深度学习模型,对美国标准普尔500股票指数的历史数据进行分析以及预测,试图探寻股票趋势之间的变化规律,并对股票市场的预测效果进行探索,帮助股民以及投资机构能更好地预测股市的走势。

1.2 研究现状

随着股票市场壮大,时间序列分析相应迎来崛起,时间序列的基本思想是利用序列变量与时间的关系建立统计模型来做预测。迄今为止,时间序列方法成果颇丰,相应诞生ARIMA差分整合移动自回归模型算法、滑动平均、指数平滑法、简单移动平均法、加权移动平均法、自回归滑动平均、广义自回归条件异方差以及蒙特卡洛模拟等时间序列模型。由于股票数据这种金融时间序列对象受到多种因素的影响,往往是非平稳的、非线性的以及高噪声的,不同于以往时间序列方法只涉及时间这个单方面影响因素,所以传统时间序列方法往往不适合股票数据,预测性能不够理想。而随着互联网与计算机技术的突破,数据存储技术的发展,迎来大数据时代,人们从电脑端和手机端不断地接触到大量的数据以及信息,对于庞大的数据,如何从中获得有用且人类想要的信息变为研究重点。由于股票市场的时效性,每天大批量数据的产生,迄今为止,股票市场已经累积了足量的历史数据,所以我们可以很好地利用以往的历史数据,通过分析这些数据,探寻其中的股票走势的规律 ,但是股票的价格受到大量因素的影响,这使得股价的预测不是那么容易,但是,随着机器学习技术的发展,使得从海量信息中挖掘出来对股票预测极其重要的信息有了一定的可能性,所以股票预测这项工作依然是具有极高的价值和意义的。

1.3 研究意义

在股票买卖过程中,如果建立了金融预测模型,我们将历史数据灌入,学习到参数,从而对未来的股票价格进行预测。假如模型的预测价格高于当天的收盘价格,即模型告诉我们未来股票价格可能出现上涨,则我们可以继续持仓这只股票以期获得后续更高的投资收益;另外,情况相反时,我们可以根据模型的建议采取相反的举措与动作。所以建立一个准确且高效的股票预测模型对于投资者更好的收益显得非常有意义。当然,找到这种股票价格上涨下跌趋势的规律对于国家宏观调控和企业的经营管理也是有很高的现实价值的。股票预测研究不仅仅聚焦在技术上,技术上的突破固然重要,但是在数据的处理以及特征工程上的精益求精上往往能给股票预测模型精度带来相当明显的提升。所以说股票预测这项工作依然是具有极高的价值和意义的,股票市场的价格波动研究不仅有重要的学术意义,而且有重要的实际意义。这能帮助我们更好的理解和把握股票市场的运行规律,以及探寻其对真实经济的影响机制与影响程度,能帮助我们在股票价格剧烈波动情况下选择并实施有效的货币政策,这有助于减轻和消除来自股票市场的不稳定因素,从而进一步提高各国宏观经济的运行质量。

第二章 基本模型论述

2.1 LSTM模型的理论概述

长短期记忆神经网络(long shortterm memory networks,LSTM)是一种时间递归神经网络,是循环神经网络的一种变体,适合处理和预测时间序列中间隔和延迟相对较长的重要事件,这一技术特征与股票预测问题有着很高的契合度,将普通循环网络中的隐藏节点设计为自循环形式,记忆单元维持一个误差流,进而可以记忆长时期的有效信息,避免梯度爆炸和梯度消失。LSTM 在文本预测、情感分析和股票预测等领域都有着非常优异的表现,结合股票特性将基础数据转换为相关的技术指标。它还改善了RNN中存在的长期依赖问题;LSTM的表现通常比时间递归神经网络及隐马尔科夫模型(HMM)更好;作为非线性模型,LSTM可作为复杂的非线性单元用于构造更大型深度神经网络。但是仍然存在缺陷,就是RNN的梯度问题在LSTM及其变种里面得到了一定程度的解决,但还是不够。它可以处理100个量级的序列,而对于1000个量级,或者更长的序列则依然会显得很棘手;另一个缺点是每一个LSTM的cell里面都意味着有4个全连接层(MLP),如果LSTM的时间跨度很大,并且网络又很深,这个计算量会很大且很耗时。

2.2 LSTM的三个主要结构

2.2.1 遗忘门

在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为遗忘门层完成

2.2.2 输入门

输入门是决定让多少新的信息加入到cell状态中来。实现这个需要包括两个 步骤:首先,需要sigmoid层决定哪些信息需要更新;tanh 层生成一个向量,也就是备选的用来更新的内容。在下一步,我们把这两部分联合起来,对cell的状态进行一个更新。

2.2.3 输出门

最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,sigmoid层来确定细胞状态的哪个部分将被输出。接着,细胞通过 tanh 进行处理状态并将它和sigmoid层的输出相乘,最终会输出我们确定输出的那部分内容。

2.3 改进模型

LSTM模型有非常强大的功能,本文只是使用了相对简单的单步单特征的预测,更深入研究的话可以发现,LSTM还可以进行多步单特征,单步多特征,多步多特征等更强大的预测工作。除此之外,模型进行改进的地方还可以从模型的网络结构,训练模型的选项,网络层的激活函数等进行调整改进。

第三章 数据处理

3.1 数据读取与可视化展示

首先从包含 2010 年 1月1日至 2021 年 12 月30日标准普尔 500 股票指数的开盘价、最高价、最低价、收盘价的美国标准普尔500指数历史数据.xls的excel文件根据时间拆分成2021年6月1日之前的训练数据TrainData.xls,2021年6月1日至12月30日的检验数据InspectData.xls,以及2022年1月到3月30日的预测数据TestData.xls。数据格式大致如图所示:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

将三个excel文件的NumData数值型数据的第一列的所有元素作为收盘价的数据,把TestData文本型数据的第一列的日期数据转换成日期类型数据,为了后续读取数据的方便,将日期以及收盘价保存到各自的mat文件中。

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

然后通过读取mat文件的数据,以日期作为横轴数据,收盘价作为纵轴数据对三个文件的整体数据做一个大致的可视化分析。训练数据,检验数据,预测数据的运行结果分别如下:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

从运行结果来看,SP500的收盘价趋势除了中间几次断崖式暴跌之外,大致上是呈现上涨的趋势,具体放大细看的话不难发现,股票的收盘价整体上呈现一个波动的上涨趋势。

3.2 数据预处理

3.2.1 数据分区

紧接着,在开始预测之前,我们需要对数据进行一定的处理,首先需要把SP500的收盘价数据转换成(1, numel(SP500)) 形状的行数据,然后加载mat文件,用不同的变量保存训练,检验,预测的数据。

3.2.2 标准化数据

为了获得较好的拟合效果并防止训练发散,首先通过mean方法预计std方法分别获取训练数据的均值以及标准差,将训练数据通过(数据-均值)/标准差的形式标准化为具有零均值和单位方差的标准化训练数据。在预测时,我们将使用与训练数据相同的参数来标准化测试数据。

3.2.3 准备预测变量以及响应变量

要预测序列在将来时间步的值,需要将响应变量指定为将值移位一个steptime时间步的训练序列。也就是说,在输入序列的每个时间步,LSTM 网络都学习预测下一个时间步的值。预测变量是没有最终时间步的训练序列。

3.3 训练模型

3.3.1 定义 LSTM 网络结构以及训练选项

通过matlab提供的构建深度学习网络的设计器,创建如图所示的LSTM 回归网络。

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

需要注意的是,我们需要手动修改一下其中网络层的一些参数,由于我们是单步预测,所以序列输入层的输入大小应该是1,将LSTM网络设置成250个神经元,将状态激活函数设置为tanh,将激活门函数设置为sigmoid,将输出模式设置成sequence。将遗忘层的遗忘率设置成45%,表示将有45%的概率将神经元暂时从网络中丢弃,以此来防止过拟合的情况发生。然后再设置一个全连接层,最后以回归输出的形式将数据进行输出。

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

紧接着,我们需要指定训练的选项,这里将求解器设置为 ‘adam’ 并进行 350 轮训练。为防止梯度爆炸,将梯度阈值设置为 1。指定初始学习率为 0. 002,为防止网络震荡不收敛,在 150 轮训练后通过乘以因子 0.2 来降低学习率。

3.3.2 训练LSTM网络

我们需要使用 trainNetwork 以指定的训练选项训练 LSTM 网络,并传入预测变量以及响应变量。
训练的过程如图所示,可以看到RMSE均方根误差与Loss损失函数在刚开始下降的比较快,到后来Loss损失函数就趋近于0,RMSE均方根误差就趋于0.1,可以从这两个指标看出训练的效果还是不错的

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

3.3.3 对检验数据集进行标准化处理

我们将使用训练数据的均值以及标准差对验证数据进行Z-Score标准化处理,然后再取其(1,end-1)的数据作为预测的输入数据

3.4 模型预测

3.4.1 预测将来的时间步

首先我们需要初始化网络状态,并先对训练数据 XTrain 进行预测,预测将来多个时间步的值,我们需要使用 predictAndUpdateState 函数一次预测一个时间步,并在每次预测时更新网络状态,对于每次预测,我们使用前一次的真实值作为函数的输入。接下来,使用训练响应的最后一个时间步进行第一次预测。循环其余预测并将前一次预测输入到 predictAndUpdateState。由于我们的是单步预测,所以我们将使用CPU的环境进行预测,并将 predictAndUpdateState 的ExecutionEnvironment选项设置为 cpu

3.4.2 反标准化

由于之前传入的数据是使用了标准化处理的,所以输出的预测值也是经过标准化后的数据,所以最终我们需要将预测的结果值反标准化,最终转换为实际的预测值。

3.4.3 计算误差指标

我们需要根据去标准化的预测值去计算误差指标。对于 RMSE均方根误差,首先我们需要先获取到预测样本的真实值,然后对样本点的测量值和真实值求差,求平方后做平均运算,最后取根植,获取到RMSE均方根误差。对于MAE平均绝对误差,我们需要把预测值与真实值做差,然后取绝对值后做平均处理,最后获取到MAE平均绝对误差。对于MAPE平均绝对百分比误差,我们需要把预测值与真实值做差,结果除以真实值,取绝对值后做平均处理,最后获取到MAPE平均绝对百分比误差。

计算所得的RMSE均方根误差结果如图所示:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

计算所得的MAE平均绝对误差结果如图所示:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

计算所得的MAPE平均绝对百分比误差结果如图所示:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

3.4.4 对检验数据进行可视化展示

对检验数据的可视化展示,由于训练数据和检验数据是相连的,所以首先将训练数据和检验数据的预测值联合展示。
运行结果如下:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

紧接着,将预测值与检验数据进行比较,绘制出如下的比较折线图和误差棉棒图,这里仅把RMSE均方根误差作为误差的展示项
运行结果如下图所示:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

如上的分析以及可视化结果来看,训练的模型对检验数据的拟合程度还是相当不错的,在大致的趋势上可以看到预测的效果与实际的效果是接近一致的,从误差棉棒图中也可以看出来误差的范围大概在(-180,100)之间,所以说整体的拟合效果是不错的。

3.4.5 标准化预测数据

用检验数据检验了模型拟合效果后,接下来应该对预测数据做同样的标准化处理,然后将标准化过后的数据,作为输入数据输入到训练好的模型中进行预测。

3.4.6 预测将来的时间步

紧接着就需要根据XTest预测下一个时间步的值,每次预测时都需要更新网络状态,由于数据量不大,所以运行环境选择cpu即可,最后循环 (预测数据长度-1)次,根据XTest的数据,预测出YTest_pred也就是2-end之间的数据

3.4.7 反标准化预测数据并获取预测数据的真实值

由于之前的输入数据是经过标准化的,所以获得的预测数据也是标准化过后的数据,所以需要将预测所得的值进行反标准化处理,转换成实际的预测值。并获取好2-end的真实值,以方便后续的比较处理

3.4.8 对预测数据进行可视化展示

首先需要将训练数据和检验数据拼接起来,绘制第一个图形,然后在此基础上,将预测的值用红色的折线绘制出来,并定义好横纵坐标,图例的显示设置。
可视化结果如图所示:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

紧接着需要将预测数据单独拿出来与实际数据做一个对比,绘制出预测-实际的折线图,并绘制二者之间的误差棉棒图,这里以RMSE作为表现误差项的指标。
可视化结果如图所示:

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

通过以上的预测分析可以看到,预测值与真实值之间存在一定的误差,误差范围大概在[-200,200]之间,但是大致趋势上还是吻合的。猜测误差较大的原因就是这个时间段内,股市的波动情况太大,导致根据前向的趋势预测后向的数据的精度有一定程度的下降,但是从整体上来看我们的预测效果还是不错的。

3.5 构建预测误差表

通过以上的预测结果,有表展示:

时间 真实值 模型预测值 预测误差
2022年1月3日 4,796.56 4,796.56 0
2022年1月4日 4,793.54 4792.7681 -0.77193
2022年1月5日 4,700.58 4790.5269 89.94685
2022年1月6日 4,696.05 4756.9443 60.89434
2022年1月7日 4,677.02 4718.5068 41.48684
2022年1月10日 4,670.29 4685.3433 15.05326
2022年1月11日 4,713.07 4664.2129 -48.8571
2022年1月12日 4,726.35 4668.9238 -57.4262
2022年1月13日 4,659.02 4688.3735 29.35354
2022年1月14日 4,662.85 4687.6782 24.82822
2022年1月18日 4,577.34 4677.5229 100.183
2022年1月19日 4,532.76 4639.5654 106.8054
2022年1月20日 4,482.73 4586.6387 103.9087
2022年1月21日 4,397.93 4528.5640 130.634
2022年1月24日 4,410.13 4461.3511 51.22107
2022年1月25日 4,356.45 4415.1621 58.71211
2022年1月26日 4,349.93 4377.7480 27.81805
2022年1月27日 4,326.50 4353.9966 27.49658
2022年1月28日 4,431.85 4336.3853 -95.4647
2022年1月31日 4,515.55 4357.7056 -157.844
2022年2月1日 4,546.54 4415.2383 -131.302
2022年2月2日 4,589.32 4480.5474 -108.773
2022年2月3日 4,477.44 4540.4761 63.03608
2022年2月4日 4,500.54 4544.5249 43.9849
2022年2月7日 4,483.87 4526.2266 42.35656
2022年2月8日 4,521.54 4498.4497 -23.0903
2022年2月9日 4,587.18 4487.8281 -99.3519
2022年2月10日 4,504.06 4510.2500 6.19
2022年2月11日 4,418.64 4517.8618 99.22182
2022年2月14日 4,401.67 4489.9775 88.30754
2022年2月15日 4,471.07 4447.8252 -23.2448
2022年2月16日 4,475.01 4433.0283 -41.9817
2022年2月17日 4,380.26 4438.2500 57.99
2022年2月18日 4,348.87 4423.5049 74.63488
2022年2月22日 4,304.74 4393.5366 88.79662
2022年2月23日 4,225.50 4351.6133 126.1133
2022年2月24日 4,288.70 4293.0605 4.360547
2022年2月25日 4,384.62 4263.9351 -120.685
2022年2月28日 4,373.79 4287.3765 -86.4135
2022年3月1日 4,306.26 4326.0654 19.80543
2022年3月2日 4,386.54 4338.9795 -47.5605
2022年3月3日 4,363.49 4357.2905 -6.19947
2022年3月4日 4,328.87 4364.7124 35.8424
2022年3月7日 4,201.09 4354.0659 152.9759
2022年3月8日 4,170.62 4299.7788 129.1588
2022年3月9日 4,277.88 4232.2261 -45.6539
2022年3月10日 4,259.52 4212.3696 -47.1504
2022年3月11日 4,204.31 4218.1191 13.80914
2022年3月14日 4,173.11 4218.6426 45.53258
2022年3月15日 4,262.45 4206.0918 -56.3582
2022年3月16日 4,357.95 4216.2656 -141.684
2022年3月17日 4,411.67 4262.1948 -149.475
2022年3月18日 4,463.09 4327.2256 -135.864
2022年3月21日 4,461.18 4396.1255 -65.0545
2022年3月22日 4,511.61 4444.1680 -67.442
2022年3月23日 4,456.23 4481.2764 25.04637
2022年3月24日 4,520.16 4485.1626 -34.9974
2022年3月25日 4,543.04 4491.3242 -51.7158
2022年3月28日 4,575.52 4504.8560 -70.664
2022年3月29日 4,631.60 4528.9009 -102.699
2022年3月30日 4,602.45 4568.1245 -34.3255

第四章 结论

刚开始对时序数据的分析还是一个很懵懂的状态,然后通过查阅资料,知道了时序分析是以分析时间序列的发展过程、方向和趋势,预测将来时域可能达到的目标的方法。这运用了概率统计中时间序列分析原理和技术,利用时序系统的数据相关性,建立相应的数学模型,描述系统的时序状态,以达到预测未来的效果。而适合股票预测的方法有很多种,例如移动平均法、季节系数法、指数平滑法、自回归滑动平均模型(ARIMA)、随机森林等等,但是在查找资料的过程中发现,长短期记忆网络在时序数据的分析上有非常好的效果,传统的RNN在时序数据的分析中有较好的效果,之所以会有较好的预测效果是因为在 t时间点时会将 t-1时间点的隐节点作为当前时间点的输入,这样有效的原因是因为之前时间点的信息也用于计算当前时间点的内容,但是传统的RNN却存在长期依赖以及梯度消失或爆炸的问题,而LSTM的出现正是对RNN的一种补充,他能很好地利用”门机制”来控制特征的流通和损失,这使得它能解决RNN存在的问题并保留其优秀的时序分析的能力。经过先从python股票预测的LSTM的实现,再到matlab的编程实现,其中对LSTM的实现方法以及过程都经过了深入的理解,最终实现了基于LSTM模型的股票预测。

但是依旧存在一些的不足之处,比如在模型的优化上就无从下手,由于之前都是学习计算机视觉相关的图片识别类的深度学习课程,对于这类问题的提高精度和优化的方法更为擅长。因为是第一次接触时序数据的分析,所以在优化方面难免有些不足。除了影响股票价格的因素众多导致某一时间段的波动情况比较剧烈以外,模型本身还是有一些不足以及更大的优化空间的。所以在今后的学习中,我会努力学习并且深入研究深度学习中的神经网络在金融,大数据,统计分析等方面的运用,并且探寻能提高和优化算法的方法,以达到能更好、更高效地使用模型进行实际运用和操作的目的。

参考文献

[1] 张倩倩,林天华,祁旭阳,赵霞,基于机器学习的股票预测研究综述[J]. 河北省科学院学报,2020, 37(04):18-19.
[2] 隋金城.基于LSTM神经网络的股票预测研究[D].青岛科技大学,2020.
[3] 周阳.基于LSTM模型的上证综指价格预测研究[D].南京邮电大学,2019.

代码附录

1、数据预处理代码

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

2、数据可视化代码

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

3、加载数据集代码

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测
4、训练数据,检验数据,预测数据标准化代码

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测
5、定义LSTM回归网络与训练选项

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

6、初始化网络,对检验数据进行预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测
7、计算RMSE,MAE,MAPE三大误差指标

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

8、可视化预测结果及对比代码

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测
9、对预测数据进行预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

10、绘制预测数据的预测结果

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

家具风格识别技术研究及实现

2023-12-14 13:14:14

AI教程

线性回归的基本元素

2023-12-14 13:26:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索