当前位置:   article > 正文

Python股票预测:注意力多层Attention RNN LSTM应用

Python股票预测:注意力多层Attention RNN LSTM应用

原文链接:https://tecdat.cn/?p=37152

Attention 机制是一种在神经网络处理序列数据时极为关键的技术,它赋予了模型“聚焦”能力,能够自动评估输入序列中各部分的重要性。通过为序列中的每个元素分配不同的权重,Attention 确保网络在处理过程中能够优先关注那些对任务更为关键的部分,从而显著提升模型的预测精度和效果点击文末“阅读原文”获取完整代码数据)。

相关视频

当Attention机制与LSTM(长短时记忆网络)相结合时,这一组合展现出了更为强大的序列处理能力。LSTM本身设计用于捕捉序列中的长期依赖关系,通过其独特的门控机制来控制信息的遗忘与保留。然而,面对极长的序列,LSTM可能会遭遇信息衰减或传递不畅的挑战。此时,Attention机制的引入如同一剂强心针,它允许模型动态地调整对序列不同片段的关注度,确保关键信息得以高效捕捉而不被忽略。

因此,Attention + LSTM 的结合不仅解决了LSTM在处理长序列时可能遇到的问题,还通过两者优势互补,极大地增强了模型对复杂序列数据的理解和分析能力,既提升了性能,也优化了计算效率。

股票预测模型使用注意力多层 RNN LSTM

数据准备
首先,我们从CSV文件中读取股票数据,并计算每对相邻交易日之间的对数收益率,假设收益率服从对数正态分布。接着,使用z-score标准化方法将数据映射到均值为0、方差为1的分布上,以减少不同量纲对模型训练的影响。
计算两点之间的对数收益率。假设收益率呈对数正态分布。

使用 zscore 将一个 pandas 系列映射,使其均值为 0,方差为 1,以对数据进行标准化。

459e222280fc4755617bea563f73890f.png

处理所有股票代码以生成数据框

  1. Final = pd.DataFrame()
  2. for f in os.listdir(datapath):
  3. filepath = os.path.join(datapath,f)
  4. if filepath.endswith('.csv'):

a2a1c94a07529cd75ba2340cfb956f58.png

数据透视

P是每个股票所有条目的扁平化数据框,每行代表一天

mi = P.columns.tolist()

30d2c2357601c101a66614bf73d72313.png

设置目标

为了简化问题,我们将预测目标设定为股票价格的涨跌方向(上涨、下跌或持平),分别用1、-1和0表示。通过计算每日的收益率,我们可以为每个交易日打上相应的标签。

现在我们有了输入和目标,算是有了。InputsDF 包含了我们想要预测的所有输入。Targets DF 包含了每个股票每天的收益率。首先,由于我们没有太多数据,让我们为预测设定一个比每个股票的收益率更简单的目标。

我们将目标标记为上涨(1)、下跌(-1)或持平(0)。顶部图表展示了如果我们每天为每个股票投入 1 美元将会出现的情况。底部图表展示了如果在上涨(1)的日子做多整个股票组合,在下跌(-1)的日子做空,在(0)的日子忽略会产生的结果。您能够看出这是一个具有价值的预测目标。

Labeled['max_return'] = Labeled['class'] * Labeled['return']
Labeled

6c71d77a3718f885e71653cfac04ead1.png

建立基线

为了评估后续模型的性能,我们首先构建了逻辑回归和全连接神经网络作为基线模型。

逻辑回归

  1. from sklearn import linear_model
  2. from sklearn.metrics import classification_report,confusion_matrix
logreg = linear_model.LogisticRegression(C=1e5)

基线全连接前馈神经网络

使用TensorFlow构建一个简单的全连接神经网络作为另一个基线。

  1. with tf.Graph().as_default():
  2. model = Model()
  3. input_ = train[0]
  4. target = train[1]
  5. config = tf.ConfigProto()
  6. jit_level = tf.OptimizerOptions.ON_1
  7. config.graph_options.optimizer_options.global_jit_level = jit_level

9f1b4ddf8c65eba06de18ecc5295f79a.png

  1. Res = (1+Result[-test_size:][['return','max_return','nn_ret']]).cumprod()
  2. Res[0] =0
  3. Res.plot(secondary_y='max_return')

88dc5ae8be5888491a561ee7497d4cf1.png

print(classification_report(Result['class'],Result['mod_nn_prod']))

c10a9d1a70678b74f2228b33ae3803da.png

Result[Result.multi_class==6]['nn_pred'].hist()

ca576dfab7c13ec872cb7df06e4d4e6e.png

注意力循环神经网络与MultiRNNCell LSTMs

基于TensorFlow,我们构建了一个包含注意力机制的RNN模型,使用LSTM单元作为RNN的基本组件。注意力机制通过赋予不同时间步长不同的权重,帮助模型更好地捕捉关键信息。

在本节中,我们将创建一个能够学习考虑过去情况的 rnn 模型。此模型基于 AttentionCellWrapper,这是在以下https://arxiv.org/pdf/1409.0473v7.pdf 中描述的一种新颖方法,标题为“通过联合学习对齐和翻译的神经机器翻译”

