You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LSTM与GRU做时间序列分析出现负R²值问题咨询

负R²值的原因与含义解释

R²的取值范围纠正

你看到的部分资料里R²取值为0~1是错误认知,R²的实际取值范围为(-∞, 1],只有当模型预测效果优于「直接用真实值的均值作为所有样本的预测结果」的朴素基准时,R²才会落在0到1的区间内。

R²的计算公式为:

R² = 1 - (SSR / SST)
其中SSR为预测值与真实值的残差平方和,SST为真实值与真实值均值的残差平方和

当SSR > SST时,R²就会出现负值,代表模型预测效果比直接猜均值还要差。

你场景下出现负R²的常见原因

结合你给出的代码和金融时序预测的场景,最可能的原因有以下几个:

  • 归一化/反归一化逻辑遗漏:训练时序模型时你大概率对输入特征做了归一化/标准化处理,但你的evaluate_model函数直接用原始测试集数据计算指标,预测输出Y_hat是归一化后的小量级数值,而Y_test是原始的收盘价绝对值,两个序列量级差距极大,计算出的残差平方和SSR远大于SST,就会得到负R²。你视觉上觉得拟合效果好,是因为绘图时会自动对齐两个序列的坐标轴范围,看起来走势贴合,但实际数值误差非常大。
  • 测试集分布漂移:你用的是2020年的股票数据,9-12月的测试区间可能出现了和训练集完全不同的行情走势,模型虽然捕捉到了短期波动趋势,但绝对价格的误差比直接用训练集收盘价均值做预测还要大,也会出现负R²。
  • 数组维度不匹配:检查Y_test和Y_hat的维度是否完全一致,比如有没有其中一个是二维数组、另一个是一维数组的情况,极端情况下会影响r2_score的计算结果。

负R²的实际含义

当前模型完全不具备预测价值,哪怕视觉上拟合效果符合预期,也属于模型失效的情况,无法用于实际落地。

快速排查方案

  1. 输出前10组Y_test和Y_hat的实际数值,直接对比量级差,就能快速定位是不是归一化的问题
  2. 对预测结果做对应特征的反归一化,转回原始收盘价量级后再重新计算R²
  3. 手动计算朴素基准的MSE:将np.mean(Y_test)作为所有样本的预测值计算MSE,和你模型输出的MSE对比,如果模型MSE更高,说明确实是模型拟合效果未达基准要求。

内容的提问来源于stack exchange,提问作者Yohanees Hutagalung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:54:03