生成长期预测,包括 prophet 和 temporal aggregation (thief)
Generating long-term forecasts including prophet and temporal aggregation (thief)
我刚开始使用 {fable}
和 {tidyverts}
系列工具,到目前为止一切顺利。
我目前有兴趣根据每日数据生成长期 概率预测 (每月或每季度的决议是好的或首选)。我的理解是,时间聚合可以帮助减少模型的不确定性,并将已知的日常影响(尤其是假期影响)传播到例如。季度水平并以这种方式提高准确性。
对于我计划使用 prophet + 协变量的每日数据,对于更高的聚合(每月到每年)指数平滑似乎是合适的。
虽然我想知道这种方法是否总体上很有希望,但我不太确定如何使用 {thief}
构建预测问题以得出概率预测。
PS:我发现这对每小时数据很有帮助 post,但我 运行 遇到了为每日数据实施它的问题(例如创建有意义的聚合和组合预测) : https://stats.stackexchange.com/questions/352121/how-to-forecast-hourly-as-well-as-daily-data-in-r
要使用 {thief}
生成概率预测,您需要将寓言转换为 {forecast}
样式 forecast
对象。 forecast
对象的基本最小结构(以及它如何从寓言分布中产生,可以通过 {fable.prophet}
为先知获得)是:
library(forecast)
library(distributional)
dist <- dist_normal(1:10)
structure(
list(
# A time series of the forecast means
mean = ts(mean(dist)),
# A matrix time series of the forecast interval's upper bound
upper = ts(cbind("80%" = quantile(dist, 0.90), "95%" = quantile(dist, 0.975))),
# A matrix time series of the forecast interval's lower bound
lower = ts(cbind("80%" = quantile(dist, 0.10), "95%" = quantile(dist, 0.025))),
# A vector containing forecast interval levels in order of appearance
level = c(80, 95)
),
class = "forecast"
)
#> Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
#> 1 1 -0.2815516 2.281552 -0.95996398 2.959964
#> 2 2 0.7184484 3.281552 0.04003602 3.959964
#> 3 3 1.7184484 4.281552 1.04003602 4.959964
#> 4 4 2.7184484 5.281552 2.04003602 5.959964
#> 5 5 3.7184484 6.281552 3.04003602 6.959964
#> 6 6 4.7184484 7.281552 4.04003602 7.959964
#> 7 7 5.7184484 8.281552 5.04003602 8.959964
#> 8 8 6.7184484 9.281552 6.04003602 9.959964
#> 9 9 7.7184484 10.281552 7.04003602 10.959964
#> 10 10 8.7184484 11.281552 8.04003602 11.959964
由 reprex package (v0.3.0)
于 2020-12-10 创建
然后,您可以将这些预测结构与 thief::reconcilethief()
结合使用来协调它们。
也就是说,目前正在为 {fable}
开发时间(和跨时间)协调。相关开发问题在这里:https://github.com/tidyverts/fabletools/issues/59
将每日或次日时间与尚未实施的月度和年度层次结构相协调存在一些复杂性,但该原型目前适用于>月度底层。最近在 ISF2020 上的演讲介绍了 {fable}
的时间协调:https://www.youtube.com/watch?v=6D7rNHZ5E-Q&t=1120
值得注意的是,{thief}
的间隔只是较高时间频率间隔的总和。这些间隔不是最优的,因此将不同于 {fable}
.
给出的最优概率预测分布
我刚开始使用 {fable}
和 {tidyverts}
系列工具,到目前为止一切顺利。
我目前有兴趣根据每日数据生成长期 概率预测 (每月或每季度的决议是好的或首选)。我的理解是,时间聚合可以帮助减少模型的不确定性,并将已知的日常影响(尤其是假期影响)传播到例如。季度水平并以这种方式提高准确性。
对于我计划使用 prophet + 协变量的每日数据,对于更高的聚合(每月到每年)指数平滑似乎是合适的。
虽然我想知道这种方法是否总体上很有希望,但我不太确定如何使用 {thief}
构建预测问题以得出概率预测。
PS:我发现这对每小时数据很有帮助 post,但我 运行 遇到了为每日数据实施它的问题(例如创建有意义的聚合和组合预测) : https://stats.stackexchange.com/questions/352121/how-to-forecast-hourly-as-well-as-daily-data-in-r
要使用 {thief}
生成概率预测,您需要将寓言转换为 {forecast}
样式 forecast
对象。 forecast
对象的基本最小结构(以及它如何从寓言分布中产生,可以通过 {fable.prophet}
为先知获得)是:
library(forecast)
library(distributional)
dist <- dist_normal(1:10)
structure(
list(
# A time series of the forecast means
mean = ts(mean(dist)),
# A matrix time series of the forecast interval's upper bound
upper = ts(cbind("80%" = quantile(dist, 0.90), "95%" = quantile(dist, 0.975))),
# A matrix time series of the forecast interval's lower bound
lower = ts(cbind("80%" = quantile(dist, 0.10), "95%" = quantile(dist, 0.025))),
# A vector containing forecast interval levels in order of appearance
level = c(80, 95)
),
class = "forecast"
)
#> Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
#> 1 1 -0.2815516 2.281552 -0.95996398 2.959964
#> 2 2 0.7184484 3.281552 0.04003602 3.959964
#> 3 3 1.7184484 4.281552 1.04003602 4.959964
#> 4 4 2.7184484 5.281552 2.04003602 5.959964
#> 5 5 3.7184484 6.281552 3.04003602 6.959964
#> 6 6 4.7184484 7.281552 4.04003602 7.959964
#> 7 7 5.7184484 8.281552 5.04003602 8.959964
#> 8 8 6.7184484 9.281552 6.04003602 9.959964
#> 9 9 7.7184484 10.281552 7.04003602 10.959964
#> 10 10 8.7184484 11.281552 8.04003602 11.959964
由 reprex package (v0.3.0)
于 2020-12-10 创建然后,您可以将这些预测结构与 thief::reconcilethief()
结合使用来协调它们。
也就是说,目前正在为 {fable}
开发时间(和跨时间)协调。相关开发问题在这里:https://github.com/tidyverts/fabletools/issues/59
将每日或次日时间与尚未实施的月度和年度层次结构相协调存在一些复杂性,但该原型目前适用于>月度底层。最近在 ISF2020 上的演讲介绍了 {fable}
的时间协调:https://www.youtube.com/watch?v=6D7rNHZ5E-Q&t=1120
值得注意的是,{thief}
的间隔只是较高时间频率间隔的总和。这些间隔不是最优的,因此将不同于 {fable}
.