大型时间序列的预测无法识别日常模式。什么是解决方案?

Forecast of a large time-series does not recognise daily patterns. What could be a solution?

我有一个大型时间序列,用于说明一个国家/地区在 10 年期间(2006 年 - 2015 年)的每小时电力需求。基于此,我想按小时预测到 2020 年的未来值。

我根据一些研究尝试了几个函数,最终得到了 stl 模型。我收到的结果如下所示: enter image description here

如您所见,电力需求的时间序列显示出一种每日模式,分别在早上和晚上出现局部高峰。然而,预测的配置文件(此处为蓝色)并未显示此特征,我似乎在努力寻找合适的模型/或拟合时间序列来说明此特征。

在下文中,我向您提供了我的代码,以便您更好地了解我实际做了什么。

## Import Dummy Data
inputfile <- "C:/xxx/ForecastingTool/01_Testing/ConsumptionDataPT2006_2015/ConsumptionData.csv"
mygenerationdata <- read.csv(inputfile)

mygenerationdata$ConsumptionProfile <- ts(mygenerationdata$ConsumptionProfile, start = c(2006,1), frequency = 8764)

## Estimating model
fit.myprofile <- stl(mygenerationdata$ConsumptionProfile, s.window = "periodic", robust = "TRUE")
summary(fit.myprofile)

# Forecasting
## Alternative 1 stl + forecast
fit.forecast <- forecast(fit.myprofile, method="naive", h = 500)
plot(forecast(fit.myprofile, method="naive", h = 500), include = 500)

那么简而言之,我可以做些什么来适当地拟合模型以考虑电力概况的日常模式?

您的数据具有多个季节性:肯定有每日趋势,但也可能有每周和年度趋势。当前,您的 ts 对象的频率为 8764,这意味着您仅捕获年度趋势。为了考虑每日的季节性,您可以将频率设置为 24(忽略每周和每年的趋势以支持每日趋势),或者您可以拟合具有多个季节性的模型。第二种选择可能会带来更好的结果。要进一步阅读,我建议阅读 Rob Hyndman 的《预测》一书,特别是 chapter 11,它提出了处理复杂季节性的几种方法。我还建议您查看 prophet 包。

根据您的推荐,我找到了一个函数 msts,它允许我在我的时间序列中考虑不同的季节性。我修改了我以前代码的以下行:

mygenerationdata$ConsumptionProfile <- 
  ts(mygenerationdata$ConsumptionProfile, start = c(2006,1), frequency = 8764); 

使用:

mygenerationdata$ConsumptionProfile <-
  msts(mygenerationdata$ConsumptionProfile,
       start = c(2006,1),
       seasonal.periods = c(24, 168, 730.5, 8764.8),
       ts.frequency = 8764.8)

并得到了正确的结果: