10.3 상향식 접근 방식

일관된 예측값(coherent forecast)을 내기 위해 적용하는 한 가지 단순한 기법은 상향식 접근 방식(The bottom-up approach)입니다. 이 접근 방식은 밑바닥 수준에서 각 시계열에 대해 기준 예측값을 먼저 내는 것을 포함합니다. 그리고나서 구조 안의 모든 시계열에 대해 예측값을 내기 위해 높은 단계로 가는 방향으로 더해나갑니다.

예를 들어, 그림 10.1의 계층 구조에 대해, 밑바닥 단계 시계열 각각에 대한 \(h\)-단계-앞 예측값을 다음과 같이 먼저 냅니다: \[ \yhat{AA}{h},~~\yhat{AB}{h},~~\yhat{AC}{h},~~ \yhat{BA}{h}~~\text{and}~~\yhat{BB}{h}. \] (간결하게 나타내기 위해 이전에 사용했던 \(\hat{y}_{T+h|T}\) 기호로 단순하게 적었습니다.) 이 값들을 더하여, 나머지 시계열에 대한 \(h\)-단계-앞 일관된 예측값(coherent forecast)을 얻습니다: \[\begin{align*} \tilde{y}_{h} & =\yhat{AA}{h}+\yhat{AB}{h}+\yhat{AC}{h}+\yhat{BA}{h}+\yhat{BB}{h}, \\ \ytilde{A}{h} & = \yhat{AA}{h}+\yhat{AB}{h}+\yhat{AC}{h}, \\ \text{and}\quad \ytilde{B}{h} &= \yhat{BA}{h}+\yhat{BB}{h}. \end{align*}\] (이 장에서는 일관된 예측값을 나타낼 때 “틸다(tilde)” 기호를 사용하겠습니다.) 식 (10.3)에서처럼, 합산행렬(summing matrix)을 도입하여 다음과 같이 쓸 수 있습니다. \[ \begin{bmatrix} \tilde{y}_{h} \\ \ytilde{A}{h} \\ \ytilde{AA}{h} \\ \ytilde{AB}{h} \\ \ytilde{AC}{h} \\ \ytilde{BA}{h} \\ \ytilde{BB}{h} \end{bmatrix} = \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 & 1 \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} \yhat{AA}{h} \\ \yhat{AB}{h} \\ \yhat{AC}{h} \\ \yhat{BA}{h} \\ \yhat{BB}{h} \end{bmatrix}. \] 더욱 간결한 기호를 사용하여 상향식 접근 방식을 다음과 같이 쓸 수 있습니다. \[ \tilde{\bm{y}}_{h}=\bm{S}\hat{\bm{b}}_{h}, \] 여기에서 \(\tilde{\bm{y}_t}\)는 일관된 \(h\)-단계 앞 예측치의 \(n\)-차원 벡터이고, \(\hat{\bm{y}}_{K,h}\)는 밑바닥 수준 시계열 각각에 대한 \(h\)-단계 앞 기준 예측값의 \(m\)-차원 벡터입니다.

이 방법의 장점은 구조의 밑바닥 수준에서 예측할 수 있다는 것과 따라서 합산 때문에 정보 손실이 일어나지 않는다는 것입니다. 반면에, 밑바닥 수준의 데이터에는 잡음이 꽤 많을 수 있고 모델링하고 예측하는 것이 더 어려울 수 있습니다.

10.3.1 R의 hts 패키지

forecast() 함수를 이용하여 hts() 또는 gts()로 만든 객체에 적용하여 예측값을 낼 수 있습니다. hts 패키지에는 예측값을 내기 위한 내장된 옵션이 3가지 있습니다: ETS 모델, ARIMA 모델이나 확률보행(random walk) 모델; 이러한 모델을 fmethod 입력값으로 조절할 수 있습니다. 일관된 예측값을 내기 위한 몇 가지 방법도 사용합니다. 이러한 방법은 method 입력값으로 조절할 수 있습니다.

예를 들어, 수감자 데이터에 ARIMA 모델을 적용하여 낸 상향식 예측값이 필요하다고 해봅시다. 그러면 다음과 같은 내용을 사용할 수 있습니다.

forecast(prison.gts, method="bu", fmethod="arima")

이 코드가 시계열 묶음에 있는 밑바닥 수준 시계열 각각에 auto.arima() 함수를 적용할 것입니다. fmethod="ets"을 사용하면 비슷하게 ETS 모델도 사용될 것입니다.