时间序列预测交叉验证

时间:2021-01-18 19:44:40

标签: r time-series cross-validation arima

该项目基于 2010 年 1 月 4 日至 2016 年 10 月 30 日期间比利时电价的小时时间序列。我的数据集是上面的:

训练集:

> dput(head(data1))
structure(list(datetime_utc = c("2010-01-04 00:00:00", "2010-01-04 01:00:00", 
"2010-01-04 02:00:00", "2010-01-04 03:00:00", "2010-01-04 04:00:00", 
"2010-01-04 05:00:00"), Generation_BE = c(13143.7, 13143.7, 13143.7, 
13143.7, 13143.7, 13143.7), Generation_FR = c(63599, 62212, 62918, 
62613, 62432, 63411), Prices.BE = c(37.15, 33.47, 28, 21.29, 
16.92, 28), holidaysBE = c(0L, 0L, 0L, 0L, 0L, 0L)), row.names = c(NA, 
6L), class = "data.frame")

测试集:

> dput(head(data2))
structure(list(datetime_utc = c("2016-10-24 00:00:00", "2016-10-24 01:00:00", 
"2016-10-24 02:00:00", "2016-10-24 03:00:00", "2016-10-24 04:00:00", 
"2016-10-24 05:00:00"), Generation_BE = c(9615.7075, 9626.865, 
9648.0025, 9668.42, 9681.805, 9688.425), Generation_FR = c(45605L, 
44629L, 44073L, 44359L, 44056L, 44799L), Prices.BE = c(44.6, 
40.92, 37.39, 36.4, 33.01, 37.89), holidaysBE = c(0L, 0L, 0L, 
0L, 0L, 0L)), row.names = c(NA, 6L), class = "data.frame")

我应该使用时间序列预测方法来预测比利时价格 (Prices.Be) 的时间序列,考虑范围为 168(未来 7 天的每小时预测)。对于这个构造,我必须使用训练集数据。

我已经制作了时间序列:

library(dplyr)
library(zoo)

colSums(is.na(data1))
newdata1 <- data1 %>% 
  mutate(across(where(~ is.numeric(.) && anyNA(.)), 
                na.aggregate, FUN = median)) 
colSums(is.na(newdata1))
# Extract Belgium prices time series from data 
belgiump_ts <- ts(newdata1$Prices.BE, start = as.Date("2001-01-01"), frequency = 365*24)

所以,我决定选择 ARIMA 模型来实现对时间序列的预测。 我面临的问题是我不知道如何创建 ARIMA 预测的交叉验证??? 我对此很困惑,我无法理解如何面对这些困难。我无法考虑如何开始构建这个。

0 个答案:

没有答案