【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列预测|附代码数据

全文链接:https://tecdat.cn/?p=37019

分析师:Haopeng Li

随着我国股票市场规模的不断扩大、制度的不断完善,它在金融市场中也成为了越来越不可或缺的一部分。

【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列预测

基于此,选择合适的模型对股票价格进行精准、可靠的预测变得愈加重要。因为股票市场容易受到经济、政策、心理等多种相关因素的影响,是一个极其复杂的非线性系统,再加上每天大量投资者进行交易产生了非常庞大的交易数据需要处理、增添了股价预测的难度,所以传统的统计方法由于其在适应性、学习能力以及容错能力等方面的局限性,应用在股价预测问题上的结果往往差强人意。而计算机技术与机器学习算法的发展为股价预测开辟了一条新的道路,取得了不俗的成果。BP神经网络就是其中较成熟、应用较广泛的模型之一。选择合适的模型输入变量与优化算法来提高模型与预测的精确度也越来越不可或缺。

数据源准备

数据来自国泰安数据库,选取了中国平安(601318)个股从2017年2月16日到2021年2月16日的日开盘价、日最高价、日最低价、日收盘价、日成交量和日成交额的数据。

特征转换

计算了24个股价相关的技术指标,例如心理线(PSY= n日内上涨总天数/n*100)、布林线(一共含有三条线:中轨线 = n日的移动平均;下轨线 = 中轨线-m*n日收盘价的标准差;上轨线 = 中轨线+m*n日收盘价的标准差),与开盘价、成交量等一共30个指标作为BP神经网络模型的输入变量,并用主成分分析的方法选取了6个主成分,总贡献率达到了0.87。

之后对数据进行了数据归一化,并选择五天的股票相关指标作为模型的输入变量。

构造

以上说明了如何抽取相关特征,我们大致有如下训练样本(只列举部分特征)。

主成分分析前:

主成分分析并数据归一化后:

划分训练集和测试集

将2017年2月16日至2020年5月12日的数据划分为训练集,2020年5月12日至2021年2月16日的数据划分为测试集;其中训练集部分使用5重交叉验证的方法划分验证集来探寻模型的最优参数。经反复多次试验发现网络在1000次之内便能收敛,因此将网络的学习迭代次数设为1000次。为了减小偶然性、增加可信度,本文在验证集与测试集上均重复5次独立试验,取5次试验平均的MSEMAE作为最终的评价结果来比较不同参数与模型的拟合效果。

建模

BP神经网络模型

BP神经网络属于有监督的多层前馈神经网络中的一种,该网络的训练特点为输入工作信号的正向传播与反馈误差信号的反向传递。在正向传播的过程中,输入的工作信号从输入层进入网络,在经过各层的加权变换与激活函数变换后抵达输出层;在这一过程中整个网络的阈值和权值是不进行更新的,且每一层神经元的状态只收到上一层神经元状态的影响。在反向传递的过程中,根据MSE指标计算网络实际输出与期望输出之间的误差,根据该误差反向逐层修改网络的权值与阈值,使得网络的实际输出不断向期望输出逼近。经过上述两个步骤的反复迭代,网络的权值与阈值最终会收敛,学习过程就会停止。1989年Robert Hecht-Nielsen曾证明含有一层隐层的BP神经网络就可以无线逼近任意闭区间内的任意一个连续函数,因此三层BP神经网络便能够实现任意的m维到n维的映射。使用三层BP网络来预测股价。

Lasso回归

假定因变量y是多个自变量x1,…,xp(p≥2)和随机误差项ε的线性函数,则多元线性回归模型可以表示为:

  y=β0+β1x1+…+βpxp+ε=Xβ+ε                   

  其中,y为随机变量,x1,…,xp(p≥2)为确定性的自变量,ε~N(0,σ2)为随机的误差项,β0,..., βp为回归系数。则多元线性回归模型的目标函数为:                                                               minβ||y-||2

