ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

黄金期货预测:线性回归与MLP的实证对比

黄金期货预测:线性回归与MLP的实证对比 简介在金融时间序列预测中多元线性回归与多层感知机MLP是两类代表性的建模方法。线性回归以可解释性和高效性见长而MLP通过非线性激活函数具备逼近复杂映射的能力。在量化交易与风险管理场景下如何选择更合适的模型取决于数据中信号的本质。黄金期货价格受宏观因子驱动但日频收益率信噪比极低其可预测模式可能以线性关系为主。本文以上海期货交易所沪金主力合约为样本系统梳理数据清洗、平稳性检验、格兰杰因果检验等流程并设计公平的滚动回测评估。实证结果显示两个模型预测精度几乎持平线性回归在计算成本和解释性上更优。该结论为金融时序建模中模型选型提供了参考也揭示了复杂模型并非必然优于简单基线这一核心观点。 做黄金期货价格预测研究时多元线性回归和多层感知机MLP这两个模型经常被拿来放在天平两端。这次项目我带着“到底谁更适合预测沪金价格”这个疑问把一整条量化研究流程跑了一遍数据清洗、平稳性检验、格兰杰因果检验、两套模型训练、滚动回测验证。结论不是简单的谁赢谁输而是这两个模型在黄金期货这个高噪音、弱信号的市场里各自的边界在哪里。这篇文章我不想只堆结论我会把整个实验设计的逻辑、为什么选这些方法、每一步踩过的坑、以及最终如何公平比较预测准确性都摊开来讲。适合正在做金融时间序列预测相关课题的研究生、刚入门量化交易的开发人员以及所有想搞清楚“线性模型和神经网络在金融预测中到底谁更靠谱”的读者。1. 为什么拿线性回归和MLP硬碰硬——黄金期货预测的建模动机与数据底座1.1 黄金期货的可预测性从哪里来先说一个很多初学者容易搞混的事情黄金期货价格预测和股票价格预测看起来都是价格序列但背后的驱动逻辑差别非常大。黄金是一个具有“避险抗通胀美元计价”三重属性的品种它的价格变动受到美元指数、美债实际利率、地缘风险事件、全球央行购金行为等多重因素影响。这意味着它不像某些小盘股那样容易受到资金操纵也不像加密货币那样完全脱离基本面。理论上它的价格波动中有一部分是可以通过宏观因子解释的这正是建模的空间所在。但话说回来这个“可解释的部分”有多大我在这项研究里做了大量特征工程后发现即使把所有能想到的宏观变量都放进去模型能解释的日频收益率方差也相当有限。这个现象背后是黄金市场已经是一个高度有效的全球定价市场价格在被发现的那一刻就已经反映了大部分公开信息。所以我们做预测本质上是在捕捉“信息反映的滞后性”和“非理性情绪产生的惯性”而不是试图发明一套能精准预知明天的公式。1.2 为什么选择这两个模型做对比很多人在做类似研究时会一上来就上LSTM、Transformer觉得结构越复杂越好。但我这次刻意选择了“最朴素”的多元线性回归和“最经典”的多层感知机神经网络原因有三点。第一这两个模型在理论上代表了两类完全不同的学习范式。线性回归假设因变量与自变量之间是线性叠加关系每个特征对目标的影响是独立的、可加性的而MLP通过隐藏层的非线性激活函数理论上可以逼近任意连续函数能够捕捉特征之间的交互作用和非线性关系。把这两个模型放在同一批数据上训练本质上是在回答一个问题黄金期货收益率的变化规律到底是被线性关系主导还是存在明显的非线性结构第二从工程角度看这两个模型都足够透明、稳定、可复现。线性回归有完整的统计推断框架能给出每个特征的显著性水平和置信区间MLP虽然是个“黑箱”但训练过程可以通过早停、正则化、多随机种子等策略控制。对于一篇量化研究项目来说可解释性和可复现性比单纯的精度数字更重要。第三从对比实验的公平性出发模型的复杂度差异要控制在“考察目标”而不是“资源投入”上。如果我们拿线性回归和一个调参充分的Transformer对比模型性能差距很难归因于“线性vs非线性”而更像是“统计推理vs暴力拟合”的差异。所以这次实验里的MLP没有刻意堆参数量只使用了一个两层隐藏层的结构目的就是让两个模型站在尽量对等的条件下去比较。1.3 数据集构成与来源本次研究的数据范围是上海期货交易所黄金期货主力连续合约的日频行情时间跨度从2010年1月到2023年12月一共约3200个交易日。原始数据包括收盘价、成交量、持仓量三个核心字段。同时我引入了四类外部宏微观变量美元指数DXY日收益率——黄金以美元计价美元走势是黄金价格最重要的反向指标之一美国10年期通胀保值债券TIPS实际收益率——实际利率是黄金持有成本的关键变量布伦特原油期货日收益率——原油价格反映全球通胀预期和大宗商品情绪沪金期货持仓量变化率——反映国内资金参与频度和市场情绪这里有一个容易忽略的点国内外市场的交易日历并不完全一致。国内黄金期货有春节、国庆等长假美国市场也有自己的节假日如果用简单的日期索引左连接经常会出现错位一天甚至好几天的数据残留代码不报错但实验结果的可靠性会大打折扣。我的做法是先分别把各数据源按交易日重采样再做“交易日历对齐”确保每一条样本中所有变量都对应同一个真实交易时段。这块处理细节会在下一节详细展开。2. 数据清洗与特征工程时间序列建模最容易被低估的一环2.1 对齐、缺失值与异常值处理数据处理这步说难不难但一旦出问题后期所有建模工作都会建立在流沙上。我在第一次跑通流程时就遇到过一个大坑当时直接用了Pandas的merge函数把沪金期货和美元指数按日期左连接后来发现美元指数的数据源有部分日期缺失结果导致某几天的特征里混入了前一天的值。这种错位在日频收益率这种量级的数据上不容易被肉眼察觉但模型效果会默默变差。正确的做法是先把所有数据源统一到同一个交易日历上。我是这样操作的定义“核心交易日列表”以沪金期货的交易日为准对每个外部变量先按各自交易日排序然后使用reindex到核心日历缺失值向前填充对极端跳空缺口比如向前填充后仍无法填补的日期直接删除不做插值检查收益率序列的异常值把单日波动超过5个标准差的样本单独标记出来确认是否存在行情事故。另外在特征构造上我不仅使用了原始的宏观变量当日值还加入了它们的滞后项lag 1、lag 2、lag 3。为什么加滞后项因为金融市场对信息的反应往往不是瞬间完成的。美元指数当天的变动可能不会立刻完全反映到沪金期货价格里可能会延迟半天到一天。这些滞后项相当于给了模型一个“消化信息的时间窗口”。2.2 为什么不能用原始价格做回归如果你直接把黄金期货的收盘价当作因变量把美元指数、原油价格等当作自变量跑一个多元线性回归你大概率会得到一个非常“漂亮”的结果R²高达0.9以上各项系数都极其显著。但这个结果是完全虚假的。问题出在“伪回归”上价格序列通常是非平稳的带单位根两个不相关的非平稳序列放在一起回归很容易被趋势带出虚假的显著性关系。这就像北京和纽约的日均气温序列长期来看都在上升或波动但你并不能说北京气温是纽约气温的格兰杰原因。它们之间看似相关其实只是两个带趋势的序列在“各自走路”。所以在实验中我把所有价格类的变量全部转换成了收益率对数一阶差分流量类的变量如持仓量做了变化率处理存量类的变量如实际利率则使用了一阶差分。这是时间序列建模的标准预处理也是后面所有统计检验的基础。2.3 特征标准化与数据泄漏防范线性回归对特征的尺度其实不太敏感因为它自己会学习系数来适配。但神经网络完全不一样特别是使用ReLU激活函数和Adam优化器时如果输入特征的量纲差异太大比如持仓量是几十万手收益率是0.001训练过程会非常不稳定甚至出现梯度爆炸。我的做法是在MLP训练前对全部特征做Z-score标准化。但这里有一个很多初学者都会犯的错误标准化要在训练集上计算均值和标准差再用这组参数去变换验证集和测试集而不能在整个数据集上统一标准化。为什么因为测试集的分布信息一旦混入训练过程模型就相当于“偷看”了未来的数据分布这叫数据泄漏data leakage。在时间序列场景下数据泄漏会更加隐形因为你使用的所有统计量都可能携带未来信息。这次实验中我把标准化器StandardScaler只fit在训练集上然后在验证集和测试集上只做transform。同样要提防的是时间序列的交叉验证和普通交叉验证不一样。普通K折随机打乱数据是线状回归的标准做法但时间序列如果随机打乱训练集里会出现未来数据验证集里会出现过去数据模型就是在拿未来预测过去结果会虚高得离谱。这个问题我会在后面评估章节详细展开。3. 平稳性检验与格兰杰因果检验统计流程如何决定模型上限3.1 平稳性检验——线性模型的“合法地基”在做任何时间序列回归之前必须验证序列的平稳性。平稳性简单说就是序列的均值、方差在时间上保持稳定未来的波动规律和过去一致。如果序列带趋势或者方差随时间变化回归结果就缺少统计推断的有效性基础。我使用的是ADF检验Augmented Dickey-Fuller Test原假设是“序列存在单位根即非平稳”。检验结果如下表变量ADF统计量P值结论沪金期货收盘价-1.870.35非平稳沪金期货日收益率-31.020.000平稳美元指数日收益率-28.440.000平稳布伦特原油日收益率-30.100.000平稳10年期TIPS实际收益率-2.310.17非平稳TIPS实际收益率一阶差分-26.900.000平稳这个表说明了为什么不能直接拿价格建模价格序列的ADF统计量只有-1.87远不能拒绝单位根假设而非平稳序列之间的回归会产生伪回归。而TIPS实际收益率作为存量变量也是非平稳的所以我对它做了一阶差分。最终模型所用变量全部在1%显著性水平下平稳。这里有一个小建议ADF检验的滞后阶数不要随便填。statsmodels里的adfuller函数有一个autolag参数我设置为AIC让程序根据信息准则自动选择最优滞后阶数这样更客观。3.2 格兰杰因果检验——变量的预测力有多少平稳性检验通过之后下一步是回答一个问题外部变量美元指数、原油、实际利率等对沪金期货收益率到底有没有预测能力格兰杰因果检验Granger Causality Test是这个问题最常用的统计工具。它的核心思想是如果加入X的历史值后对Y的预测效果显著优于仅用Y自身历史值做预测那么称X是Y的格兰杰原因。注意格兰杰因果检验并不等同于真正的因果性。它只是说“X的过去信息对Y的未来走势有一定的增量预测力”。这有点像天气预报里的“云层厚度”和“降雨”的关系云层厚不一定导致降雨但云层厚度信息确实能提升降雨预测的准确率这就足够作为建模时选入特征的理由了。本次实验中我用美元指数日收益率、原油日收益率、TIPS实际收益率差分分别对沪金期货日收益率做格兰杰因果检验滞后期从1到5分别尝试最终根据AIC选择最优滞后阶数。结果如下美元指数日收益率在滞后1期时对沪金收益率的格兰杰因果检验P值为0.013在5%水平下显著说明美元指数当天的变动确实会“带动”次日黄金价格的走势布伦特原油日收益率在滞后1期和2期下P值在0.05附近波动边际显著说明大宗商品情绪有一定溢出效应TIPS实际收益率差分在多数滞后期下不显著和理论预期有出入我猜测是因为实际利率是慢变量对黄金的影响更多体现在月频低频维度而非日频。这里我要提醒一句格兰杰因果检验的结果会受到滞后阶数选择的影响。同一个变量滞后1期时显著滞后3期时可能就不显著了。所以研究者不能只看一个滞后阶数的结果就下结论最好做一个敏感性分析把滞后1到5期的结果都列出来看看显著性是否一致。这既是对自己结论负责也是给审稿人看的严谨性。3.3 相关系数分析与多重共线性排查在把变量放入线性回归之前我还检查了各特征之间的相关系数矩阵。为什么因为如果两个变量高度相关比如美元指数和原油在某些时段负相关放进同一个线性回归里会导致多重共线性单个系数的标准误会变大显著性结果不稳定。我用的判断标准是方差膨胀因子VIFVariance Inflation Factor。一般来说VIF超过5就应该引起注意超过10就需要考虑去除变量或做降维。本次实验里所有特征的VIF都小于3这让我对后续线性回归的系数解释比较有信心。顺带一提VIF是对线性回归而言的MLP并没有这个假设约束。所以同一个特征集放进MLP时多重共线性不会影响训练过程但会影响特征重要性的解读。也就是说神经网络可以从高相关变量中提取共同信号但很难告诉我们“到底是哪个变量起作用”。4. 多元线性回归实现用可解释性换精度的基线模型4.1 模型设定与公式多元线性回归是我这场对比实验的“地基模型”。说它“地”不是说它低端而是因为它具备了两个核心优势一是计算开销极小几乎瞬间出结果二是每个特征都有明确的系数、标准误和置信区间解释性强。我的模型设定如下au_ret_t β0 β1*usd_ret_t-1 β2*brent_ret_t-1 β3*d_tips_t-1 β4*oi_change_t-1 β5*au_ret_t-1 ε_t其中au_ret_t沪金期货第t日的收益率目标变量usd_ret_t-1美元指数第t-1日的收益率brent_ret_t-1布伦特原油第t-1日的收益率d_tips_t-1TIPS实际收益率在第t-1日的一阶差分oi_change_t-1沪金持仓量在第t-1日的变化率au_ret_t-1沪金期货收益率滞后一阶用于捕获价格惯性之所以全部使用滞后特征是为了保证模型在预测时只使用第t日之前的数据不会触犯时间穿越的禁忌。这在实际量化策略中也是铁律你预测未来的依据只能是过去的已知信息。4.2 statsmodels实现与结果解读用Python实现这个模型非常直接import statsmodels.api as sm import pandas as pd feature_cols [usd_ret_lag1, brent_ret_lag1, d_tips_lag1, oi_change_lag1, au_ret_lag1] X data[feature_cols].copy() y data[au_ret] # 添加常数项 X sm.add_constant(X) model sm.OLS(y, X).fit() print(model.summary())运行之后几个关键输出项需要重点关注R²本次实验中全样本拟合的R²在0.03到0.06之间波动。这个数字乍看很低但在金融时间序列预测里非常正常。日频收益率的可预测部分本来就极弱大多数时候市场已经把信息消化完了。F统计量虽然R²低但F统计量的P值小于0.001说明整个模型的解释力在统计上是显著的而不是纯噪音。系数符号美元指数收益率的系数为负符合逻辑——美元走强黄金价格承压持仓量变化率系数为正说明资金流入对黄金价格有正向推动。AIC/BIC这两个信息准则用于模型比较值越小说明拟合越好且不大可能过拟合。这里我要特别提醒statsmodels的OLS输出里有一个Durbin-Watson统计量。它衡量的是残差的自相关程度理想值接近2。如果DW值远小于2比如1.2说明残差存在正自相关这意味着标准误被低估系数的显著性可能被高估。我在第一次拟合时DW值大约是1.89处于合理区间于是放心继续。4.3 线性回归的局限与改进尝试尽管线性回归给出了“显著的F检验”和“符合逻辑的系数符号”但它的预测能力在测试集上依然有限。这让我不得不追问是特征不够还是线性假设本身锁死了上限为了回答这个问题我用两种方式做了验证。第一种是在线性模型中加入更多非线性特征比如美元指数的平方项、美元指数与原油的交互项发现R²几乎不变第二种是把目标变量换成周频收益率R²上升到0.1左右说明低频预测的确定性更强。这给我的启示是黄金日频收益率的“信号”本来就非常微弱线性模型能够捕捉到的就是这么多的线性传导关系。如果MLP在测试集上的表现比线性回归好那么改善部分大概率来自非线性关系如果MLP也没有显著提升那就可以判断这个市场环境中非线性结构并不占主导。5. 多层感知机实现神经网络在金融时序上的优与坑5.1 为什么用MLP而不用LSTM或Transformer在部署模型之前你可以会问既然都上神经网络了为什么不直接用LSTM这类项目如果发论文多半会用LSTM一类更“高级”的模型。我的回应是要看你做这项研究的目的是什么。如果目的是“刷一个最高的预测准确率”那确实可以尝试LSTM、GRU、甚至CNN-LSTM混合结构但如果目的是回答“线性模型是否已经足够”这个研究问题MLP这种纯粹的非线性映射器是最合适的对照。MLP不依赖数据的时序结构先验。它把每条样本当作独立输入用全连接层去学习特征之间的非线性组合。如果MLP和线性回归表现相近说明“非线性组合”这一能力对黄金期货预测并无显著增益如果MLP明显更好说明特征间确实存在线性回归无法表达的模式。这个归因在LSTM上就很难做因为LSTM的性能提升可能来自时序建模能力而不是非线性表达能力。5.2 网络结构与输入特征设计MLP的输入特征和线性回归保持完全一致仍然是滞后一期的美元指数收益率、原油收益率、TIPS差分、持仓量变化率和黄金自身滞后收益率。为了让MLP的输入更丰富一些我额外把滞后2期和3期的特征也加入了输入矩阵形成94维特征向量5个原始特征共3个滞后阶共15维同时我加入了一些窗口类特征滚动均值和滚动波动率。网络结构设为一个两层隐藏层MLP输入层15维滞后窗口特征隐藏层164个神经元ReLU激活加Dropout(0.1)隐藏层232个神经元ReLU激活输出层1个神经元无激活函数线性回归头代码实现如下import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras.callbacks import EarlyStopping tf.random.set_seed(42) model Sequential() model.add(Dense(64, activationrelu, input_dimX_train_std.shape[1])) model.add(Dropout(0.1)) model.add(Dense(32, activationrelu)) model.add(Dense(1, activationlinear)) model.compile(optimizeradam, lossmse, metrics[mae]) early_stop EarlyStopping( monitorval_loss, patience20, restore_best_weightsTrue ) history model.fit( X_train_std, y_train, epochs100, batch_size32, validation_split0.1, callbacks[early_stop], verbose0 )为什么选择64-32这样的结构而不是更大的网络因为在数据量只有几千条的情况下过大的网络会迅速进入过拟合状态。金融数据的信噪比极低噪声会先于信号被网络记住。64-32对于15维输入来说已经足够表达多数非线性函数继续加宽加深度只会让验证损失回升得更早。5.3 训练过程中最关键的三个陷阱陷阱一特征标准化必须以训练集为准。我在第2章已经提过但这里再强调一次因为它的影响在神经网络中比线性回归大得多。我用训练集统计量标准化训练集、验证集、测试集代码里体现为from sklearn.preprocessing import StandardScaler scaler StandardScaler() X_train_std scaler.fit_transform(X_train) X_val_std scaler.transform(X_val) X_test_std scaler.transform(X_test)陷阱二随机种子不固定结果不可复现。神经网络初始化权重是随机的每次运行结果都会有些许差异。在金融数据这种信号极弱的场景下两次运行的测试集MAE可能在0.0085到0.0092之间飘动。所以我在项目里固定了三个层面的随机种子Python的random.seed、NumPy的np.random.seed、TensorFlow的tf.random.set_seed。我还把同一次实验重复跑了5次不同随机种子最后取平均值作为模型的最终表现这样能有效排除“某一次运气好”的偶然性。陷阱三早停时机的选择。我设置了patience20意思是验证损失连续20个epoch没有提升就停止。金融数据很容易出现“验证损失先降后升”的过程早停太早模型欠拟合早停太晚模型过拟合。我在实验中还加了一条额外规则restore_best_weightsTrue确保返回的是验证损失最低那一轮的模型权重而不是最后一轮的权重。5.4 训练结果MLP到底赢了没有从训练曲线看训练损失在前10轮快速下降验证损失在20轮左右达到最低点之后开始振荡上升。这是典型的过拟合信号早停机制在第43轮左右触发。测试集上的表现呢这里有几个数字指标多元线性回归MLP5次随机种子均值MAE0.00860.0087RMSE0.01210.0123测试集R²0.0340.028方向准确率53.1%52.6%这个结果让我有些意外但也在意料之中。MLP的表现不仅没有优于线性回归反而在MAE和方向准确率上略逊一筹。从统计角度说这个差距非常小几乎可以看作是两个模型打平。进一步看两模型在特征重要性上的行为有本质差异线性回归明确指出美元指数和原油是主要驱动因子而MLP则把权重分散到了大量节点上很难提取出单一主导特征。这引出了一个更深层的结论在日频黄金期货收益率这个预测任务上线性关系已经捕获了绝大部分可学习信号剩下的是无法被现有特征集解释的纯粹市场噪音。神经网络没有“魔法”它只能从数据中学到确实存在的模式。如果数据本身没有强烈的非线性结构MLP的复杂结构反而容易在噪声中浪费时间。6. 评估体系设计预测对比中的公平性与鲁棒性6.1 为什么不能只用R²判断模型好坏很多同学做模型对比时习惯只盯着R²看。R²高就好R²低就不好。在金融时间序列里这是一件很危险的事。因为R²衡量的是“模型解释的方差占总方差的比例”而日频收益率的方差绝大多数来自不可预测的随机冲击。即使你的模型完美捕捉到了所有可预测部分R²可能也只有0.05。这时候你更需要用一组有多维度的指标来评估模型。我在本次实验中同时记录了四类指标MAE平均绝对误差直观衡量预测值与真实值的平均偏离程度单位与收益率一致RMSE均方根误差对大误差更敏感如果RMSE明显大于MAE说明误差分布有长尾模型在大行情阶段容易失准方向准确率DA预测收益率方向与实际方向一致的比例。这个指标对交易策略尤其重要因为很多策略本质上是做方向判断的胜率与盈亏比结合的日度策略模拟虽然不属于标准回归评估指标但在量化应用场景下用预测信号生成一个简单的“做多做空”策略计算累计收益曲线能直观看出模型是否有实际价值。6.2 时间序列交叉验证的最佳实践除非你想得到一份“看起来特别厉害但根本不可靠”的结果否则千万不要在时间序列上用train_test_split(random_state42)这样随机打乱的划分方式。时间序列数据的核心特征是有序性未来信息不能参与过去的决策。我使用的是“滚动窗口扩展验证法”Expanding Window Validation具体流程如下将数据集按时间升序排列设定初始训练窗口长度为1000个交易日每次扩展训练窗口100个交易日滚动预测未来5个交易日保存每一天的预测值最后统一计算全部预测期的指标。这种设计下模型永远不会看到它需要预测的那个时点的任何信息。实际回测区间覆盖了2018年至2023年包含了几轮美联储加息周期、2020年全球流动性恐慌、2022年俄乌冲突、2023年银行业危机等不同市场环境。时间序列交叉验证的好处就是如果模型在多种市场状态下都能维持相对稳定的预测误差那么结论的鲁棒性会高很多。6.3 模型对比的公平性超参数与计算资源为了让MLP和线性回归的对比尽量公平我在MLP中只使用了最基础的调参手段隐藏层数量和单元数固定优化器用Adam学习率使用默认值0.001。很多人会问为什么不给MLP也做一下GridSearch网格搜索超参数这样MLP的结果可能更强也更公平。我的回答是在量化研究里“公平”和“合理”是两回事。我们不是在比拼“谁调参调得更猛”而是对比“同等工作量下谁的自然表现更好”。线性回归没有超参数网格搜索对线性模型只影响特征选择不影响模型结构如果给MLP一整套网格搜索等于人为给MLP增加投入这种对比偏离了模型本身能力的比较。更实际的原因还有一点在真实交易系统中同样一份特征数据和每日更新机制线性回归从训练到预测只需要毫秒级而MLP需要更多的时间和算力。如果两者预测精度没有显著差异那么在实盘场景下我会无条件选择线性回归——因为省时间、省算力、好解释、易监管。这个思路对从业者来说非常有参考价值。6.4 结果解读方向正确比绝对精度重要综合各轮滚动验证的预测结果我发现一个被很多人忽略的现象预测绝对误差和方向准确率之间并没有强相关。某些时段比如2020年3月全球流动性危机模型误差极大但方向判断反而是对的另一些时段比如长期横盘震荡期误差不大方向准确率却徘徊在50%附近跟抛硬币没有区别。这说明黄金期货市场的“可预测信号”是存在但稀薄的。对交易而言一个60%方向准确率但平均收益幅度很小的信号可能不如一个50%方向准确率但在大行情中能有效捕捉方向转变的信号更有价值。这也是为什么评估模型时我强烈建议大家引入策略模拟环节用信号构建一个最简单的等权重多空策略看看累计收益曲线和夏普比率这样才能真正判断模型预测结果是否“有用”。7. 实操踩坑记录与延伸思考7.1 数据对齐错位最隐蔽的“时间穿越”我在第2章提到了交易日历对齐的问题这里展开讲一个具体踩坑过程。最开始我用的是公共数据源直接下载的CSV文件美元指数和沪金期货的数据日期看起来都一样于是直接按日期merge。后来在检查特征相关性时发现美元指数当日收益率与沪金期货当日收益率的相关系数异常地低几乎为0而理论上两者当日走势应该高度负相关。这让我起了疑心。追查后发现美元指数的数据源有一个“时区标签”问题它记录的日期是美东日期而沪金期货记录的是北京时间。当北京时间上午9点开盘时美东时间是前一天晚上20点——美元指数当天的大部分交易时段美东时间白天还没有发生。这就导致如果直接用日历日对齐模型会在北京时间当天上午用到美东时间当天晚上的数据产生严重的前视偏差。解决方法是用美东日期作为美元指数的“信息到达日”然后手动偏移一天再对齐沪金期货。也就是说美元指数T日的数据在T1日的沪金期货预测中才能使用。这个调整对模型预测结果产生了显著影响——调整后美元指数变量的滞后一期系数从微弱的负值变成了更强的负值模型效果反而更真实了。7.2 伪回归的诱惑R²高不代表模型好另一个让人印象深刻的坑是我在一次探索性实验中尝试用原始价格做回归时R²居然达到了0.96。当时第一反应是“发现了一个超强模型”但冷静下来用ADF去检验残差发现残差本身就是非平稳的。这意味着什么意味着回归结果完全不可靠R²只不过是在描述两个带趋势序列的“虚假同步运动”。这种情况下就算模型的预测曲线和真实价格曲线画在一起非常贴近也毫无意义。因为它的“预测”本质上是用未来的趋势信息拼凑出来的。后来我把实验全部改为收益率预测R²骤降到0.03左右这才是真实世界的映射。这个教训让我在以后看到任何金融模型“高R²”的报告时第一件事就是检查它预测的是原始价格还是收益率。7.3 随机因素对结果的影响MLP跑三遍三个答案我在实验稳定性测试中发现同一个MLP结构、同一份数据只改变随机种子测试集MAE的最大值与最小值之间相差约8%。8%这个波动幅度已经超过了线性回归与MLP之间的性能差距如果不做多随机种子平均就会得出一个完全相反的结论你可能会因为某一次运气好的随机种子宣称MLP优于线性回归换了另一个随机种子结论立刻反转。所以我强烈建议所有涉及神经网络的金融实证研究至少要跑5个以上不同随机种子报告均值和标准差。如果一个模型性能的波动幅度大于它与对比模型的实际差距那“差异”就是统计噪音而不是真实优势。7.4 对后续研究的延伸思考这次实验以“线性回归vs MLP”为核心在日频收益率的预测难度下两者基本打平。但如果你想把这项研究继续往前推进有几个方向值得尝试第一更换目标变量。黄金价格的波动率比如已实现波动率比收益率更容易被模型捕捉。MLP在波动率预测上可能更容易发挥非线性优势因为波动率本身就具有集群性和非线性特征。第二增加特征维度。当前特征集中没有期货期限结构数据、没有市场情绪指标、没有人民币汇率因素。沪金期货以人民币计价美元兑人民币汇率的变化会直接影响沪金价格的定价。加入这些维度可以提高模型捕捉真实驱动因子的能力。第三分市场状态建模。本次实验结果在2020年流动性危机期间出现了明显的误差尖峰说明单一静态模型很难覆盖所有市场状态。可以尝试用马尔可夫区制转换模型或简单的高波动/低波动过滤规则对样本分层在每一层里分别训练和预测。第四用更强的基准模型复盘。如果未来想做更复杂的神经网络结构对比我建议把LSTM、Transformer加进来和MLP放一起但一定要控制变量同样的数据清洗、同样的滚动验证方式、同样的随机种子管理。只有这样才能准确归因不同结构带来的性能差异。回到本文最核心的问题——在中国黄金期货价格预测这个场景下多元线性回归和多层感知机哪一个更准我的答案是它们在统计意义上几乎打平线性回归以微弱优势胜出且计算开销和可解释性远超MLP。这个结论不代表神经网络没有价值而是说明在所有模型都使用相同特征的情况下黄金期货日频收益率中的非线性关系并没有想象中那么强。如果让我给后来者一句建议那就是任何模型对比实验先不要假设复杂模型一定更好先保证数据干净、检验规范、评估公平再去争论模型高下。黄金市场的噪音足够大模型能不能赢很多时候取决于你给它多少可以被学习的信号而不是它有多少参数。本文还有配套的精品资源点击获取
返回列表