当前位置: 首页 > article >正文

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 用Pandas工具查看数据

使用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值

1%

5%

10%

-2.9113

-3.4314

-2.8620

-2.5670

0.0440

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

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

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

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

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

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

adf

cValue

p值

1%

5%

10%

-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 构建ARIMA模型

下面进行模型定阶。模型定阶就是确定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

epochs=100

7.2 模型摘要信息

LSTM神经网络回归模型:

 

8.模型评估

8.1评估指标及结果  

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

模型名称

指标名称

指标值

测试集

ARIMA模型     

R方

0.9947

均方误差

0.1943

解释方差分

0.9947

绝对误差

0.2549

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

关键代码如下:     

模型名称

指标名称

指标值

测试集

ARIMA-LSTM模型     

R方

0.9977 

均方误差

0.0831

解释方差分

0.998

绝对误差

0.2043 

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

关键代码如下:      

8.2 真实值与预测值对比图  

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

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

9.结论与展望

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


http://www.kler.cn/a/429072.html

相关文章:

  • 浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索
  • 【ESP32】ESP-IDF开发 | WiFi开发 | AP模式 + 基站连接例程
  • protobuf: 通讯录3.1
  • cuda + cudnn安装
  • 接口防篡改+防重放攻击
  • 微透镜阵列精准全检,白光干涉3D自动量测方案提效70%
  • 深入了解架构中常见的4种缓存模式及其实现
  • Linux —— 管理文件
  • yolov10 生成json 自动标注
  • 《Python数据分析:活用pandas库》学习笔记Day1:Panda DataFrame基础知识
  • k8s集群环境时间同步
  • Ethernet 系列(10)-- 基础学习::UDP
  • 突破空间限制!从2D到3D:北大等开源Lift3D,助力精准具身智能操作!
  • 【Linux系统】Ubuntu 缓冲区机制
  • 【在Linux世界中追寻伟大的One Piece】HTTP cookie
  • NDK编译(使用Android.mk)C/C++程序和库
  • pytest(三)json数据驱动
  • flutter实现如何 检测键盘的显示和隐藏状态
  • Github 2024-12-05 Go开源项目日报 Top10
  • 【C++boost::asio网络编程】有关处理粘包问题的笔记
  • dockers网络连接指令:docker network connect
  • 数据结构初阶---链表(2)---双向链表
  • Vue 组件通信全面解析
  • 【text2sql】低资源场景下Text2SQL方法
  • 【CKS最新模拟真题】从ETCD 中读取 Secret的键值
  • mac电脑安装hadoop、hive等大数据组件