1. 引言
自股票诞生以来,由于股票市场的高回报性,股票价格一直备受关注。研究者们希望通过科学的研究方法,对股票的价格走势进行预测。但由于股票市场受多方面因素的影响,其非线性、随机性的特点也给股票价格的预测带来了巨大的挑战。
传统的股票分析主要分为技术分析和价格趋势预测 [1] 。其中,技术分析主要通过股票的历史价格对证券市场的变化因素进行分析,通过股价、成交量等因素建立股价模型,使用模型及图表来把握市场的整体情况,从而对未来的价格趋势进行预测。价格趋势预测基于市场未来股息的贴现值。这种方法试图找到股票的基本价值,并确定股票的价格是否合理。价格过低的股票触发买入信号,价格过高的股票触发卖出信号,价格合理的股票触发持有信号。ARIMA [2] [3] 是价格趋势预测的重要方法,许多学者对基于ARIMA算法的股票价格预测进行了优化工作,如Zheng [4] ,Rangel-Gonzalez [5] ,宋刚 [6] ,丁文绢 [7] ,熊政 [8] ,徐幼恩 [9] ,陈登建 [10] 等。
随着机器学习、大数据等技术的发展,股票市场的海量数据引起了研究者们的关注。基于机器学习的方法,如神经网络 [11] [12] ,支持向量机 [13] 等方法在处理大数据时更具优越性,可充分发掘股票市场中的隐藏信息,解决了传统股票预测方法的局限性。基于机器学习的股票预测方法将股票市场中的大量历史数据结合机器学习算法进行建模并训练,通过训练好的模型对股票的未来价格走势及具体价格进行预测 [14] 。与传统方法相比,该方法可大幅度提高股票价格预测的准确率,具有重要的研究价值和现实意义。研究表明,基于机器学习的算法是股票价格预测领域最好的方法 [15] 。但目前基于机器学习的股票预测研究仍较少,且方法过于单一。
LSTM算法是为时间序列分析而设计的神经网络,可克服梯度消失、梯度爆炸的问题,通过记忆模块来学习时间序列的长期依赖关系。文献 [16] [17] 指出,在众多的神经网络算法中,LSTM算法更适用于股票价格预测。因此,本文以股票历史价格研究为背景,提出一种基于LSTM的股票价格预测方法。
2. 方法
2.1. LSTM网络
LSTM是一种基于循环神经网络(RNN)的特殊时间序列预测网络,可学习序列的依赖关系,被广泛的应用于语音信号处理和自然语言处理等领域。RNN网络可循环利用模型中的权重,在一定程度上可以利用到模型的历史信息。然而,RNN模型的反向传播算法较为简单,重复利用历史权重会导致梯度消失、梯度爆炸等问题,无法有效学习序列的历史信息。与RNN不同,该网络增加了输入门、遗忘门和输出门,可缓解时间序列预测中的梯度消失和梯度爆炸问题,有效的解决了RNN的不足。
图1为LSTM的网络结构图。LSTM网络一共有4层,包含一个输入序列
,两个输出
和
。其中,
为当前单元的输出,
为上一个单元的输出。sigmoid和tanh为激活函数,
为序列元素相乘,
为序列元素相加,
为t时刻神经元的状态,
为遗忘门的遗忘阈值,可控制神经元的历史信息输入量。
为输入门的阈值,可控制当前输入神经元的时间序列信息量。
为输出阈值,可控制sigmoid输出神经元的状态信息。输入序列
与前一时刻的单元输出
进行融合,首先输入至遗忘门,通过sigmoid激活函数初步对特征进行提取,并在遗忘阈值
的调节下,与前一时刻神经元的状态
通过
运算,得到遗忘门的输出状态。其次,输入至输入门,通过sigmoid和输入阈值
对输入的时间序列进行特征提取,并与tanh激活函数层的输出状态通过
运算将序列元素进行对应相乘,最终与遗忘门的输出通过
运算按序列元素相加,得到当前时刻的神经元状态
。此外,输入序列在输出门通过sigmoid和tanh激活函数进行特征提取,通过输出阈值
控制输出信息,并通过
运算与
按序列元素相乘,得到当前时刻的神经元输出
。该过程可用公式(1)~(4)表示。
(1)
(2)
(3)
(4)
其中,
,
,
,
分别为遗忘门,输入门,激活函数层和输出门的权重系数矩阵,
,
,
,
分别为遗忘门,输入门,激活函数层和输出门的偏移系数矩阵。因此,神经元的状态
和输出
可表示为:
(5)
(6)
与RNN不同,LSTM通过三个门控制机制有效的发掘时间序列的历史信息,并与当前序列信息相融合,充分的利用了输入数据,并对输入数据形成长期记忆。此外,LSTM在通过反向传播对权重信息进行校正时,一部分误差信息会通过输入门和激活函数层直接传递给下一个神经元,另一部分则会通过遗忘门筛选掉部分信息,有效的避免了梯度爆炸、梯度消失等问题,在处理具有冗余信息的历史数据等问题时具有极大的优势。本文研究的股票价格预测是典型的具有冗余信息的时间序列问题,当前时刻t的股价会受历史股价的影响。因此,本文采用LSTM网络对股票价格进行预测。
2.2. 基于LSTM的股票价格预测模型
基于上述原理,本文通过构建LSTM神经网络模型来对股票价格进行预测,模型训练及预测的流程图如图2所示。
本文构建的股票价格预测系统首先对输入的历史股价数据进行预处理,提取出“开盘价”和“收盘价”信息并将其转换为时间序列。为了减小计算量、加快模型的求解速度,将不同的尺度的股价转换到特定的数据分布,采用了数据归一化的方式对时间序列进行处理。然后对模型的参数进行设置,包括训练次数、训练集和测试集的划分、单次训练的历史数据量、批次大小等。之后将预处理的数据输入至本文构建的LSTM模型进行训练,采用Adam优化器使模型适应稀疏梯度,动态更新模型的权重系数矩阵。此外,还采用反向传播的方法将最优的历史权重系数矩阵传输至当前状态模型,既使当前的权重信息保持最优,又可包含训练数据的历史状态信息。训练完成后,将测试数据输入至模型即可得到当前数据的评价指标,通过预测数据可视化等操作即可完成模型的评估工作。
![](//html.hanspub.org/file/11-1542951x48_hanspub.png?20230830095435335)
Figure 2. LSTM stock price prediction flowchart
图2. LSTM股票价格预测流程图
图3为本文构建的股票价格预测模型,包括四个全连接层(fully connected layer),两个LSTM层(LSTM layer 1, LSTM layer 2),两个Dropout层。该模型的核心思想是通过LSTM层的记忆单元(memory cell)和门控机制(gate mechanism),帮助网络有效地处理长期和短期依赖关系。其中,记忆单元是网络中的核心组件,可以存储和传递信息。门控机制由三个关键的门控单元组成,即遗忘门(forget gate)、输入门(input gate)和输出门(output gate)。在预测股票价格时,LSTM模型将历史的股票价格数据序列作为输入,通过记忆单元和门控机制来学习和捕捉输入序列中的模式和规律。首先,遗忘门通过一个sigmoid函数来决定是否从记忆单元中忘记之前的记忆。接下来,输入门根据当前输入数据和先前的记忆状态来更新和存储新的记忆。最后,输出门根据当前输入数据和先前的记忆状态来决定输出的值。
通过LSTM模型,可以有效地捕捉和利用股票价格数据中的非线性关系和复杂模式,提高股票价格预测的准确性和可靠性。该模型可以处理不同时间尺度上的数据,并能够有效地处理长期和短期的影响因素,从而更好地捕捉市场的动态变化。
![](//html.hanspub.org/file/11-1542951x49_hanspub.png?20230830095435335)
Figure 3. Stock price forecasting model
图3. 股票价格预测模型
3. 实验及结果分析
3.1. 数据来源及评价指标
本文采用的数据为平安银行(0000001) 2019年1月~12月的最高价、最低价、开盘价、收盘价、成交量等数据(数据来源于通达信金融终端),一共有1952条。选取开盘价、收盘价作为输入时间序列数据,80%作为训练集来对LSTM模型进行训练,20%作为测试集来测试模型的预测准确度和模型的泛化能力。
目前在股票价格预测领域,并没有通用且统一的评估标准。为了显示模型的预测效果,本文采用均方误差(Mean Squared Error, MSE)、均方对数误差(MSLE)、平均绝对误差(MAE)、预测准确率(Accuracy)来对模型进行数值评估;采用图表的方式来对预测结果进行可视化评估。公式定义如下:
(7)
(8)
(9)
其中,N为输入样本数,
为预测值,
为真实值。
3.2. 实验及结果分析
本实验的环境配置如表1所示。所有实验均在此平台上进行。
![](Images/Table_Tmp.jpg)
Table 1. Experimental environment configuration
表1. 实验环境配置
影响股价预测模型的主要因素有两个:
1) LSTM层输入不同数量的历史数据。LSTM层可通过历史数据的权重系数矩阵来学习序列的历史信息。通常情况下,在一定的范围内,历史数据的数量越多,模型的性能越准确。但增加历史数据的数量,并不会无限制的提升模型的性能。因此,本文对不同数量的历史数据对模型的影响进行了研究。
2) LSTM层的神经元模块数。如图3所示,模型有两个LSTM层,每个LSTM层有一定模块数。在训练数据有限的情况下,提升LSTM的模块数会造成梯度不饱和等问题,影响模型对股价的评估。因此,本文对LSTM层的最优模块数进行了研究。
3.2.1. 不同数量的历史数据对模型的影响
为了比较不同数量的历史数据(m)对模型的影响,该节分别选取1、3、5、7、10、30、50、70、100组数据进行实验,迭代次数为1000次,分别选取MSE、MAE、MSLE、Accuracy这四个指标对模型进行评估。表2为实验性能参数。
由表2可知,当输入的历史数据量小于5时,模型的准确率随着输入数据量的增加而增加,在输入数据量为5时达到最大。在输入的历史数据量大于10以后,模型的准确率趋于稳定,并随着输入数据量的增加而减少。模型的MSE、MAE、MSLE可反映模型在训练过程中的收敛速度。在输入历史数据量为100时,MSE、MAE达到最小值,这说明输入更多的历史数据量可加快模型的收敛速度。但过快的收敛并未使模型性能达到最优。
![](Images/Table_Tmp.jpg)
Table 2. Performance parameters of the prediction model with input of different amount of historical data (m)
表2. 预测模型输入不同数量历史数据(m)的性能参数
![](//html.hanspub.org/file/11-1542951x55_hanspub.png?20230830095435335)
Figure 4. Results of stock price prediction using different amount of historical data (m)
图4. 采用不同数量历史数据(m)的股价预测结果
图4为采用不同数量历史数据(m)时,模型对股价预测结果可视图。当m = 1时,模型相当于RNN,无法充分学习序列的历史信息,预测结果与实际结果有较大的误差。增大m之后,模型的预测能力有了明显提升。当m = 5时,预测曲线与实际曲线几乎重合,达到最优。继续增大m值,虽然模型的MSE、MAE、MSLE均有下降的趋势,但预测效果越来越差。综合所有的评价指标,当输入历史数据量为5时,模型达到最优性能。
3.2.2. 不同的模型参数对模型的影响
为了比较LSTM中不同数量的神经元模块(n)对模型性能的影响,该节分别选取16、32、64、128、256、512个模块,进一步研究使模型达到最优的神经元模块数量。采用3.2.1的实验结果,将输入历史数据量设置为5,模型的其他参数与3.2.1保持一致,表3为实验结果。
![](Images/Table_Tmp.jpg)
Table 3. Model performance parameters using different number of neuron modules (n)
表3. 采用不同数量神经元模块(n)的模型性能参数
![](//html.hanspub.org/file/11-1542951x56_hanspub.png?20230830095435335)
Figure 5. Stock price prediction results using different number of neuron modules (n)
图5. 采用不同数量神经元模块(n)的股价预测结果
实验结果显示,当神经元模块数量由16增加至128时,模型的MSE、MAE呈下降趋势,准确率在128时达到最优值。当模型的神经元由128增长至512时,MSE、MAE呈上升趋势,准确率也在急剧下降。当神经元数量为32~128时,模型的MSE和MAE值趋于稳定状态。这说明模型在该阶段达到了最优。此外,模型的MSLE随着神经元的增加呈上升趋势。将表3的实验数据与图5结合分析,神经元数量并不是越多越好。当神经元的数量为128时,模型的性能达到最优。进一步增加神经元的数量,会造成模型过拟合,导致模型性能急剧下降。
4. 结论
本文提出了一种基于LSTM算法的股票价格预测方法。与传统的股票预测方法不同,基于深度学习的股价预测可发掘更多历史股票数据的信息,仅依靠历史股票价格数据即可预测未来股价。针对股票价格预测研究较少、并没有统一的评价指标等问题,本文选取了均方误差(Mean Squared Error, MSE)、均方对数误差(MSLE)、平均绝对误差(MAE)、预测准确率(Accuracy)来对模型进行数值评估。此外,本文还对LSTM层输入不同数量的历史数据、LSTM层的神经元模块数两个方面对股票价格预测模型进行进一步研究,实验结果证明了本文提出方法的有效性。
但仅依靠历史股价来对未来的股价进行预测仍存在较大的局限性,这也导致模型的准确率并不太高。因此,在下一步的研究工作中,可将市场上多种影响股票价格因素(如大户资金流向,买入卖出信号,股价拉升拉回信号等)结合情感分析算法进行建模,获取更精准的股票价格预测模型。