1

fable パッケージを使用して、階層的な時系列のセットに関する予測を取得しています。すべてのノードで同じ深さを持たない階層を指定したいと思います。

現実的な例:

  • 時系列 B1 と B2 は、時系列 M1 に合計されます。
  • 時系列 M1 と M2 は、階層の最上位にある時系列 T に合計されます。
  • 時系列 M2 は一連の時系列の合計ではありません。それはそれ自身の時系列です。

tsibble次の形式で小さなランダム データ セットを作成します。


library(dplyr)
library(tsibble)
library(fable)

set.seed(1)
B1 <- rnorm(12, mean = 5) + (1:12)
B2 <- rnorm(12, mean = 5)
M2 <- rnorm(12, mean = 25)

ts_data <- tibble(value = c(B1, B2, M2), 
                  month = rep(yearmonth(paste("2020", 1:12, sep="-")), 3), 
                  B = c(rep("B1", 12), rep("B2", 12), rep("B3", 12)), 
                  M = c(rep("M1", 24), rep("M2", 12))) %>%
  as_tsibble(key = c("B", "M"), index = month)

3 つの時系列のそれぞれについて個別の ARIMA モデルを推定し、集計および予測します。

fcsts <- ts_data %>%
  # Specify hierarchy
  aggregate_key(M / B, value = sum(value)) %>%
  # Fit models
  model(arima = ARIMA(value)) %>%
  # Set up reconciliation
  mutate(mint = min_trace(arima)) %>%
  # Produce the forecasts
  forecast(h = 1)

結果が間違っているのではないかと心配する理由は、実際の集計がなくても、調整によって信頼区間が小さくなるという病的な例を作成できるからです。

病理学的例:

  • 時系列 B3 は、T の子である M2 の子です。

前のデータセットをサブセット化して、この例のデータセットを作成します。

ts_data_2 <- ts_data %>% 
  filter(B == "B3")

別々の ARIMA モデルを再び推定し、集計して予測します。

fcsts_2 <- ts_data_2 %>%
  # Specify hierarchy
  aggregate_key(M / B, value = sum(value)) %>%
  # Fit models
  model(arima = ARIMA(value)) %>%
  # Set up reconciliation
  mutate(mint = min_trace(arima)) %>%
  # Produce the forecasts
  forecast(h = 6)

結果は次のとおりです。

> fcsts_2
# A fable: 6 x 6 [1M]
# Key:     M, B, .model [6]
  M            B            .model    month value .distribution
  <chr>        <chr>        <chr>     <mth> <dbl> <dist>       
1 M2           B3           arima  2021 Jan  24.9 N(25, 0.63)  
2 M2           <aggregated> arima  2021 Jan  24.9 N(25, 0.63)  
3 <aggregated> <aggregated> arima  2021 Jan  24.9 N(25, 0.63)  
4 M2           B3           mint   2021 Jan  24.9 N(25, 0.21)  
5 M2           <aggregated> mint   2021 Jan  24.9 N(25, 0.21)  
6 <aggregated> <aggregated> mint   2021 Jan  24.9 N(25, 0.21)  

実際の集計がない場合でも、分散は元の ARIMA モデルの 0.63 から 0.21 に減少します。もちろん、これは照合をまったく使用すべきではない例ですが、ここで分散が減少するという事実は、実際の例では照合が正しく機能しないことを心配させます。

B3 から M2 までの集約を避けるために、現実的な例でモデルを指定する方法はありますか? (B列のレベル「B3」の代わりにNAを使ってみましたが、うまくいきません。)

4

2 に答える 2