You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言fable包中分层调和预测的Bootstrap模拟路径疑问

fable包分层调和预测的Bootstrap模拟路径解析

问题背景

在使用R语言fable包做分层调和预测时,发现非Bootstrap场景下,底层基线模型(ets)和自底向上调和模型(bu)的点预测完全一致,符合预期;但开启Bootstrap模拟后,两者的样本预测路径却出现了差异,并非先模拟基线再调和的逻辑。

非Bootstrap场景验证(引用《Forecasting Principles and Practice》第11.2节代码)

library(fpp3)

tourism_states <- tourism |>
  aggregate_key(State, Trips = sum(Trips))
tourism_states |>
  model(ets = ETS(Trips)) |>
  reconcile(bu = bottom_up(ets)) |>
  forecast()

输出结果片段:

#> # A fable: 144 x 5 [1Q]
#> # Key:     State, .model [18]
#>    State  .model Quarter         Trips .mean
#>    <chr*> <chr>    <qtr>        <dist> <dbl>
#>  1 ACT    ets    2018 Q1  N(701, 7651)  701.
#>  2 ACT    ets    2018 Q2  N(717, 8032)  717.
#> ...
#>  9 ACT    bu     2018 Q1  N(701, 7651)  701.
#> 10 ACT    bu     2018 Q2  N(717, 8032)  717.

此时底层ets预测与bu调和预测的.mean值完全一致,符合自底向上调和的逻辑。

Bootstrap场景的意外结果

tourism_states |>
  model(ets = ETS(Trips)) |>
  reconcile(bu = bottom_up(ets)) |>
  forecast(bootstrap=TRUE, times=1)

输出结果片段:

# # A fable: 144 x 5 [1Q]
# # Key:     State, .model [18]
# State  .model Quarter     Trips .mean
# <chr*> <chr>    <qtr>    <dist> <dbl>
# 1 ACT    ets    2018 Q1 sample[1]  650.
# 2 ACT    ets    2018 Q2 sample[1]  671.
# ...
# 9 ACT    bu     2018 Q1 sample[1]  744.
# 10 ACT    bu     2018 Q2 sample[1]  568

此时bu调和预测与ets基线预测的样本路径值完全不同,打破了“先模拟基线再调和”的预期。

核心解释

fable包中Bootstrap模拟的逻辑并非先生成基线模型的样本路径再做调和,而是每个模型(包括基线模型和调和模型)独立基于自身的残差结构生成Bootstrap样本路径:

  • 非Bootstrap时,bottom_up(ets)生成的bu模型直接复用底层ets的点预测,所以两者点预测一致。
  • Bootstrap时:
    • 对于ets基线模型:用该模型拟合得到的残差进行Bootstrap抽样,将抽样得到的误差叠加到点预测上,生成模拟路径。
    • 对于bu调和模型:它会基于调和后的整体误差结构(而非基线模型的残差)进行Bootstrap抽样,生成独立的模拟路径。这相当于重新生成一套符合自底向上调和逻辑的Bootstrap样本,而非对基线的模拟结果做调和处理。

你的猜测方向是对的,但更准确地说,调和模型有专属的残差抽样逻辑,不会复用基线模型的Bootstrap结果,因此两者的模拟路径自然会出现差异。

内容的提问来源于stack exchange,提问作者lowndrul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:23:12