在其中加入L1范数惩罚项则得到具有变量选择特征、可以得到稀疏解的Lasso回归模型:

minβ{||y-Xβ||2|β|1}

型优化

特征提取,数据降维,参数调参。

选择Adam优化算法

  1. 隐藏节点的确定

使用公式t=m+n+τ确定隐藏层的最优节点个数范围(其中,t表示隐藏层节点数,m表示输入层节点数,n表示输出层节点数,τ表示1-10之间的常数),因为输入层节点数为150,输出层节点数为1,因此隐藏层的节点数范围为[14,23]。令隐藏层的激活函数为sigmoid函数,输出层的激活函数为Leaky Relu函数,Adam算法初始的学习率设为0.01

  1. 激活函数的确定

  1. 初始学习率的确定

在此案例中,使用Adam算法优化的主成分分析降维的BP神经网络模型预测效果最好,在测试集上拟合的平均MSE0.000641,平均MAE0.019441

Adam优化算法的预测效果也要比SGD优化算法的预测效果好。

Lasso模型因为自身带有变量选择作用,应用在未降维的数据上的效果要比降维数据效果要好,因为在主成分分析降维时会损失一部分原始信息。最终模型选择变量如下所示:

模型预测结果也较好,平均MSE0.000681,平均MAE0.0202

最终因为输入天数的确定具有主观性,因此尝试改变输入天数与训练集大小来观察BP神经网络模型的稳定性。

可以看到降维后的Adam优化BP神经网络模型较稳定,且模型的误差基本都随着输入天数的增加先下降再上升,这是因为当输入天数增加时最开始模型获取的有效信息增加,使模型训练得更加精确,拟合效果更好;但随着输入天数增加过多,新增的股价数据是较久远缺少时效性的数据,提供的干扰信息多于有效信息,因此模型的误差会随后增大。

但市场股价信息只是影响股票价格的一部分因素,更适用于短期股价预测;在中长期股价预测中,要考虑的因素还有很多,例如股票的基本面因素,包括宏观经济分析(CPIGDP、通货膨胀率)、中观经济分析(企业所处的行业相关的情况)和微观经济分析(企业内部运营情况)三大方面的内容。

接下来我们一个实例包含代码和数据来演示如何用神经网络、Lasso回归、线性回归、随机森林进行股票价格预测。

 基于神经网络、Lasso回归、线性回归、随机森林对大型科技股价格预测

数据选择

该数据集包括 14 家不同科技公司的每日股价和交易量,包括苹果 (AAPL)、亚马逊 (AMZN)、Alphabet (GOOGL) 和 Meta Platforms (META) 等

数据导入

数据的时间序列可视化

unique_symbols = stock['stock_symbol'].unique()
colors = ['red', 'blue', 'green', 'purple', 'grey', 'brown', 'cyan', 'magenta', 'yellow', 'black', 'orange', 'pink', '#ADD8E6', '#90EE90']
color_palette = {symbol: colors[i % len(colors)] for i, symbol in enumerate(unique_symbols)}

显示 2010 年至 2023 年股票调整后收盘价的时间序列的折线图。每只股票都由一条不同颜色的线表示,股票代码列在右侧的图例中。这些线显示了股价随时间推移的波动,一些股票显示出显着的增长

探索性数据分析

缺失值

数据集中没有缺失值。('stock_symbol'、'date'、'open'、'high'、'low'、'close'、'adj_close'、'volume')中的每一列都有等于条目总数的非空计数,即 45,088。因此,每列的缺失值百分比为 0.0%,确认数据集是完整的,没有缺失数据。

对图

配对图是一个图表网格,显示每个股票变量(如开盘价和收盘价)与其他变量的关系。对角线上是直方图,显示每个变量出现不同值的频率。对角线的散点图显示了两个变量之间的趋势或模式,例如整个数据中最高价和最低价的比较情况。

numerical_data = stock[['open', 'high', 'low', 'close', 'adj_close', 'volume']]

相关热图

