Я использовал модель TBATS для своих данных, и когда я применяю функцию прогноза(), она автоматически делает прогноз на два года вперед. Я не указал ни обучающую, ни тестовую выборку, так как мне узнать, сколько данных было использовано для прогнозирования следующих двух лет?
Данные, с которыми я имею дело, — это данные о времени поездок Uber с января 2016 года по январь 2020 года. У меня есть ежедневные данные (частота выборки = 1) для 18 городов, и каждый город имеет разный размер выборки (они варьируются от 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
Если бы мне пришлось вручную выбирать тестовые и обучающие наборы, как мне изменить свой код, чтобы сделать это?
Спасибо! Итак, fc$fitted - y даст мне расстояние между предсказанием и истинным значением, не так ли? И help("forecast.tbats")
говорит мне, что обучающий набор в два раза превышает размер самой большой сезонности, но на каком фрагменте моего набора данных он обучался? Это могут быть первые два года, два года в середине или последние два года.
Если вы используете 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).
См.
help("forecast.tbats")
, аргументh
.