多步时间序列预测与真实值的标准MAE评估方法咨询
时间序列多步预测的MAE标准计算方式
问题场景
我正在做股票价格的时间序列预测任务,测试集包含65个观测样本,每个样本需要预测未来20天的价格,最终预测值和真实值都是形状为(65, 20)的数组。现在需要计算MAE评估指标,疑惑标准计算方式是只取前20个预测值和真实值对比,还是有其他正确方式?
标准计算逻辑
MAE的核心是所有对应预测-真实值对的绝对误差的平均值,针对多步预测场景:
- 每个测试样本对应20步预测,总共有
65*20=1300个预测-真实值对 - 需要把所有这些对应值一一匹配,计算每个的绝对差,再求整体平均值,这才是能反映模型整体多步预测性能的标准MAE
代码实现对比与修正
你当前代码的问题
你的现有代码中:
preds= preds[0:,1] trues= trues[0:,1]
这一步只提取了每个样本的第2步预测值和真实值(数组索引从0开始),相当于只计算了单步(第2天)的MAE,完全丢失了其他19步的误差信息,无法全面评估模型性能。
正确的实现方式
参考其他开发者的思路,需要先将二维数组展平为一维,让所有预测值和真实值一一对应,再计算MAE:
import numpy as np from sklearn.metrics import mean_absolute_error # 1. 重塑数组到(65,20)的形状 preds = np.array(np.reshape(predictions, (65, 20))) trues = np.array(np.reshape(values, (65, 20))) # 2. 逆标准化(如果之前做了数据标准化处理) preds = mm.inverse_transform(preds) trues = mm.inverse_transform(trues) # 3. 展平数组,将所有预测-真实值对对齐 preds_flat = preds.ravel() # 等价于np.concatenate(preds, axis=0) trues_flat = trues.ravel() # 4. 计算标准MAE mae = mean_absolute_error(trues_flat, preds_flat) print(f"整体多步预测MAE: {mae}")
扩展:分步骤计算MAE
如果需要查看每一步(第1天到第20天)的单独MAE,也可以按列计算:
# 按时间步计算每一步的MAE step_mae = [] for step in range(20): step_mae.append(mean_absolute_error(trues[:, step], preds[:, step])) # 打印每一步结果 for idx, mae_val in enumerate(step_mae, 1): print(f"第{idx}天预测MAE: {mae_val:.4f}")
内容的提问来源于stack exchange,提问作者Mouna Ahmen
相关产品推荐
相关产品推荐