rnn 网络定义

  1. from tensorflow.contrib.layers.python.layers.initializers import xavier_initializer
  2. # Parameters
  3. learning_rate = 0.0007
  4. display_step = 1
  5. logpath = '/tmp/rnn_logs/example'

训练 RNN

  1. # 构建模型并将所有操作封装到作用域中,使
  2. # Tensorboard 的图形可视化更方便
  3. with tf.Graph().as_default():
  4. model = RNNModel()
  5. input_ = train[0]
  6. target = train[1]
  7. # XLA
  8. config = tf.ConfigProto()

7e6bfade22cde94035ae20495b525fc7.png

RNN 结果

  1. Result['rnn_pred'] = final_preds
  2. Result['mod_rnn_prod'] = list(map(lambda x: -1 if x <5 else 0 if x==5 else 1,final_preds))

819ccb8333bef0e6c6917dd495ca73d2.png

通过对比基线模型和注意力RNN模型的预测结果,我们发现注意力RNN模型在预测准确率、召回率和F1分数等指标上均有所提升,表明注意力机制有效地帮助模型捕捉到了股票数据中的关键时序特征。

Result[Result.multi_class==6]['rnn_pred'].hist()
<matplotlib.axes._subplots.AxesSubplot at 0x7f86a1938128>
Res.plot(figsize=(20,10))

a0ea366aa8a6b01724a9ac336d90156a.png

4b13124f334aa2a42079b9a90c36ff1d.png

g.map(sns.distplot, "return",);

16185f2c4f12e0d80c478e165c8c68cf.png

结论

本文提出了一种基于注意力机制的RNN模型用于股票价格预测,并通过实验验证了其有效性。与基线模型相比,该模型在预测性能上取得了显著提升。未来工作可以进一步探索不同注意力机制、优化模型结构以及融合更多外部数据源,以进一步提升预测精度和泛化能力。

参考文献

[1]林杰,康慧琳.基于注意力机制的LSTM股价趋势预测研究[J].上海管理科学.2020,(1).
[2]包振山,郭俊南,谢源,等.基于LSTM-GA的股票价格涨跌预测模型[J].计算机科学.2020,(z1).DOI:10.11896/jsjkx.190900128 .
[3]文宝石,颜七笙.数据多维处理LSTM股票价格预测模型[J].江西科学.2020,(4).DOI:10.13990/j.issn1001-3679.2020.04.001 .
[4]杨青,王晨蔚.基于深度学习LSTM神经网络的全球股票指数预测研究[J].统计研究.2019,(3).DOI:10.19343/j.cnki.11-1302/c.2019.03.006 .
[5]乔若羽.基于神经网络的股票预测模型[J].运筹与管理.2019,(10).DOI:10.12005/orms.2019.0233 .
[6]巴曙松,蒋峰."违约潮"背景下的信用风险测度研究[J].湖北经济学院学报.2019,(6).DOI:10.3969/j.issn.1672-626x.2019.06.001 .
[7]王理同,薛腾腾,王惠敏,等.基于循环神经网络的股指价格预测研究[J].浙江工业大学学报.2019,(2).DOI:10.3969/j.issn.1006-4303.2019.02.013 .
[8]王卫红,卓鹏宇.基于PCA-FOA-SVR的股票价格预测研究[J].浙江工业大学学报.2016,(4).DOI:10.3969/j.issn.1006-4303.2016.04.010 .
[9]许兴军,颜钢锋.基于BP神经网络的股价趋势分析[J].浙江金融.2011,(11).DOI:10.3969/j.issn.1005-0167.2011.11.015 .
[10]韦艳华,张世英.金融市场的相关性分析--Copula-GARCH模型及其应用[J].系统工程.2004,(4).DOI:10.3969/j.issn.1001-4098.2004.04.002 .

7860f2df8c771386b835e28a65346dcd.jpeg

本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群!

d9d794d5997888a8bd782c6cacb90482.png


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

f6f1aa15b637a651376f75fea0dde623.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《Python股票预测:注意力多层Attention RNN LSTM应用》。

点击标题查阅往期内容

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

用PyTorch机器学习神经网络分类预测银行客户流失模型

PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

R语言深度学习:用keras神经网络回归模型预测时间序列数据

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

MATLAB中用BP神经网络预测人体脂肪百分比数据

Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

R语言实现CNN(卷积神经网络)模型进行回归数据分析

SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

Python使用神经网络进行简单文本分类

R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

R语言基于递归神经网络RNN的温度时间序列预测

R语言神经网络模型预测车辆数量时间序列

R语言中的BP神经网络模型分析学生成绩

matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

R语言实现拟合神经网络预测和结果可视化

用R语言实现神经网络预测股票实例

使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

19698dcd8242352b5061e3a540d37448.jpeg

11aed61831bf0f56c8010b55c93534c2.png

34b7f82c1489b3d896feed6eb1a7069b.png

0ea9499a650d30161d88705e0d724aa0.jpeg

a1360de56d64f778afe2a6bf832b1a46.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/919407
推荐阅读
相关标签
  

闽ICP备14008679号