Python实现ARIMA-LSTM回归模型预测股票价格项目实战

说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解 ),如需数据+代码+文档+视频讲解 可以直接到文章最后关注获取。

1 . 项目背景

随着金融市场复杂性的增加,准确预测股票价格对于投资者、金融机构和政策制定者来说变得至关重要。传统的统计模型如 ARIMA(AutoRegressive Integrated Moving Average)在处理线性时间序列数据方面表现良好,但当面对非线性和复杂的市场行为时,其预测能力可能会受到限制。另一方面,深度学习模型如 LSTM(Long Short-Term Memory)网络因其能够捕捉长期依赖关系而成为处理非线性时间序列数据的强大工具。

本项目旨在结合 ARIMA 和 LSTM 的优势,开发一个混合回归模型来提高股票价格预测的准确性。具体而言,ARIMA 模型将用于捕捉股票价格中的线性趋势,并生成残差序列;LSTM 模型将以开盘价、最高价和最低价作为输入特征,学习这些特征与 ARIMA 残差之间的非线性关系,从而输出预测的残差值。最终,通过将预测的残差值添加到真实值的结果上,可以得到更精确的股票价格预测。

本项目的成功实施不仅有助于提升股票价格预测的准确性,还可以为金融市场的研究提供新的视角。通过整合传统统计方法与现代深度学习技术,我们期望能够在复杂多变的金融市场中找到更加稳健和可靠的预测方法。

本项目通过Python实现ARIMA-LSTM回归模型预测股票价格项目实战。

2 . 数据获取

本次建模数据来源于网络(本项目撰写人整理而成),数据项统计如下:

|------------|--------------|------------|
| 编号 | 变量名称 | 描述 |
| 1 | ts_code | 股票交易代码 |
| 2 | trade_date | 股票交易日期 |
| 3 | open | 开盘价 |
| 4 | high | 最高价 |
| 5 | low | 最低价 |
| 6 | close | 收盘价 |

数据详情如下(部分展示):

3. 数据预处理

3.1 用P andas 工具查看数据

使用Pandas工具的head()方法查看前五行数据:

关键代码:

3.2 数据缺失查看

使用Pandas工具的info()方法查看数据信息:

从上图可以看到,总共有5个变量,数据中无缺失值,共6000条数据。

关键代码:

3. 3数据描述性统计

通过Pandas工具的describe()方法来查看数据的平均值、标准差、最小值、分位数、最大值。

关键代码如下:

4. 探索性数据分析

4 .1 close 变量分布直方图

用Matplotlib工具的hist()方法绘制直方图:

4 .2 相关性分析

从上图中可以看到,数值越大相关性越强,正值是正相关、负值是负相关。

5. 特征工程

5.1 建立特征数据和标签数据

关键代码如下:

5. 2 数据集拆分

把数据集划分为80%训练集、20%测试集进行划分,关键代码如下:

6 . 构建ARIMA时序模型

6 .1 ARIMA 模型概念

在自然界中绝大部分序列都是非平稳的。因而非平稳时间序列的分析更普遍、更重要,创造出来的分析方法也更多。

非平稳时间序列的分析方法可以分为确定性因素分解的时序分析和随机时序分析两大类。

确定性因素分解的方法把所有序列的变化都归结为4个因素(长期趋势、季节变动、循环变动和随机波动)的综合影响,其中长期趋势和季节变动的规律性信息通常比较容易提取,而由随机因素导致的波动则非常难以确定和分析,对随机信息浪费严重会导致模型拟合精度不够理想。

随机时序分析法的发展就是为了弥补确定性因素分解方法的不足。根据时间序列的不同特点,随机时序分析可以建立的模型有ARIMA模型、残差自回归模型、季节模型、异方差模型等。

本项目重点介绍ARIMA模型对非平稳时间序列进行建模。

差分运算:

  1. p阶差分

相距一期的两个序列值之间的减法运算称为1阶差分运算。

  1. k步差分

相距k期的两个序列值之间的减法运算称为k步差分运算。

差分运算具有强大的确定性信息提取能力,许多非平稳序列差分后会显示出平稳序列的性质,这时称这个非平稳序列为差分平稳序列。差分平稳序列可以使用ARMA模型进行拟合。ARIMA模型的实质就是差分运算与ARMA模型的组合。

6 .2 序列平稳性检验

原始序列的自相关图

此图的自相关图显示自相关系数长期大于零,说明序列间具有很强的长期相关性。

原始序列的单位根检验

|---------|---------|---------|---------|--------|
| adf | cValue ||| p值 |
| adf | 1% | 5% | 10% | p值 |
| -2.9113 | -3.4314 | -2.8620 | -2.5670 | 0.0440 |

此表单位根检验统计量对应的p值显著小于0.05,ADF Statistic 小于5%和10%、大于1%,该序列可能为平稳序列。

