【问题标题】:What are the default train and test set sizes for the forecast() function in R?R 中的 forecast() 函数的默认训练集和测试集大小是多少?
【发布时间】:2021-04-02 00:48:02
【问题描述】:

我对我的数据使用了 TBATS 模型,当我应用 forecast() 函数时,它会自动预测未来两年。我没有指定任何训练集或测试集,那么我怎么知道它使用了多少数据来预测未来两年?

我要处理的数据是 2016 年 1 月到 2020 年 1 月的 Uber 出行时间数据。我有 18 个城市的每日数据(采样频率 = 1),每个城市都有不同的样本量(范围从 1422 天到1459 天)。

我已将旅行时间向量设置为msts 对象,因为它具有多个季节性,用于 TBATS 模型。

当我计算 RMSE、MAE、MAPE 和 MSE 时,我通常会得到非常低的值,那么我如何知道 TBATS 正在训练哪些数据?

这是我的代码:

data <- read.csv('C:/users/Datasets/Final Datasets/final_a.csv', TRUE, ",")
y <- msts(data$MeanTravelTimeSeconds, start=c(2016,1), seasonal.periods=c(7.009615384615385, 30.5, 91.3, 365.25))

fit <- tbats(y)
plot(fit)
fc <- forecast(fit)
autoplot(fc, ylab = "Travel Time in Seconds")

# Check residuals (ACF and histogram)
checkresiduals(fc)

# RMSE
rmse <- sqrt(fit$variance)

# MAE
res <- residuals(fit)
mae <- mean(abs(res))

# MAPE
pt <- (res)/y
mape <- mean(abs(pt))

# MSE (Mean Squared Error)
mse <- mean(res^2)

TBATS 模型在阿姆斯特丹的性能结果是:

RMSE: 0.06056063
MAE: 0.04592825
MAPE: 6.474616e-05
MSE: 0.00366759

如果我必须手动选择测试集和训练集,我应该如何修改我的代码才能这样做?

【问题讨论】:

  • help("forecast.tbats"),论据h
  • 谢谢!所以 fc$fitted - y 会给我预测和真实值之间的距离,不是吗? help("forecast.tbats") 告诉我训练集的大小是最大季节性的两倍,但它是在我的数据集的哪个 sn-p 上训练的?可能是前两年,中间两年或最后两年。

标签: r time-series dataset training-data forecast


【解决方案1】:

如果您像以前一样使用forecast(fit),您会得到训练数据中的拟合值。

如果您也想使用测试集,请参见下面的示例。您使用拟合模型预测到水平 h 并与已知数据集进行比较。

library(forecast)

# Training Data
n_train <- round(length(USAccDeaths) * 0.8)
train <- head(USAccDeaths, n_train)

# Test Data
n_test <- length(USAccDeaths) - n_train
test <- tail(USAccDeaths, n_test)

# Model Fit
fit <- tbats(train)

# Forecast for the same horizion as the test data
fc <- forecast(fit, n_test)

# Point Forecasts 
fc$mean
#            Jan       Feb       Mar       Apr       May       Jun       Jul
# 1977                      7767.513  7943.791  8777.425  9358.863 10034.996
# 1978  7711.478  7004.621  7767.513  7943.791  8777.425  9358.863 10034.996
#            Aug       Sep       Oct       Nov       Dec
# 1977  9517.860  8370.509  8706.441  8190.262  8320.606
# 1978  9517.860  8370.509  8706.441  8190.262  8320.606

test # for comparison with the point forecasts
#        Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
# 1977              7726  8106  8890  9299 10625  9302  8314  8850  8265  8796
# 1978  7836  6892  7791  8192  9115  9434 10484  9827  9110  9070  8633  9240

看看像下面这样的图会如何表现会很有趣。

autoplot(USAccDeaths) + autolayer(fc) + autolayer(fitted(fit))
#autoplot(USAccDeaths) +  autolayer(fitted(fit))

【讨论】:

  • 谢谢!只是为了澄清:这是否意味着我的预测值是 fc$mean?如果是这样,在这种情况下 fc$fitted 是什么意思?
  • fc$fitted 是拟合值 - 应用于训练数据的拟合模型。
  • 所以当我计算 RMSE、MAE 等时,只使用forecast(fit)(没有将我的数据分成训练集和测试集),我应该将哪些值用于预测值和真实值?我刚看到你编辑。橙线和黑线有什么区别?
  • 所以在这种情况下,黑线是 y(真实值),橙色线是拟合值(训练数据)。但是训练数据怎么可能与真实值不同呢?抱歉扩展了这个,我只是不太明白训练集、拟合值、预测以及它们代表的线之间的区别。
  • 训练数据,黑线,是y——真实数据。拟合值是 y 减去误差项 (y_t - e_t)。
猜你喜欢
  • 2013-06-18
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 2020-01-21
  • 2016-06-29
  • 1970-01-01
  • 2015-04-21
  • 2021-08-06
相关资源
最近更新 更多