大型时间序列的预测无法识别日常模式。什么是解决方案?
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)
并得到了正确的结果:
我有一个大型时间序列,用于说明一个国家/地区在 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)
并得到了正确的结果: