首页 > 其他分享 >【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例

【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例

时间:2024-09-14 21:50:57浏览次数:12  
标签:数据 模型 ARIMA 神经网络 序列 LSTM data

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

原文出处:拓端数据部落公众号 

分析师:Dongzhi Zhang 

近年来人工神经网络被学者们应用十分广泛,预测领域随着神经网络的引入得到了很大的发展。本文认为单一神经网络模型对序列所包含的线性信息和非线性信息的挖掘是有限的,因此本文为了进一步的提高对这两类数据的预测效果,将神经网络与传统的时间序列模型ARIMA模型相结合建立混合模型,并提供了数据和代码应用于预测股票收盘价数据。 

一、时间序列数据来源及研究目的
本项目选取的时间序列为国家数据库公布的 2010 年 1 月至 2023 年 3 月期间对外出口额的月度数据。本文旨在对该时间序列进行时间序列分析建模,并实施向前一步预测,进而与实际公布值进行对比。

二、代码部分

数据读取:

monthexport = rev(datal[,2])
time = rev(datal[,1])
ts.plot(monthexport)

三、文本解释部分

线性时间序列分析的对象为时间序列数据。线性时间序列的适用范围为平稳时间序列。
弱平稳序列(宽平稳序列,weakly stationary time series)定义如下:若时间序列{Xt}存在有限的二阶矩且满足(1)EXt = μ与 t 无关;(2)Var(Xt)=σ²与 t 无关;(3)YR = Cov(Xt-k,Xt),k = 1,2,...与 t 无关,则称{Xt}为弱平稳序列。

两种具有平稳性的理想模型如下:

Definition 3.1:p 阶自回归模型(An autoregressive model of order p,缩写为 AR(p))形式为 xₜ = φ₁xₜ₋₁ + φ₂xₜ₋₂ +……·+ φₚXₜ₋ₚ + wₜ,其中 xₜ为平稳序列,wₜ~wn(0,σ²w),φ₁,φ₂,…,φₚ为常数(p ≠ 0)。若 xₜ的均值不为零,将 xₜ替换为 xₜ - μ,即 μ = φ₁(Xₜ₋₁ - μ)+φ₂(Xₜ₋₂ - μ)+·…+φₚ(Xₜ₋ₚ - μ)+ wₜ,或者写成 xₜ = α+φ₁xₜ₋₁+φ₂xₜ₋₂+··+φₚxₜ₋ₚ + wₜ,其中 α = μ(1-φ₁—…—φₚ)。

Definition 3.3:q 阶移动平均模型(The moving average model of order q,即 MA(q)模型)定义为 Xₜ = wₜ + θ₁wₜ₋₁ + θ₂wₜ₋₂ +…+θₚwₜ₋ₚ,其中 wₜ~wn(0,σ²),θ₁,θ₂,…,θₚ(θₚ≠0)为参数。

通过自相关函数(ACF)和偏自相关函数(PACF)确定自回归移动平均模型(ARMA)的阶数,具体表现为:对于 AR(p)模型,ACF 拖尾,PACF 在滞后 p 步后截尾;对于 MA(q)模型,ACF 在滞后 q 步后截尾,PACF 拖尾;对于 ARMA(p,q)模型,ACF 和 PACF 均拖尾。

进行 ARMA 模型拟合:

irma4 = arima(logIR,order = c(12,0,2), include.mean = TRUE)

拟合结果如下:

 
  1.   Call:
  2.   arima(x = logIR,order = c(12,0,2), include.mean = TRUE)
  3.   Coefficients:
  4.   ar1 ar2 ar3 ar4 ar5 ar6 ar7 ar8
  5.   0.0557 -0.1379 -0.1501 -0.0487 -0.1605 -0.0539 -0.1039 -0.0575
  6.   s.e. 0.1058 0.1109 0.0937 0.0949 0.0902 0.0880 0.0877 0.0871
  7.   ar9 ar10 ar11 ar12 ma1 ma2 intercept
  8.   -0.0658 -0.1195 0.0436 0.6035 -0.7995 0.2306 0.0061
  9.   s.e. 0.0855 0.0820 0.0863 0.0794 0.1310 0.1100 0.0025
  10.   sigma^2 estimated as 0.007476: log likelihood = 157.86, aic = -283.73。
 

模型检验和总结分析如下:

MA(2):at = Et -0.5645et-1-0.2630ct-2+0.0057,Var(Et)=0.01625;

MA(13)(不可逆):t = Et -1.3068Et-1 -0.6226t-13+0.0067,Var(et)=0.006589;

ARMA(12,2):xt = 0.7343nt-12+Et—0.7436ct-1+0.04576t2+0.0070,Var(et)=0.008091;

ARMA(12,1):xt = 0.7247xt—12+Et-0.7144Et-1+0.0070,Var(ct)=0.008126;

xt = -0.06605056。

构建数据框:

