【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码1

简介: 【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码


时间序列预测在金融领域中扮演着举足轻重的角色,特别是在股票市场中。对于广大投资者和交易员而言,能够准确预测股票价格的变动趋势,不仅意味着能够在交易中做出更为明智的决策,还能够在风险管理中占据有利地位点击文末“阅读原文”获取完整代码数据


本文将通过视频讲解,展示如何用LSTM模型进行股票收盘价的时间序列预测,并结合一个PYTHON中TENSORFLOW的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化实例代码数据,为读者提供一套完整的实践数据分析流程。

视频

image.png

问题描述

在此项研究中,我们将聚焦于平安银行的股票价格,并利用其从2017年3月1日至2021年9月7日的每日收盘价数据来进行预测分析。通过深入剖析这些数据,我们期望能够揭示出股票价格变动的潜在规律,并据此构建出有效的预测模型。

为了评估模型的预测性能,我们将采用均方根误差(RMSE)作为主要的评估指标。RMSE能够直观地反映出模型预测值与实际值之间的差异程度,从而帮助我们准确评估模型的预测能力。

数据集介绍

我们使用的数据集涵盖了平安银行自2017年3月1日至2021年9月7日的股票历史行情数据。这些数据详细记录了每日的收盘价等重要信息,为我们提供了宝贵的分析材料。通过调用专业的数据接口——AKshare API,我们成功获取了这些高质量的数据,并将在后续的研究中充分利用这些数据来进行预测模型的构建和评估。


75b69ab3618e77800ab125df85426b0b.png

数据集部分展示

用于通过akshare库获取平安银行(股票代码000001)的股票历史行情数据,并将其保存到CSV文件中。

python复制代码
  import akshare as ak  
  import pandas as pd  
    
 
  stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20170301", end_date="20210907", adjust="")  
    
  # 将数据保存到CSV文件  
  stock_zh_a_hist_df.to_csv("stock_data.csv", encoding="utf_8_sig")  # 推荐使用 utf_8_sig 以确保Excel可以正确打开  
    
  # 如果你想查看数据集的一部分,可以使用head()方法  
  print(stock_zh_a_hist_df.head())


image.png

数据处理与可视化

将股票收盘价数据从原始数据中提取出来,进行折线图展示。


从图中,可以看出数据分布情况,大致可以分为三个阶段(分布),分别具有不同的均值和方差,这可能对最后的预测结果造成过拟合的影响。因此,按右图利用时间滑动窗口技术将数据集划分为训练集和测试集,以便尽可能减小分布差异带来的影响,当进行训练时我们也可以对数据进行归一化处理,进一步减小影响,还能加快模型收敛速度。



Yuehuan Wei

拓端分析师


c28fa88f473cf0ac943ea578a89db9bf.png


RNN模型

循环神经网络(RNN)是一个基于编码器-解码器框架的神经网络模型,见下图。其中编码器将符号序列编码为固定长度的矢量表示,解码器则将该矢量表示解码为另一个符号序列。


574938eafb5dd6cf24fb7b3ca7be3a49.png

830cb2b0c4769059608f766d2921d4ea.png

LSTM模型

LSTM长短期记忆网络是RNN循环递归网络的变体,引入了门还加入了细胞状态的新概念,LSTM通过忘记门f、输入门i和输出门o,来保留和更新细胞状态c,其中忘记门f负责组合新/旧细胞状态,输入门i负责接受/拒绝新输入,输出门o负责确定输出。具体的编码过程见右图。其中o、tanh 分别表示sigmoid、tanh激活函数

f997209936d4940a031fb13700b6ced1.png

LSTM模型

LSTM模型的形式化表示:

b0721a9d6d31f12f98d56fec22ee7b26.png

748b50fe7d2fc843deea134413831738.png


模型训练过程

模型的编码器部分采用了一个单层LSTM神经网络,旨在捕获序列的动态特征。该网络输出一个隐状态h,其维度dn设定为32,以捕捉输入序列X的深层信息。输入序列X的时间步长timesteps设定为12,而每个时间步t的输入维度dm则为1,确保了模型能够处理单特征序列。

解码器部分则是一个Dense密集层神经网络,负责从编码器输出的最后一个隐状态h中提取关键信息,并生成输出序列K。输出序列的时间步长predsteps被设定为4,每个时间步t的输出维度dx为1,确保模型能够产生与目标序列Y相匹配的结果。

在训练阶段,我们采用编码器-解码器结构的神经网络模型进行联合训练。通过均方差函数(MSE)来计算模型输出序列与目标序列Y之间的误差,并使用Adam优化器进行迭代求解,以最小化误差。训练过程将进行500次迭代(epochs = 500),并在每个批次(batchsize = 32)的数据上进行参数更新。

在验证阶段,我们将利用训练好的模型对验证集进行预测,并通过适当的评估指标来衡量模型的性能,从而验证模型在实际应用中的效果。

e5ccd3a35cc2ea5aca424876afd8dd11.png

模型训练结果

4bef8549b5307e3b21b6776f5c98ea56.png

a570dd657c8a22a549359164e3871cea.png

使用其他模型进行对比

多种训练模型的训练均方差和验证均方差

0c24dea9f38fcc791eba6a0f747f2797.png

40b03852e0be9832bda01d76efa8605b.png



与RNN简单循环神经网络模型相比, LSTM具有能捕捉长期数据特征的优点,但是对于超长期的数据,仍旧无法进行很好的预测,而对于加入了Attention注意力机制的Transformer,正好可以解决这个难题,但是Transformer模型针对简单的数据集往往效果比不上LSTM,因为Transformer更容易导致过拟合,从而影响预测效果。





Yuehuan Wei

拓端分析师





PYTHON中TENSORFLOW的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化案例

最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。

本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测。

在本文中,你将看到如何使用一个被称为长短时记忆的时间序列模型。LSTM模型很强大,特别是在保留长期记忆方面。在本文中,你将解决以下主题。

  • 理解为什么你需要能够预测股票价格的变动。
  • 下载数据 - 使用从雅虎财经收集的股市数据
  • 分割训练-测试数据,并进行数据归一化
  • 应用单步预测技术。
  • 讨论LSTM模型。
  • 用当前的数据预测和可视化未来的股票市场

为什么你需要时间序列模型?

你希望对股票价格进行正确的建模,所以作为一个股票买家,你可以合理地决定何时买入股票,何时卖出股票以获得利润。这就是时间序列模型的作用。你需要好的机器学习模型,它可以观察一连串数据的历史,并正确预测该序列的未来数据。

提示:股票市场的价格是高度不可预测和波动的。这意味着数据中没有一致的模式,使你能够近乎完美地模拟股票价格随时间变化。

然而,我们不要一味地认为这只是一个随机的或者随机的过程,机器学习没有希望。我们至少对数据进行建模,做出的预测与数据的实际行为相关。换句话说,你不需要未来确切的股票价值,而是需要股票价格的变动(也就是说,如果它在不久的将来会上涨或下跌)。

# 可用的库
import numpy as np
import tensorflow as tf

下载数据

股票价格有几种不同的变量。它们是

  • 开盘:当天的开盘股票价格
  • 收盘价:当天的收盘股价
  • 高点:数据中最高的股票价格
  • 低点:当天的最低股价

获取数据

你要利用航空公司的股票市场价格来进行预测,所以你把股票代码设置为 "AAL"。此外,你还定义了一个url_string,它将返回一个JSON文件,其中包含航空公司过去20年的所有股市数据,以及一个file_to_save,它是你保存数据的文件。

接下来,指定条件:如果你还没有保存数据,从你在url_string中设置的URL中抓取数据;把日期、低点、高点、成交量、收盘价、开盘价存储到一个pandas DataFrame df中,把它保存到file_to_save。

# 从URL中抓取数据
    # 将日期、低点、高点、成交量、收盘价、开盘价存储到Pandas DataFrame中
            #提取股票市场数据
            df = pd.DataFrame(columns=['Date', 'Low', 'High', 'Close', ' Open'])      
        print('数据保存到:%s'%file_to_save)        
    # 如果数据已经存在,只需从CSV中加载即可
    否则。
        print('文件已经存在,从CSV中加载数据')
        df = pd.read_csv(file_to_save)

数据探索

在这里你将把收集的数据输出到DataFrame中。你还应该确保数据是按日期排序的,因为数据的顺序在时间序列建模中至关重要。

# 按日期对数据框架进行排序
df = df.sort_values('Date')
# 仔细检查结果
df.head()

7604fbb78db4580bebf7b0c4913fc553.png

【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码2:https://developer.aliyun.com/article/1501351

相关文章
|
4天前
|
机器学习/深度学习 存储 数据可视化
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码2
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码
|
4天前
|
机器学习/深度学习 自然语言处理 数据可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
|
4天前
|
机器学习/深度学习 算法 算法框架/工具
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
数据分享|PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
|
4天前
|
机器学习/深度学习 数据挖掘 PyTorch
使用Python实现长短时记忆网络(LSTM)的博客教程
使用Python实现长短时记忆网络(LSTM)的博客教程
6 0
|
4天前
|
机器学习/深度学习 数据可视化 数据挖掘
Python电力负荷:ARIMA、LSTM神经网络时间序列预测分析
Python电力负荷:ARIMA、LSTM神经网络时间序列预测分析
|
4天前
|
机器学习/深度学习 算法 定位技术
Python用Lstm神经网络、离散小波转换DWT降噪对中压电网电压时间序列预测
Python用Lstm神经网络、离散小波转换DWT降噪对中压电网电压时间序列预测
|
4天前
|
机器学习/深度学习 算法 算法框架/工具
PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子
|
4天前
|
机器学习/深度学习 编解码 算法
R语言用FNN-LSTM假近邻长短期记忆人工神经网络模型进行时间序列深度学习预测4个案例
R语言用FNN-LSTM假近邻长短期记忆人工神经网络模型进行时间序列深度学习预测4个案例
|
4天前
|
机器学习/深度学习 算法框架/工具
数据分享|R语言用Keras长短期记忆LSTM神经网络分类分析问答文本数据
数据分享|R语言用Keras长短期记忆LSTM神经网络分类分析问答文本数据
|
4天前
|
机器学习/深度学习 自然语言处理 TensorFlow
Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准确性
Python TensorFlow循环神经网络RNN-LSTM神经网络预测股票市场价格时间序列和MSE评估准确性

热门文章

最新文章