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

如何在R中手动复现时间序列ARIMA模型的MAPE计算?

理解并复现ARIMA训练集MAPE计算

一、MAPE的核心计算逻辑

MAPE(平均绝对百分比误差)的计算逻辑是:对每个时间点,计算实际值与模型拟合值的绝对误差占实际值的比例,再取所有点的平均值并转换为百分比。公式如下:

MAPE = (1/n) × Σ(|(实际值 - 拟合值)/实际值|) × 100

需要明确的是:auto.arima返回的训练集MAPE并非通过滚动预测计算,而是基于模型对训练集的**内样本拟合值(in-sample fitted values)**计算的——也就是用整个训练集拟合的模型,直接对每个训练点生成拟合值,再计算误差均值。

二、R中手动复现步骤

以下是完整的验证与复现代码,假设你已经有模拟的时间序列数据:

1. 模拟数据并拟合ARIMA模型

library(forecast)

# 模拟季节性时间序列(示例)
set.seed(123)
sim_ts <- ts(rnorm(100, mean = 50, sd = 5), frequency = 12)

# 用auto.arima拟合季节性ARIMA模型
arima_model <- auto.arima(sim_ts)

2. 提取实际值与拟合值

actual_values <- sim_ts
fitted_values <- fitted(arima_model)  # 获取模型对训练集的拟合值

3. 手动计算MAPE

# 计算每个时间点的绝对百分比误差(APE)
ape <- abs((actual_values - fitted_values) / actual_values)

# 计算平均绝对百分比误差(MAPE)
manual_mape <- mean(ape, na.rm = TRUE) * 100
cat("手动计算的训练集MAPE:", manual_mape, "\n")

4. 与auto.arima的结果对比

用accuracy()函数查看模型自带的评估指标,其中的MAPE值应与手动计算结果一致:

# 查看auto.arima输出的训练集指标
accuracy(arima_model)

三、滚动预测MAPE的计算(若需验证)

如果你想验证滚动预测的MAPE(常用于时间序列交叉验证),可以用tsCV函数实现,这与训练集拟合值的MAPE逻辑不同:

# 滚动一步预测,计算交叉验证误差
tscv_errors <- tsCV(sim_ts, function(x) auto.arima(x), h = 1)

# 计算滚动预测的MAPE
rolling_mape <- mean(abs(tscv_errors / sim_ts[-1]), na.rm = TRUE) * 100
cat("滚动预测的MAPE:", rolling_mape, "\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:25:07