tabl = data.frame("模型"=c("MA(2)","ARMA(12,2)","ARMA(12,1)"),
pred = c(unlist(predict(irmal)[1]), unlist(predict(irma5)[1]), unlist(predict(irma6)[1])),
S.E. = c(unlist(predict(irmal)[2]), unlist(predict(irma5)[2]), unlist(predict(irma6)[2])),
Residuals = c(unlist(predict(irmal)[1])-xt, unlist(predict(irma5)[1])-xt, unlist(predict(irma6)[1])-xt))

数据框内容如下:

模型 pred S.E. Residuals

1 MA(2) 0.006404136 0.12747043 0.07245470

2 ARMA(12,2) -0.127044967 0.08994988 -0.06099441

3 ARMA(12,1) -0.114879301 0.09014648 -0.04882874。

混合ARIMA LSTM模型研究

在时间序列分析领域,准确预测未来趋势一直是一个重要且具有挑战性的任务。本文提出了一种混合模型,该模型结合了自回归积分滑动平均(ARIMA)模型和长短期记忆(LSTM)网络的优势,以提高时间序列预测的准确性。ARIMA模型作为一种经典的统计方法,能够捕捉数据的线性依赖关系,而LSTM网络作为一种深度学习技术,能够处理更复杂的非线性模式和长期依赖关系。

ARIMA模型

ARIMA模型是时间序列预测中常用的方法之一,它通过自回归(AR)、差分(I)和移动平均(MA)三个步骤来构建模型。在本研究中,我们首先对原始数据进行处理,提取收盘价(close)列,并将其分为训练集和测试集。通过对训练集数据进行ARIMA模型训练,我们得到了模型参数,并利用这些参数对未来数据进行了预测。预测结果如图1所示,展示了模型对部分训练数据的拟合情况。

# 数据处理

attention_flag = False
train_len = 500
seq_length = 16
num_epochs = 100
# ARIMA模型的训练集和测试集划分
ARIMA_Train = raw_data.loc[:,['close']][0:train_len]
ARIMA_Test =  raw_data.loc[:,['close']][train_len:]
ARIMA_Test_Input = raw_data.loc[:,['date']][train_len:]

在图1中,我们展示了训练集中前100个数据点的收盘价时间序列图。通过对数据的可视化分析,我们可以更好地理解数据的波动特性和潜在的季节性模式。

ARIMA_mean_log = np.log(raw_data.loc[:,['close']])
plt.plot(ARIMA_Train.iloc[:100])

ARIMA LSTM网络结构

LSTM网络是循环神经网络(RNN)的一种特殊类型,它能够记忆长期的信息,非常适合处理时间序列数据。在本研究中,我们首先读取了ARIMA模型的残差数据,然后创建了序列数据,这些数据被用来训练LSTM网络。LSTM网络通过学习序列数据中的模式,能够预测未来的数据点。我们定义了编码器、解码器和注意力机制等网络结构,以提高模型的性能。

LSTM_data = pd.read_csv('residual_result/{}_residual.csv'.format(data_name))
ARIMA_close_prices = LSTM_data['residuals'][train_len:].values.astype(float)
# 创建序列数据
# 数据归一化
scaler = MinMaxScaler()
training_data = scaler.fit_transform(ARIMA_close_prices.reshape(-1,1))
x, y = create_sequences(training_data, seq_length)

在上述代码中,我们首先读取了ARIMA模型的残差数据,并将其转换为浮点数格式。然后,我们定义了一个函数create_sequences来创建序列数据,这些数据将作为LSTM网络的输入。我们还对数据进行了归一化处理,以提高模型的训练效率。

训练ARIMA LSTM模型

在模型训练部分,我们设置了学习率、输入维度、隐藏层大小、层数和输出维度等超参数,并初始化了Seq2Seq模型。我们还使用了均方误差损失函数和Adam优化器来训练模型。在训练过程中,我们对模型进行了多次迭代,并在每个epoch后评估了模型在验证集上的性能。

learning_rate = 0.005
input_dim = 1
hidden_size = 32

criterion = torch.nn.MSELoss()    # 均方误差损失函数
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

在上述代码中,我们设置了模型的超参数,并初始化了Seq2Seq模型。我们还定义了损失函数和优化器,这些将用于模型的训练过程。

ARIMA LSTM结果展示

在结果展示部分,我们加载了训练好的模型,并使用它对测试集进行了预测。然后,我们将预测结果与实际数据进行了可视化比较,以评估模型的性能。我们还计算了一些评价指标,如均方误差(MSE)、平均绝对误差(MAE)和平均绝对百分比误差(MAPE),以量化模型的预测准确性。

# 加载模型

dataY_plot = dataY.data.numpy()
data_predict = scaler.inverse_transform(data_predict)
dataY_plot = scaler.inverse_transform(dataY_plot)
plt.figure(figsize=(10, 2))
plt.axvline(x=train_size, c='r', linestyle='--')
plt.plot(dataY_plot, label = data_name + ' ' + "实际值")
plt.plot(data_predict, label = data_name + ' ' + "预测值")
plt.suptitle(data_name + ' ' + '预测')
plt.legend()
plt.show()

