时间序列预测在金融领域中扮演着举足轻重的角色,特别是在股票市场中。对于广大投资者和交易员而言,能够准确预测股票价格的变动趋势,不仅意味着能够在交易中做出更为明智的决策,还能够在风险管理中占据有利地位(点击文末“阅读原文”获取完整代码数据)。
本文将通过视频讲解,展示如何用LSTM模型进行股票收盘价的时间序列预测,并结合一个PYTHON中TENSORFLOW的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化实例的代码数据,为读者提供一套完整的实践数据分析流程。
视频
问题描述
在此项研究中,我们将聚焦于平安银行的股票价格,并利用其从2017年3月1日至2021年9月7日的每日收盘价数据来进行预测分析。通过深入剖析这些数据,我们期望能够揭示出股票价格变动的潜在规律,并据此构建出有效的预测模型。
为了评估模型的预测性能,我们将采用均方根误差(RMSE)作为主要的评估指标。RMSE能够直观地反映出模型预测值与实际值之间的差异程度,从而帮助我们准确评估模型的预测能力。
数据集介绍
我们使用的数据集涵盖了平安银行自2017年3月1日至2021年9月7日的股票历史行情数据。这些数据详细记录了每日的收盘价等重要信息,为我们提供了宝贵的分析材料。通过调用专业的数据接口——AKshare API,我们成功获取了这些高质量的数据,并将在后续的研究中充分利用这些数据来进行预测模型的构建和评估。
数据集部分展示
用于通过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())
数据处理与可视化
将股票收盘价数据从原始数据中提取出来,进行折线图展示。
从图中,可以看出数据分布情况,大致可以分为三个阶段(分布),分别具有不同的均值和方差,这可能对最后的预测结果造成过拟合的影响。因此,按右图利用时间滑动窗口技术将数据集划分为训练集和测试集,以便尽可能减小分布差异带来的影响,当进行训练时我们也可以对数据进行归一化处理,进一步减小影响,还能加快模型收敛速度。
Yuehuan Wei
拓端分析师
RNN模型
循环神经网络(RNN)是一个基于编码器-解码器框架的神经网络模型,见下图。其中编码器将符号序列编码为固定长度的矢量表示,解码器则将该矢量表示解码为另一个符号序列。
LSTM模型
LSTM长短期记忆网络是RNN循环递归网络的变体,引入了门还加入了细胞状态的新概念,LSTM通过忘记门f、输入门i和输出门o,来保留和更新细胞状态c,其中忘记门f负责组合新/旧细胞状态,输入门i负责接受/拒绝新输入,输出门o负责确定输出。具体的编码过程见右图。其中o、tanh 分别表示sigmoid、tanh激活函数
LSTM模型
LSTM模型的形式化表示:
模型训练过程
模型的编码器部分采用了一个单层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)的数据上进行参数更新。
在验证阶段,我们将利用训练好的模型对验证集进行预测,并通过适当的评估指标来衡量模型的性能,从而验证模型在实际应用中的效果。
模型训练结果
使用其他模型进行对比
多种训练模型的训练均方差和验证均方差
与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()
【视频】LSTM模型原理及其进行股票收盘价的时间序列预测讲解|附数据代码2:https://developer.aliyun.com/article/1501351