1

我试图forecast reconciliation中使用来改善低、间歇性层次结构的预测。但是,我的计算机内存不足,除了一些琐碎的例子。

我的分析基于演示文稿“R 中的整洁时间序列和预测:10. 预测协调”(bit.ly/fable2020,呈现于 rstudio::conf 2020)中的示例代码:

tourism %>%
  aggregate_key(Purpose * (State / Region), Trips = sum(Trips)) %>%
  model(ets = ETS(Tripsl)) %>%
  reconcile(ets_adjusted = min_trace(ets)) %>%
  forecast(h = 2)

这运行良好,即使在我的 8 GB RAM 笔记本电脑上也是如此。

但是,我们的数据比此示例具有更多的层次结构级别和分组,并且代码永远无法完成。作为一个可重现的示例,我在“tsibble::tourism”数据集中添加了三个虚拟级别,并将它们包含在aggregate_key. 即使在我的 50 GB RAM 服务器上,这也会耗尽内存!

tourism %>% mutate(Region1 = Region, Region2 = Region, Region3 = Region) %>% 
  aggregate_key(Purpose * (State / Region/ Region1 / Region2 / Region3), Trips = sum(Trips)) %>%
  model(ets = ETS(Trips)) %>%
  reconcile(ets_adjusted = min_trace(ets)) %>%
  forecast(h = 2)

错误:无法分配大小为 929 Kb 的向量

问题有没有什么方法可以在不降低层次结构和内存不足的情况下运行它?谢谢!

4

1 回答 1

3

感谢您对寓言的兴趣。在 fabletools (0.1.2) 的当前 CRAN 版本中,协调是实验性的,作为其中的一部分,我们将界面设计/实验优先于性能。

作为该实验的一部分,我们正在尝试寻找新的方法来灵活地识别聚合结构并构建适当的求和矩阵。正如您的示例所指出的那样,目前的方法似乎并不适合深度嵌套系列。

我编写了一个替代算法,我认为在这些情况下它在时间和空间复杂度方面表现更好。这应该允许您在不使用太多内存的情况下计算分层预测。

更新:此更改现已在 fabletools 的 0.1.3 版中发布。

于 2020-02-26T13:44:33.077 回答