寓言中的协调耗尽 RAM

Reconciliation in Fable runs out of RAM

我正在尝试在 中使用 forecast reconciliation 来改进间歇性低层级的预测。但是,我的计算机 运行 除了琐碎的示例外,内存不足。

我的分析基于演示文稿“Tidy Time Series & R 中的预测:10. 预测协调”(位。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)

Error: cannot allocate vector of size 929 Kb

问题 有什么方法可以 运行 在不降低层次结构级别且 运行 内存不足的情况下解决这个问题?谢谢!

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

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

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

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