【问题标题】:Forecast of a large time-series does not recognise daily patterns. What could be a solution?大时间序列的预测无法识别每日模式。有什么解决办法?
【发布时间】:2019-04-03 11:10:57
【问题描述】:

我有一个很大的时间序列来计算一个国家在 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)

简而言之,我可以做些什么来适当地拟合模型以解释电力配置文件的日常模式?

【问题讨论】:

    标签: r time-series forecasting


    【解决方案1】:

    根据您的建议,我找到了一个函数 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)
    

    并得到了正确的结果:

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 非常感谢您的快速回复!我已经阅读了很多关于 Rob Hyndman 的内容,但找不到解决我的“问题”的方法。我会看看你提出的书和先知包。非常感谢!
      • 如果我提供的信息有帮助,您介意将问题标记为已回答吗?如果您还有其他问题,请告诉我您还需要什么信息,或者提出一个新问题。
      • 根据您的建议,我找到了一个函数msts,它可以让我解释我的时间序列中的不同季节性。我修改了之前代码的以下行:mygenerationdata$ConsumptionProfile &lt;- ts(mygenerationdata$ConsumptionProfile, start = c(2006,1), frequency = 8764);使用:mygenerationdata$ConsumptionProfile &lt;- msts(mygenerationdata$ConsumptionProfile, start = c(2006,1), seasonal.periods = c(24, 168, 730.5, 8764.8),ts.frequency = 8764.8) 并得到了正确的结果!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 2023-04-09
      • 2020-02-16
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多