



1. 研究背景
股票价格预测是金融时间序列分析中的核心问题。由于股价具有非线性、高噪声和非平稳等特征,传统线性模型(如ARIMA)难以充分捕捉其动态规律。非线性自回归外生(NARX)神经网络能够结合历史收盘价的自回归项与外部影响因素(成交量、开高低价),对复杂非线性关系进行建模。为了减少人工调参的主观性和计算成本,引入贝叶斯优化(BO)自动确定最优超参数(滞后阶数、隐藏层大小、正则化系数),从而提升预测精度与模型泛化能力。
2. 主要功能
- 读取股票日线数据(日期、成交量、开盘价、最高价、最低价、收盘价),按8:2划分训练集与测试集;
- 将所有特征(成交量、开高低收)进行Z-score标准化(基于训练集均值和标准差);
- 使用贝叶斯优化搜索最优超参数组合(滞后阶数、隐藏层神经元数、正则化参数);
- 基于最优超参数训练最终NARX神经网络模型;
- 在测试集上预测收盘价,并计算MSE、RMSE、MAE、MAPE四个误差指标;
- 绘制实际值与预测值对比曲线及残差图。
3. 算法步骤
-
数据预处理
- 导入
PriceData.xlsx,提取各列特征; - 计算训练集的均值与标准差,对全部数据进行标准化;
- 按80%比例划分训练/测试集。
- 导入
-
贝叶斯优化超参数
- 定义优化变量:
lag∈[1,10]整数、hiddenSize∈[5,30]整数、lambda∈[1e-5,1e-1]对数变换; - 目标函数:在训练集内再划分20%作为验证集,构造NARX设计矩阵(包含收盘价滞后及外生变量滞后),训练前馈神经网络,返回验证集上的均方误差(MSE);
- 执行30次优化评估,采用期望改进(EI)采集函数,记录最小验证MSE对应的超参数。
- 定义优化变量:
-
最终模型训练
- 使用全部训练数据,以最优超参数构建神经网络(Levenberg-Marquardt训练,90%训练/10%验证,早停轮数15);
- 得到训练好的网络模型。
-
测试集预测与评估
- 基于训练集尾部数据构造测试样本的滞后特征;
- 将预测值反标准化还原为真实价格尺度;
- 计算误差指标并绘图。
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,fminf_{\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%。