热图显示了不同股票市场变量之间的密切关系,例如开盘价和收盘价。深绿色方块表示非常强的关系,开盘价、最高价、最低价、收盘价和调整后的收盘价都是如此,它们都非常相似。成交量与这些价格的关系不大,如棕色方块所示。

异常

数据集中的异常值可以在每个数值股票列的箱线图中发现,例如开盘价、最高价、最低价、收盘价和调整后的收盘价,以及成交量。描述性统计量显示的值远高于或低于平均值,表明这些是异常值。

数据预处理

数据清理

由于没有缺失值,因此我们不会执行任何插补技术,如均值或中位数插补或基于模型的方法,也不会删除具有缺失值的行/列。

删除异常值

stock_cleaned = remove_outliers(stock, columns_to_check, z_score_threshold)

预测分析

对于我们的预测分析,我们开发了一种综合方法,利用四种不同的机器学习模型,每种模型都因其在预测结果方面的独特优势和能力而被选中。这些模型包括:

  • 线性回归:评估自变量和因变量之间线性关系的基础模型。
  • 套索回归:线性回归的扩展,包含 L1 正则化,有助于特征选择和减少过拟合。
  • 随机森林回归:一种集成学习方法,它使用多个决策树,通过平均结果来生成更准确、更稳健的预测。
  • 多层感知器 (MLP):一类前馈人工神经网络,可以对输入和输出之间的复杂非线性关系进行建模。

通过利用这些模型的多种方法,我们旨在提高预测分析的准确性和可靠性。

线性回归

在线性回归代码中,我们使用一个模型来预测基于其他市场因素(“开盘价”、“最高价”、“最低价”、“收盘价”)的股价(“adj_close”)。该模型使用部分数据进行训练,然后进行测试以查看其预测新数据的程度,表明它通常准确,均方误差为 92.29,R 平方约为 96.8%。最后,我们用图查看预测价格和实际价格之间的差异,注意模型在哪些方面没有完美预测。

model = LinearRegression()

第一张图显示了预测的股票价格与实际价格的比较情况,大多数点位于一条线上,表明预测准确性良好。第二张图显示残差,即实际值和预测值之间的差值;点分散在零线周围,在预测中显示一些误差。第三张图是一个直方图,它告诉我们不同残差发生的频率,大多数接近于零,这表明许多预测接近实际值。

套索回归

在套索回归代码中,我们创建了一个模型,该模型不仅可以预测股票价格,还可以通过减少变量的数量来简化模型,如果某些变量对预测没有多大帮助(这是通过“alpha”值完成的,它控制着这种简化的强度)。该模型的准确率略低于基本线性回归,R 平方约为 96.82%。然后,我们使用散点图和直方图根据实际价格和误差(残差)检查预测。

第一张图将实际股票价值与 Lasso 模型预测的股票价值进行了比较,显示了沿线的紧密聚类,表明预测良好,但存在一些价差。第二张残差图显示了预测值和实际值之间的差异,点集中在零线附近,但对于较高的值,则存在一些较大的偏差。第三张图显示了这些差异的分布,主要以零为中心,这表明预测通常接近实际值,尽管有一些明显的例外。

随机森林回归

在随机森林模型代码中,我们使用一组决策树来预测股票价格,与单个决策树相比,这通常会导致更准确和稳定的预测。该模型显示均方误差为 75.59,R 平方误差为 97.4%,表明其预测与实际值非常接近。我们使用绘图直观地将预测值与实际值进行比较,并分析预测误差(残差)。

第一张图显示了随机森林模型的实际股价与预测股价,大多数点都接近黑线,表示预测准确。第二张图显示了残差,即预测值和实际值之间的差异,散布在水平线周围,对于较高的值,存在一组较大的误差。第三张图是残差直方图,显示大多数预测都非常准确,峰值在零附近,但也有一些更大的误差离零更远。

多层感知器 (MLP)

