BO-NARX贝叶斯优化非线性自回归外生模型股票价格预测,MATLAB代码




1. 研究背景

股票价格预测是金融时间序列分析中的核心问题。由于股价具有非线性、高噪声和非平稳等特征,传统线性模型(如ARIMA)难以充分捕捉其动态规律。非线性自回归外生(NARX)神经网络能够结合历史收盘价的自回归项与外部影响因素(成交量、开高低价),对复杂非线性关系进行建模。为了减少人工调参的主观性和计算成本,引入贝叶斯优化(BO)自动确定最优超参数(滞后阶数、隐藏层大小、正则化系数),从而提升预测精度与模型泛化能力。

2. 主要功能

  • 读取股票日线数据(日期、成交量、开盘价、最高价、最低价、收盘价),按8:2划分训练集与测试集;
  • 将所有特征(成交量、开高低收)进行Z-score标准化(基于训练集均值和标准差);
  • 使用贝叶斯优化搜索最优超参数组合(滞后阶数、隐藏层神经元数、正则化参数);
  • 基于最优超参数训练最终NARX神经网络模型;
  • 在测试集上预测收盘价,并计算MSE、RMSE、MAE、MAPE四个误差指标;
  • 绘制实际值与预测值对比曲线及残差图。

3. 算法步骤

  1. 数据预处理

    • 导入PriceData.xlsx,提取各列特征;
    • 计算训练集的均值与标准差,对全部数据进行标准化;
    • 按80%比例划分训练/测试集。
  2. 贝叶斯优化超参数

    • 定义优化变量:lag∈[1,10]整数、hiddenSize∈[5,30]整数、lambda∈[1e-5,1e-1]对数变换;
    • 目标函数:在训练集内再划分20%作为验证集,构造NARX设计矩阵(包含收盘价滞后及外生变量滞后),训练前馈神经网络,返回验证集上的均方误差(MSE);
    • 执行30次优化评估,采用期望改进(EI)采集函数,记录最小验证MSE对应的超参数。
  3. 最终模型训练

    • 使用全部训练数据,以最优超参数构建神经网络(Levenberg-Marquardt训练,90%训练/10%验证,早停轮数15);
    • 得到训练好的网络模型。
  4. 测试集预测与评估

    • 基于训练集尾部数据构造测试样本的滞后特征;
    • 将预测值反标准化还原为真实价格尺度;
    • 计算误差指标并绘图。

4. 技术路线

  • NARX模型 :将收盘价的lag阶滞后值以及外生变量(成交量、开盘价、最高价、最低价)的lag阶滞后值共同作为输入,当前时刻收盘价作为输出,由单隐层前馈神经网络逼近非线性映射。
  • 贝叶斯优化:以高斯过程为代理模型,利用采集函数平衡探索与开发,高效寻找使验证损失最小的超参数组合。
  • 正则化 :在训练损失中加入lambda * (权重平方和),抑制过拟合。
  • 数据标准化:消除量纲差异,加速神经网络收敛。

5. 公式原理

  • 标准化

xnorm=x−μtrainσtrain x_{\text{norm}} = \frac{x - \mu_{\text{train}}}{\sigma_{\text{train}}} xnorm=σtrainx−μtrain

  • NARX 模型
    y(t)=f(y(t−1),...,y(t−d),  x1(t−1),...,xm(t−d)) y(t) = f\big( y(t-1), \dots, y(t-d),\; x_1(t-1), \dots, x_m(t-d) \big) y(t)=f(y(t−1),...,y(t−d),x1(t−1),...,xm(t−d))

    其中 y(t)y(t)y(t) 为收盘价,x1,...,xmx_1,\dots,x_mx1,...,xm为外生变量(成交量、开高低价),ddd为滞后阶数,fff由单隐层神经网络实现。

  • 损失函数(含正则化)
    L=1N∑i=1N(yi−y^i)2+λ∑jwj2 L = \frac{1}{N}\sum_{i=1}^{N}(y_i - \hat{y}i)^2 + \lambda \sum{j} w_j^2 L=N1i=1∑N(yi−y^i)2+λj∑wj2

  • 贝叶斯优化

    最大化采集函数 α(θ)=E[max⁡(0,fmin⁡−f(θ))]\alpha(\theta) = \mathbb{E}[\max(0, f_{\min} - f(\theta))]α(θ)=E[max(0,fmin−f(θ))](期望改进),其中 f(θ)f(\theta)f(θ) 为验证MSE,fmin⁡f_{\min}fmin 为当前最优值。

6. 参数设定

参数类别 取值/范围 说明
训练/测试划分 80% / 20%
滞后阶数 [1, 10] 整数 贝叶斯优化搜索空间
隐藏层大小 [5, 30] 整数 贝叶斯优化搜索空间
正则化系数 λ [1e-5, 1e-1] 对数变换 贝叶斯优化搜索空间
训练算法 trainlm (Levenberg-Marquardt)
最大迭代轮数 200(优化中)/ 300(最终模型)
早停耐心值 10(优化中)/ 15(最终模型)
贝叶斯优化评估次数 30
随机种子 2024 保证可重复性

7. 运行环境

  • 软件 :MATLAB(需包含以下工具箱)
    • 神经网络工具箱(fitnet, train
    • 统计与机器学习工具箱(bayesopt 及相关函数)
    • MATLAB 基本环境(readtable, plot 等)
  • 输入数据PriceData.xlsx 文件,包含工作表 PriceData,列顺序为 Dates, Volume, Open, High, Low, Close。
  • 输出:命令行打印最佳超参数与测试集误差,并显示预测对比图、残差图。

8. 应用场景

  • 金融时间序列预测:对个股或指数的收盘价进行短期预测,辅助投资决策。
  • 量化交易策略:将预测值作为交易信号(例如当预测上涨幅度超过阈值时触发买入)。
  • 风险管理:预测未来价格波动区间,用于设置止损或仓位调整。
  • 学术研究:作为非线性时间序列建模的基准方法,验证贝叶斯优化在金融预测中的有效性。

注:上述分析基于提供的MATLAB代码与Excel数据文件,代码已成功运行并输出最佳超参数(lag=7, hiddenSize=21, λ=0.0033)及测试集MAPE=2.12%。

相关推荐
Evand J2 小时前
【MATLAB代码介绍】三维环境下的IMM(交互式多模型),使用CV和CT模型,EKF作为滤波,目标高精度、自适应跟踪定位
开发语言·算法·matlab·imm·代码介绍
哈伦20192 小时前
第七章 回归案例(三)客户流失预警逻辑回归
数据挖掘·回归·逻辑回归
chao1898442 小时前
具有飞行约束的无人机MPC MATLAB实现
开发语言·matlab·无人机
南宫萧幕2 小时前
从零构建飞行汽车混合动力能量管理系统(含电池、增程器与EMS策略)
matlab·汽车·控制·pid
哈伦20193 小时前
第七章 回归案例(一)波士顿房价预测
人工智能·数据挖掘·回归
fengfuyao9853 小时前
MATLAB计算任意倾斜平面的太阳辐射量,包括直射、散射和反射分量
算法·matlab·平面
哈伦20193 小时前
第七章 回归案例(二)美国爱荷华州埃姆斯地区房价预测
人工智能·数据挖掘·回归
南宫萧幕13 小时前
自控PID+MATLAB仿真+混动P0/P1/P2/P3/P4构型
算法·机器学习·matlab·simulink·控制·pid
神仙别闹17 小时前
基于 MATLAB 实现的 DCT 域的信息隐藏
开发语言·matlab