基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)

 👨‍🎓个人主页:研学社的博客  

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Python代码实现


💥1 概述

大多数经济时间序列并不一定如我们所期望的具有恒定的均值,这些序列往往在阶段性的相对平稳之后又表现出剧烈的波动。我们将这一类序列称为条件异方差,长期来看,它们的无条件方差是恒定的,但存在着方差相对较大的时期。最典型的如股票市场,既有看上去风平浪静的时候,也有大起大落的时候。
上世纪80年代以前,由于缺乏更好的度量,时间序列的方差一直被假设为恒定。1982年,Engle 发表论文指出,时间序列存在着一种特殊的异方差即“自回归条件异方差”(Autoregressive Conditional Heteroskedasticity,简记ARCH)。1986年,Bollerslev对ARCH模型进行了推广,建立了“广义自回归条件异方差”(Generalised ARCH),也就是我们熟知的GARCH模型。因此,在讨论GARCH模型之前,我们首先对ARCH模型进行研究。

作为计量经济学中最常用的模型之一,ARCH在实际使用的过程中也存在着一定的缺陷。例如当滞后阶数p较大时,待估计的参数数量较大,这不仅造成样本容量的损失,可能还会带来诸如多重共线性等其他问题。而Bollerslev(1996)GARCH模型的提出,减少了待估计的参数,解决的ARCH模型存在的缺陷,使得我们可以对未来条件方差进行更准确的预测。
 

📚2 运行结果

 

Epoch 1/100
3508/3508 [==============================] - 227s 65ms/step - loss: 0.0113
Epoch 2/100
3508/3508 [==============================] - 210s 60ms/step - loss: 0.0046
Epoch 3/100
3508/3508 [==============================] - 230s 65ms/step - loss: 0.0031
Epoch 4/100
3508/3508 [==============================] - 209s 60ms/step - loss: 0.0025
Epoch 5/100
3508/3508 [==============================] - 210s 60ms/step - loss: 0.0024
Epoch 6/100
3508/3508 [==============================] - 209s 60ms/step - loss: 0.0020
Epoch 7/100
3508/3508 [==============================] - 207s 59ms/step - loss: 0.0020
Epoch 8/100
3508/3508 [==============================] - 208s 59ms/step - loss: 0.0018
Epoch 9/100
3508/3508 [==============================] - 208s 59ms/step - loss: 0.0016
Epoch 10/100
3508/3508 [==============================] - 208s 59ms/step - loss: 0.0015
Epoch 11/100
3508/3508 [==============================] - 207s 59ms/step - loss: 0.0014
Epoch 12/100
3508/3508 [==============================] - 207s 59ms/step - loss: 0.0013
Epoch 13/100
3508/3508 [==============================] - 207s 59ms/step - loss: 0.0013
Epoch 14/100
3508/3508 [==============================] - 207s 59ms/step - loss: 0.0012
Epoch 15/100
3508/3508 [==============================] - 207s 59ms/step - loss: 0.0011
Epoch 16/100
3508/3508 [==============================] - 207s 59ms/step - loss: 0.0010
Epoch 17/100
3508/3508 [==============================] - 207s 59ms/step - loss: 0.0010
Epoch 18/100
3508/3508 [==============================] - 208s 59ms/step - loss: 0.0010
Epoch 19/100
3508/3508 [==============================] - 208s 59ms/step - loss: 9.8157e-04
Epoch 20/100
3508/3508 [==============================] - 207s 59ms/step - loss: 9.5257e-04
Epoch 21/100
3508/3508 [==============================] - 207s 59ms/step - loss: 8.9070e-04
Epoch 22/100
3508/3508 [==============================] - 208s 59ms/step - loss: 8.8150e-04
Epoch 23/100
3508/3508 [==============================] - 207s 59ms/step - loss: 8.0846e-04
Epoch 24/100
3508/3508 [==============================] - 207s 59ms/step - loss: 8.1928e-04
Epoch 25/100
3508/3508 [==============================] - 207s 59ms/step - loss: 7.7277e-04
Epoch 26/100
3508/3508 [==============================] - 208s 59ms/step - loss: 7.6897e-04
Epoch 27/100
3508/3508 [==============================] - 207s 59ms/step - loss: 7.0307e-04
Epoch 28/100
3508/3508 [==============================] - 207s 59ms/step - loss: 7.5303e-04
Epoch 29/100
3508/3508 [==============================] - 207s 59ms/step - loss: 7.1193e-04
Epoch 30/100
3508/3508 [==============================] - 208s 59ms/step - loss: 7.0833e-04
Epoch 31/100
3508/3508 [==============================] - 207s 59ms/step - loss: 6.5084e-04
Epoch 32/100
3508/3508 [==============================] - 207s 59ms/step - loss: 6.3750e-04
Epoch 33/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.8134e-04
Epoch 34/100
3508/3508 [==============================] - 207s 59ms/step - loss: 6.0320e-04
Epoch 35/100
3508/3508 [==============================] - 208s 59ms/step - loss: 6.0289e-04
Epoch 36/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.9282e-04
Epoch 37/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.6629e-04
Epoch 38/100
3508/3508 [==============================] - 208s 59ms/step - loss: 5.6232e-04
Epoch 39/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.5231e-04
Epoch 40/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.3659e-04
Epoch 41/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.4437e-04
Epoch 42/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.1799e-04
Epoch 43/100
3508/3508 [==============================] - 206s 59ms/step - loss: 4.8758e-04
Epoch 44/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.2246e-04
Epoch 45/100
3508/3508 [==============================] - 206s 59ms/step - loss: 4.7491e-04
Epoch 46/100
3508/3508 [==============================] - 212s 60ms/step - loss: 5.0114e-04
Epoch 47/100
3508/3508 [==============================] - 214s 61ms/step - loss: 4.7639e-04
Epoch 48/100
3508/3508 [==============================] - 207s 59ms/step - loss: 5.0424e-04
Epoch 49/100
3508/3508 [==============================] - 206s 59ms/step - loss: 4.7534e-04
Epoch 50/100
3508/3508 [==============================] - 206s 59ms/step - loss: 4.6536e-04
Epoch 51/100
3508/3508 [==============================] - 205s 59ms/step - loss: 4.8457e-04
Epoch 52/100
3508/3508 [==============================] - 206s 59ms/step - loss: 4.9359e-04
Epoch 53/100
3508/3508 [==============================] - 205s 59ms/step - loss: 4.3020e-04
Epoch 54/100
3508/3508 [==============================] - 205s 58ms/step - loss: 4.3261e-04
Epoch 55/100
3508/3508 [==============================] - 205s 58ms/step - loss: 4.5423e-04
Epoch 56/100
3508/3508 [==============================] - 205s 59ms/step - loss: 4.6927e-04
Epoch 57/100
3508/3508 [==============================] - 206s 59ms/step - loss: 4.4117e-04
Epoch 58/100
3508/3508 [==============================] - 210s 60ms/step - loss: 4.2552e-04
Epoch 59/100
3508/3508 [==============================] - 213s 61ms/step - loss: 4.5346e-04
Epoch 60/100
3508/3508 [==============================] - 212s 60ms/step - loss: 3.9747e-04
Epoch 61/100
3508/3508 [==============================] - 213s 61ms/step - loss: 4.0462e-04
Epoch 62/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.9194e-04
Epoch 63/100
3508/3508 [==============================] - 212s 61ms/step - loss: 4.2718e-04
Epoch 64/100
3508/3508 [==============================] - 212s 60ms/step - loss: 3.9893e-04
Epoch 65/100
3508/3508 [==============================] - 213s 61ms/step - loss: 4.0014e-04
Epoch 66/100
3508/3508 [==============================] - 212s 60ms/step - loss: 3.8905e-04
Epoch 67/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.7853e-04
Epoch 68/100
3508/3508 [==============================] - 212s 60ms/step - loss: 3.5113e-04
Epoch 69/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.7891e-04
Epoch 70/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.9476e-04
Epoch 71/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.5827e-04
Epoch 72/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.8220e-04
Epoch 73/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.3573e-04
Epoch 74/100
3508/3508 [==============================] - 214s 61ms/step - loss: 3.7167e-04
Epoch 75/100
3508/3508 [==============================] - 214s 61ms/step - loss: 3.8604e-04
Epoch 76/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.6441e-04
Epoch 77/100
3508/3508 [==============================] - 218s 62ms/step - loss: 3.6098e-04
Epoch 78/100
3508/3508 [==============================] - 220s 63ms/step - loss: 3.5123e-04
Epoch 79/100
3508/3508 [==============================] - 214s 61ms/step - loss: 3.3619e-04
Epoch 80/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.4314e-04
Epoch 81/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.6033e-04
Epoch 82/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.1574e-04
Epoch 83/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.4564e-04
Epoch 84/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.5689e-04
Epoch 85/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.3262e-04
Epoch 86/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.4473e-04
Epoch 87/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.2569e-04
Epoch 88/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.2259e-04
Epoch 89/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.3683e-04
Epoch 90/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.1951e-04
Epoch 91/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.3434e-04
Epoch 92/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.1119e-04
Epoch 93/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.4121e-04
Epoch 94/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.1827e-04
Epoch 95/100
3508/3508 [==============================] - 213s 61ms/step - loss: 3.1273e-04
Epoch 96/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.1334e-04
Epoch 97/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.3695e-04
Epoch 98/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.2542e-04
Epoch 99/100
3508/3508 [==============================] - 212s 61ms/step - loss: 3.3429e-04
Epoch 100/100
3508/3508 [==============================] - 212s 60ms/step - loss: 3.3042e-04
 

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]秦寰. 基于GARCH-LSTM的沪深300指数择时策略研究[D].上海财经大学,2021.DOI:10.27296/d.cnki.gshcu.2021.000445.

[2]方志军. 基于GARCH族和LSTM混合模型的股价波动预测研究[D].中南财经政法大学,2021.DOI:10.27660/d.cnki.gzczu.2021.002388.

🌈4 Python代码实现

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个简单的基于Python的ARIMA-GARCH模型预测代码示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.arima_model import ARIMA import arch # 读取数据 data = pd.read_csv('data.csv', parse_dates=['date'], index_col='date') # 绘制时序图 plt.plot(data) plt.show() # 拆分训练集和测试集 train_data = data['2010-01-01':'2017-12-31'] test_data = data['2018-01-01':] # ARIMA模型拟合 model = ARIMA(train_data, order=(1, 1, 1)) model_fit = model.fit(disp=0) print(model_fit.summary()) # 预测 predictions = model_fit.forecast(steps=len(test_data))[0] # 绘制预测结果 plt.plot(test_data) plt.plot(predictions, color='red') plt.show() # GARCH模型拟合 residuals = test_data['y'] - predictions garch = arch.arch_model(residuals, p=1, q=1) garch_fit = garch.fit() print(garch_fit.summary()) # GARCH模型预测 garch_predictions = garch_fit.forecast(horizon=len(test_data)) garch_predictions = np.sqrt(garch_predictions.variance.values[-1, :]) plt.plot(test_data) plt.plot(predictions, color='red') plt.plot(predictions + garch_predictions, color='green') plt.plot(predictions - garch_predictions, color='green') plt.show() ``` 代码中首先读取数据,并绘制了数据的时序图。然后将数据拆分成训练集和测试集,并使用ARIMA模型拟合训练集数据。接着进行预测,并绘制预测结果图。最后使用GARCH模型拟合测试集数据的残差,并进行GARCH模型预测。绘制预测结果图时,使用绿色表示预测结果的置信区间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值