在多层感知器模型代码中,我们使用一种具有两层处理的神经网络来预测股票价格,网络通过其层“学习”复杂的模式。该模型的均方误差约为 97,R 平方得分约为 96.7%,这意味着它非常擅长做出与实际数据相匹配的预测。我们使用几个图来检查预测值与实际值的比较情况,并查看预测误差,即残差。

第一张图显示了神经网络模型对实际和预测股票价值的比较,主要是沿着这条线,这意味着预测是好的。第二个图是一个残差图,它显示了预测中的一些误差,特别是对于较高的值,因为它们偏离了零线。第三张图是一个直方图,在零附近急剧达到峰值,表明大多数预测接近实际值,但也有一些误差离零更远。

使用 ARIMA 模型进行时间序列预测

该代码准备股票市场数据,并使用 ARIMA 模型预测每只股票的未来调整后收盘价。首先,它将 2023 年初之前的历史数据分开以训练模型。然后,它按日期和股票代码对数据进行分组,选择每个月的最大调整收盘价。对于每只股票,它都会根据历史数据拟合 ARIMA 模型,并使用它来预测 2023 年未来 12 个月的收盘价,并在历史数据旁边用图表显示这些预测。

model = ARIMA(dataf_max_pivot[symbol], order=(5,1,0))
model_fit = model.fit()














关于分析师

  

 在此对Haopeng Li对本文所作的贡献表示诚挚感谢,她在上海财经大学完成了控制工程专业的硕士学位专注人工智能领域。擅长Python、Matlab仿真、视觉处理、神经网络、数据分析 。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新时代多目标优化【数学建模】领域的极致探索——数学规划模型

目录 例1 1.问题重述 2.基本模型 变量定义: 目标函数: 约束条件: 3.模型分析与假设 4.模型求解 5.LINGO代码实现 6.结果解释 ​编辑 7.敏感性分析 8.结果解释 例2 奶制品的销售计划 1.问题重述 ​编辑 2.基本模型 3.模…

【网络】Socket编程

文章目录 正确理解端口号理解源IP地址和目的IP地址认识端口号端口号和进程ID 理解Socket网络字节序socket编程接口创建socket套接字bind绑定套接字listen建立监听accept接受连接connect建立连接sendto发送数据接收数据close关闭套接字 sockaddr结构体 正确理解端口号 理解源IP…

分布式唯一id的7种方案

背景 为什么需要使用分布式唯一id? 如果我们的系统是单体的,数据库是单库,那无所谓,怎么搞都行。 但是如果系统是多系统,如果id是和业务相关,由各个系统生成的情况下,那每个主机生成的主键id就…

Linux网络 -- TCP FIN包发送超时时间设置

使用 SO_LINGER 选项控制FIN包发送的超时时间 技术背景 在TCP连接中,当应用程序调用 close 或 shutdown 函数关闭一个socket时,操作系统内核会发送一个FIN包以通知对端连接即将关闭。默认情况下,内核会等待所有未发送的数据发送完毕后再发送…

使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试

前言 首届YashanDB「迁移体验官」开放后,陆续收到「体验官」们的投稿,小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试》(作者:尚雷)&#xff0c…

PHP宠物店萌宠小程序系统源码

🐾萌宠生活新方式🐾 🏡【一键直达萌宠世界】 你是否也梦想着拥有一家随时能“云撸猫”、“云吸狗”的神奇小店?现在,“宠物店萌宠小程序”就是你的秘密花园!🌟只需轻轻一点,就能瞬…

什么是股指期货交割?股指期货交割的例子

股指期货交割是指在股指期货合约到期时,投资者需要按照合约规定完成的结算过程。与一般的商品期货、国债期货或外汇期货不同,股指期货采用的是现金交割方式。 股指期货交割的方式 【现金交割】股指期货的交割不需要实际交割一篮子股票指数成分股。相反…

(社恐福音)用python写一个定时弹窗功能