在图2中,我们展示了模型对测试集的预测结果。可以看到,模型能够较好地拟合实际数据,预测值与实际值之间的差异较小。这表明混合ARIMA LSTM模型在时间序列预测方面具有较高的准确性。

综上所述,混合ARIMA LSTM模型在时间序列预测任务中表现出了良好的性能。通过结合传统统计方法和深度学习技术,该模型能够更准确地捕捉数据中的复杂模式和长期依赖关系。未来的研究可以进一步探索模型参数的优化和模型结构的改进,以提高预测的准确性和泛化能力。

在图3中,我们展示了混合ARIMA LSTM模型在整个数据集上的预测结果,包括训练集、验证集和测试集。可以看到,模型在整个时间序列上的预测结果与实际数据吻合得非常好,这进一步验证了模型的有效性和可靠性。

关于分析师

在此对Zhidong Zhang对本文所作的贡献表示诚挚感谢,他在复旦大学完成了数据科学与大数据技术专业的学位,专注人工智能领域。擅长R语言、Python、SQL、Tableau,以及数据建模,统计推断,数据采集。


标签:数据,模型,ARIMA,神经网络,序列,LSTM,data
From: https://www.cnblogs.com/tecdat/p/18414742

相关文章

  • 论文速递! Attention-LSTM特征融合,用于剩余使用寿命(RUL)预测
    论文标题:MachineRemainingUsefulLifePredictionviaanAttention-BasedDeepLearningApproach期刊信息:IEEETIE(中科院1区,JCRQ1TOP,IF=7.5)引用:ChenZ,WuM,ZhaoR,etal.Machineremainingusefullifepredictionviaanattention-baseddeeplearningapproac......
  • 顶刊算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测
    顶刊算法|鹈鹕算法POA-Transformer-LSTM多变量回归预测目录顶刊算法|鹈鹕算法POA-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现顶刊算法|鹈鹕算法POA-Transformer-LSTM多变量回归预测(程序可以作为JCR一区级论文代码支撑,目......
  • 小众创新组合!LightGBM+BO-Transformer-LSTM多变量回归交通流量预测(Matlab)
    小众创新组合!LightGBM+BO-Transformer-LSTM多变量回归交通流量预测(Matlab)目录小众创新组合!LightGBM+BO-Transformer-LSTM多变量回归交通流量预测(Matlab)效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现LightGBM+BO-Transformer-LSTM多变量回归预测,LightGBM+BO-......
  • 多输入多输出 | Matlab实现SO-BP蛇群算法优化BP神经网络多输入多输出预测
    多输入多输出|Matlab实现SO-BP蛇群算法优化BP神经网络多输入多输出预测目录多输入多输出|Matlab实现SO-BP蛇群算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料预测效果基本介绍多输入多输出|Matlab实现SO-BP蛇群算法优化BP神经网络多输入多输......
  • (29-1)通过回测、ARIMA 和 GRU 预测股票价格:项目介绍+准备环境
    在本项目中通过一系列数据处理和模型训练步骤,旨在预测股票价格。首先,通过时间序列分析方法ARIMA对股票数据进行建模,以便了解其基本趋势。然后,使用GRU(门控递归单元)这一深度学习模型进行更复杂的预测,考虑了数据的序列特性。整个项目包括数据预处理、模型构建与训练、预测结果......
  • 神经网络的基本元素
    权重(w₁,w₂,w₃,...) :每个输入都乘以相应的权重。这些权重是模型在训练过程中学习到的参数。偏置(b) :这是一个额外的参数,加到加权输入上以调整激活函数。它有助于模型做出更好的预测。求和和激活函数 :输入的加权和加上偏置后,通过一个激活函数(f)。这个函数决定了神......
  • 二、神经网络基础(逻辑回归和向量化)
    1、二分类  logistic回归是一个用于二分类(BinaryClassification)的算法。二分类就是输出结果y只有0和1两个标签(也有-1和1的情况)。以一个图像识别为例,例如识别猫,1代表猫,0代表不是猫。用y表示输出的结果标签。  在二分类问题中,目标是训练一个分类器,它以图片的特征向量x为输入,......
  • 基于CNN-LSTM-Attention的共享单车租赁预测研究(数据可换)(Python代码实现)基于CNN-LSTM
                        ......
  • 基于卷积神经网络的图像去噪研究 毕业设计(案例展示)
    开发一种基于卷积神经网络(CNN)的高效图像去噪技术。图像去噪是图像处理领域的一个关键挑战,对于图像质量的提升、目标检测、目标跟踪以及图像分析等研究领域至关重要。CNN因其在图像识别和处理任务中的卓越性能而成为本研究的核心工具。研究内容包括分析图像去噪的重要性、评述当......
  • [独家原创]基于(开普勒)KOA-Transformer-LSTM多特征分类预测【24年新算法】 (多输入单
    [独家原创]基于(开普勒)KOA-Transformer-LSTM多特征分类预测【24年新算法】(多输入单输出)Matlab代码你先用你就是创新!!!(鳑鲏鱼)KOA优化的超参数为:隐藏层节点数、正则化系数、初始化学习率1.程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel!2.Transformer作为......