LSTM(长短期记忆网络)是一种特殊类型的循环神经网络(RNN),它能够学习长期依赖关系,因此在时间序列预测问题上表现出色。在股票预测方面,LSTM已经被尝试并取得了一定的效果,但是模型的预测准确率方面仅达到56.6%,比投掷硬币稍强一点点,其用于股票预测是不靠谱的。
下文内容一和二引自所示链接:
量化研究分享:使用LSTM模型预测股价_财富号_东方财富网
caifuhao.eastmoney.com/news/20230422185827459418210
一.LSTM模型:
首先说一下为什么要使用LSTM模型来预测股价。一方面,股价预测是高度非线性的,这就要求模型能够处理非线性问题;另一方面,股价具有时间序列的特性,适合使用循环神经网络。因此相比于众多ML和DL模型,LSTM在这个问题上有着天然的优势。
LSTM的全称是Long Short Term Memory,是循环神经网络(RNN)的一种,顾名思义,它具有记忆长短期信息的能力。长期困扰传统神经网络结构的一个基本问题是解释“信息”和“上下文”相互依赖的输入序列,在这个问题上RNN能起到一定的作用,但是当输入序列过长时RNN的权重矩阵要循环相乘,所以会产生梯度消失和梯度爆炸的问题,因此RNN不能解决长期依赖问题,这时候LSTM就可以派上用场了。
LSTM模型的1个神经元包含了1个细胞状态(cell)和3个门(gate)机制,三个门分别是输入门、遗忘门和输出门。其中输入门决定将哪些新信息添加到细胞状态,遗忘门负责单元状态的权重和激活函数,输出门决定输出什么,它决定了后面隐藏状态的值。LSTM的核心是细胞状态,它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNN。下面是 LSTM 神经元的典型内部工作图:
其中C(t-1)为上一时刻的细胞状态值,C(t)为这一时刻的细胞状态值;h(t-1)为上一时刻的输出,h(t)为这一时刻的输出。参数更新方法主要是反向传播和链式求导,具体公式在这里不做阐述。由于存储单元中编码的值不会重复更新,因此在使用反向传播训练时梯度不会消失,从而使LSTM能够克服梯度消失问题。
二.L如何通过LSTM模型实现股价预测。
0. 环境准备
导入数据分析常用的包:
导入深度学习keras框架。多年前毛豆做深度学习模型的时候,keras还是独立的包,其后端(底层框架)是可以选择tensorflow或Theano的,但现在keras已经集成到tensorflow中了,因此直接用tf.keras就好了:
1.获取数据
我们以今年的大牛股 $剑桥科技(SH603083)$ 为例,首先获取其去年一年的数据,通过设置参数skip_paused=True删除停牌日期:
先画一个蜡烛图看看:
2.数据预处理
首先我们将训练数据处理成深度学习训练要求的向量格式,特征值x为时间步N天内的股价数据,目标值y为第N+1天的股价数据。 这里我们仅使用股价数据就可以了,时间步长取30天:
对数据进行标准化:
然后将数据划分为训练集和测试集:
准备好数据后,接下来就可以建模了。
3.构建LSTM模型
模型主要涉及到的参数有激活函数、学习率、损失函数等。dropout的作用是防止过拟合,可以先不加。
我们初始化配置网络参数如下,这里的时间步长为30天,输出步长1天,即每次使用过去30天的数据来预测未来1天的数据,如果想预测未来3天的数据将outStep设置为3即可。
(注意,上面模型的构建方式为回归模型,我们也可以使用KerasClassifier将模型封装为分类模型,模型输出为上涨/下跌,这样可以更方便地评估模型的准确率。)
由于初始设置的参数不一定是最优的,我们可以使用网格搜索的方法对超参数进行调优。以激活函数的调优为例,可以备选softmax、relu、sigmoid等多个激活函数,看看哪一个激活函数下模型准确率最高:
打印结果如下(使用linear激活函数准确率最佳,实际效果差不多)
其余的各个参数以此类推,最终都可以得到最优参数。
在得到最优参数后,我们重新配置参数来构建模型:
然后再使用训练集数据训练神经网络:
4.预测股价
训练完成后,使用训练好的模型(回归模型)对测试集数据进行预测:
因为数据归一化过,我们使用inverse_transform方法将数据还原,这样就得到了预测后的数据:
将结果整理到一个数据框,包括真实股价、预测股价、真实涨幅、预测涨幅;我们构造一个新的列来记录模型对股票涨跌的判断是否正确,正确为1,错误为0:
查看结果:
例如12-19日剑桥科技股价真实值为11.50,预测值为11.40,虽然真实值和预测值之间有误差,但误差并不大,至少模型对涨跌的判断是正确的,因此tag为1。
12月20日剑桥科技股价真实值为11.58,预测值为11.12,这一天的预测结果误差就比较大了,真实情况是上涨的,而预测情况是下跌的,涨跌预测错误,因此tag为0。
那么通过整理后的数据,我们就可以统计模型预测值与真实值之间的误差以及预测的准确率,并由此评价模型是否可靠。
5.模型评估
股价的误差衡量我们采用平均绝对误差(MAE),其计算方式为目标值和预测值之差的绝对值之和。准确率(accuracy)即预测正确的样本数占总样本数的比例。如果更关注模型预测错误带来的风险,我们也可以使用假阳性率(false positive rate,FPR)来评估模型。
打印结果如下:
模型的预测准确率方面仅达到56.6%,比投掷硬币稍强一点点。注意这里的准确率是模型在测试集上的准确率,上面使用网格搜索得到的准确率是模型在训练集上的准确率,需要区分。
将预测值和真实值可视化,其中黄线为真实价格,蓝线为预测价格:
三、深度学习做股票预测是否靠谱
尽管LSTM模型可能在大多数时候能够捕捉到一定的趋势,但并不能保证总是准确的。此外,超参数的选择、数据的质量和模型的可解释性也是影响预测效果的重要因素。因此,深度学习在股票预测中的应用需要结合其他分析工具和方法,并且要有一定的风险意识。
深度学习用于归纳过去的数据来预测股票走势可能并不靠谱。这是因为股票市场受到多种复杂因素的影响,包括宏观经济、新闻事件、政策变化、市场情绪、政治事件等,这些因素很多是无法量化的,因此仅凭历史数据进行预测具有很大的不确定性,这些都可能影响模型的预测效果。因此用LSTM做股票预测是不靠谱的。
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ15101117,本站将立刻清除。