背景 背景是换了一个工作,需要点外卖了 写代码太认真的时候又经常忘记 这时候就需要一个闹钟 手机闹钟声音太大 会影响他人 所以用python 写一个弹窗功能,只影响自己 效果图 原理 管理列表和定时功能通过windows自带的计划完成 python程序不用占用后台…

js中! 、!!、?.、??、??=的用法及使用场景

js中! 、 !. 、!、?.、.?、??、??的用法及使用场景 !!!?.??????、?? 区别 !. (ts)注意 ! (非空断言符号) 用于取反一个布尔值或将一个值转换为布尔类型并取反 const a true; const b false; const value !a; // false const value !…

https和http区别

1、安全性 HTTP信息是明文传输,而HTTPS则通过SSL/TLS协议进行加密传输,确保数据传输的安全性。HTTPS可以验证服务器身份,防止中间人攻击,保护数据的完整性和保密性。 2、端口号 HTTP默认使用80端口,而HTTPS默认使用…

最佳实践:设计思维:“6+1”迭代过程的创新实践丨IDCF

谢志萌 研发效能(DevOps)工程师(中级)认证学员 一、前言 “有效的Devops关键在于专注于人员和文化,而不仅仅是工具和技术。” -John Willis 随着数字化转型的加速,组织越来越依赖于快速、高效的软件交…

7月18日学习打卡,数据结构堆

hello大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不…

ARM架构(二)—— arm v7/v8/v9寄存器介绍

1、ARM v7寄存器 1.1 通用寄存器 V7 V8开始 FIQ个IRQ优先级一样, 通用寄存器:31个 1.2 程序状态寄存器 CPSR是程序状态毒存器,保存条件标志位,中断禁止位,当前处理器模式等控制和状态位。每种异常模式下还存在SPSR&…

《系统架构设计师教程(第2版)》第12章-信息系统架构设计理论与实践-02-信息系统架构

文章目录 1. 概述1.1 信息系统架构(ISA)1.2 架构风格 2. 信息系统架构分类2.1 信息系统物理结构2.1.1 集中式结构2.1.2 分布式结构 2.2 信息系统的逻辑结构1)横向综合2)纵向综合3)纵横综合 3. 信息系统架构的一般原理4…

Pandas教程:近万字讲解在Pandas中如何操作Excel

目录 1. 安装与配置 2. 读取Excel文件 2.1 基本用法 2.2 指定工作表 2.3 指定单元格范围 3. 数据检查与预处理 3.1 查看数据的基本信息 3.2 数据类型检查与转换 3.3 检查缺失值 3.4 处理缺失值 4. 数据清洗与转换 4.1 重命名列 4.2 删除重复数据 4.3 数据替换 4…

Android使用ANativeWindow更新surfaceView内容最简Demo

SurfaceView简介 SurfaceView对比View的区别 安卓的普通VIew,都依赖于当前Activity的Window的surface,这个surface用于承载view树从底到顶绘制出来的所有内容,因此任何一个view需要更新时,都需要把所有view中底到顶进行更新,即使使…

解决:Linux上SVN 1.12版本以上无法直接存储明文密码

问题:今天在Linux机器上安装了SVN,作为客户端使用,首次执行SVN相关操作,输入账号密码信息后,后面再执行SVN相关操作(比如"svn update")还是每次都需要输入密码。 回想以前在首次输入…

Python进阶(4)--正则表达式

正则表达式 在Python中,正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它允许你使用一种特殊的语法来匹配、查找、替换字符串中的文本。 在这之前,还记得之前我们是通过什么方法分割…

实习问题总结

为什么使用GRPC作为通信方式,对比如REST好处在哪里? 使用protobuf作为序列化格式,以二进制进行传输,减小了数据包的大小,效率高 proto强类型定义、支持复杂数据类型,编译运行可以进行严格的数据验证&#…

[论文笔记] pai-megatron-patch Qwen2-CT 长文本rope改yarn

更改: # Copyright (c) 2024 Alibaba PAI and Nvidia Megatron-LM Team. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License a…