6 .3 对原始序列进行一阶差分,并进行平稳性和白噪声检验

1)对一阶差分后的序列再次做平稳性判断。

一阶差分之后序列的时序图

一阶差分之后序列的自相关图

一阶差分之后序列的单位根检验

|----------|---------|---------|---------|-----|
| adf | cValue ||| p值 |
| adf | 1% | 5% | 10% | p值 |
| -22.2120 | -3.4314 | -2.8620 | -2.5670 | 0.0 |

结果显示,一阶差分之后序列的时序图在均值附近比较平稳地波动、自相关图有很强的短期相关性、单位根检验p值小于0.05,ADF Statistic 小于所有临界值,所以一阶差分之后的序列是平稳序列。

2)对一阶差分后的序列做白噪声检验

一阶差分之后序列的白噪声检验

|--------|--------|
| stat | p值 |
| 5.6043 | 0.0179 |

此表输出的p值远小于0.05,所以一阶差分之后的序列是平稳非白噪声序列。

6 .4 构建 AR I MA模型

下面进行模型定阶。模型定阶就是确定p和q。

一阶差分后序列的偏自相关图

相对最优模型识别:

计算ARMA(p,q) 当p和q均小于等于3的所有组合的BIC信息量,取其中BIC信息量达到最小的模型阶数。

计算完成BIC矩阵如下:

当p值为1、q值为0时,最小BIC值为7230.327064。p、q定阶完成。即对原始序列建立ARIMA(1,0,0)模型。下面对模型进行分析:

  1. 模型摘要信息:

2.模型检验之残差检验:

残差自相关

残差偏自相关图

残差偏自相关图

D-W检验

DW值显著的接近于0或4时,则存在自相关性,而接近于2时,则不存在自相关性。

D-W检验的结果为:1.8480。因此,模型预测的残差不存在自相关性性,这说明拟合的模型预测效果很好。

残差序列的白噪声检验结果为:(array([5.86603257]), array([0.0154358])),可以看出p值为0.015, P<0.05,说明原假设不成立,序列不是白噪声。

7 . 构建 ARIMA-LSTM 回归模型

主要使用LSTM 模型将以开盘价、最高价和最低价作为输入特征,ARIMA模型预测残差作为输出,用于目标回归。

7 . 1 构建 模型

|------------|--------------|------------|
| 编号 | 模型名称 | 参数 |
| 1 | LSTM神经网络回归模型 | units=96 |
| 2 | LSTM神经网络回归模型 | epochs=100 |

7 . 2 模型摘要信息

LSTM神经网络回归模型:

8 . 模型评估

8 .1评估指标及结果

评估指标主要包括R方、均方误差、解释性方差、绝对误差等等。

|--------------|--------------|-------------|
| 模型名称 | 指标名称 | 指标值 |
| 测试集 |||
| ARIMA模型 | R方 | 0.9947 |
| ARIMA模型 | 均方误差 | 0.1943 |
| ARIMA模型 | 解释方差分 | 0.9947 |
| ARIMA模型 | 绝对误差 | 0.2549 |

从上表可以看出,R方分值为0.9947,说明模型效果良好。

关键代码如下:

|--------------|--------------|-------------|
| 模型名称 | 指标名称 | 指标值 |
| 测试集 |||
| ARIMA-LSTM模型 | R方 | 0.9977 |
| ARIMA-LSTM模型 | 均方误差 | 0.0831 |
| ARIMA-LSTM模型 | 解释方差分 | 0.998 |
| ARIMA-LSTM模型 | 绝对误差 | 0.2043 |

从上表可以看出,R方分值为0.9977,说明模型效果比较好。

关键代码如下:

8 .2 真实值与预测值对比图

ARIMA-LSTM神经网络回归模型:

从上图可以看出真实值和预测值波动基本一致,模型效果良好。

9 . 结论与展望

综上所述,本文采用了ARIMA算法和ARIMA-LSTM算法来构建回归模型,最终证明了ARIMA-LSTM模型效果较好。此模型可用于日常产品的预测。

相关推荐
深蓝海拓5 分钟前
Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
数据库·python·qt·pyqt
IE065 分钟前
深度学习系列76:流式tts的一个简单实现
人工智能·深度学习
GIS数据转换器10 分钟前
城市生命线安全保障:技术应用与策略创新
大数据·人工智能·安全·3d·智慧城市
无须logic ᭄13 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
Channing Lewis26 分钟前
flask常见问答题
后端·python·flask
Channing Lewis27 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
水兵没月1 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
一水鉴天1 小时前
为AI聊天工具添加一个知识系统 之65 详细设计 之6 变形机器人及伺服跟随
人工智能
我想学LINUX2 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试
数据小爬虫@5 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python