11.4 붓스트랩과 배깅

시계열 붓스트랩

이전의 절과 3.5 절에서 모델을 가지고 어떤 한 시계열의 미래값을 모사하기 위해 시계열의 잔차를 어떻게 붓스트랩(bootstrap) 할 수 있는지 다루었습니다.

더욱 일반적으로, 다른 종류의 붓스트랩(bootstrap) 기법을 이용하여, 관찰한 시계열과 비슷한 새로운 시계열을 생성할 수 있습니다.

먼저, 시계열을 박스-칵스(Box-Cox) 변환합니다. 그리고 STL로 시계열을 추세, 계절성, 나머지 성분으로 분리합니다. 그러면 섞인 형태의 나머지 성분을 얻게 됩니다. 이는 붓스트랩한 나머지 성분 시계열을 얻기 위해 필요합니다. STL 나머지 성분 시계열에 자기상관값(autocorrelation)이 나타날 수 있기 때문에, 3.5 절에서 다룬 것처럼 단순하게 다시 그릴 수 없습니다. 대신에, “블록된 붓스트랩(blocked bootstrap)”을 사용합니다. 여기에서 시계열의 인접 부분은 무작위로 골라서 서로 붙인 것입니다. 이러한 붓스트랩된 나머지 시계열을 추세와 시계열 성분에 더하고, 원본 시계열의 변형된 형태를 얻기 위해 역 박스-칵스(reversed Box-Cox) 변환을 합니다.

그림 11.16 의 몇 가지 예제에서는 2000년 1월부터 2013년 8월까지 아이슬란드의 소매 직불 카드(retail debit card)의 월별 지출 데이터를 다룹니다.

bootseries <- bld.mbb.bootstrap(debitcards, 10) %>%
  as.data.frame() %>% ts(start=2000, frequency=12)
autoplot(debitcards) +
  autolayer(bootseries, colour=TRUE) +
  autolayer(debitcards, colour=FALSE) +
  ylab("붓스트랩한 시계열") + guides(colour="none")
아이슬란드의 소매 직불 카드의 월별 지출을 붓스트랩한 10가지 버전.

Figure 11.16: 아이슬란드의 소매 직불 카드의 월별 지출을 붓스트랩한 10가지 버전.

이러한 종류의 붓스트랩 기법은 두 가지 측면에서 유용합니다. 먼저, 이 방법으로 예측 불확실성을 더 잘 나타내는 측정값을 얻을 수 있습니다. 두 번째, 이 방법은 “배깅(bagging)”을 이용하여 점 예측값을 향상시키는 방법으로 이어집니다.

붓스트랩한 시계열에서 얻은 예측 구간

시계열 모델에서 얻는 거의 모든 예측구간(prediction interval)은 너무 좁습니다. 이러한 현상은 흔한 것이고 불확실성의 원인이 되는 모든 출처를 고려하지 않기 때문에 생기는 현상입니다. Hyndman, Koehler, Snyder, & Grose (2002) 에서 테스트 데이터에 대해 예측구간이 실제로 포괄하는 범위 비율을 계산하여 이러한 문제를 정량적으로 다룹니다. 이 논문에서는 ETS 모델에 대해 명목상의 95% 구간이 실제로는 71%에서 87% 정도 포괄할 수 있다는 것을 보입니다. 이 차이는 불확실성의 원인이 되는 출처를 빠뜨린 것에서 옵니다.

예측 작업에서 시계열 모델을 이용할 때 불확실성의 원인이 되는 적어도 4가지의 출처가 있습니다:

  1. 무작위 오차 항;
  2. 매개변수 추정;
  3. 과거 데이터에 대해 모델을 선택한 것;
  4. 과거 데이터의 연장선 상에서 미래 것을 생성하는 과정.

시계열 모델에 대해 예측 구간을 생성할 때, 일반적으로 1-3의 불확실성만 고려합니다. 모델의 불확실성(출처 3)과 데이터 생성 과정 변화 때문에 생기는 불확실성(출처 4)을 무시하고, 무작위 오차 항(출처 1)과 매개변수 불확실성(출처 2)만 허용하더라도, 몇 가지 특별히 단순한 경우를 제외하고는 대수적으로 해결할 수 있는 방법이 없습니다.

이러한 문제를 극복하는 몇 가지 방향으로 나아가기 위해 시계열을 붓스트랩하는 방법을 사용할 수 있습니다. debitcards 데이터를 이용하여 이러한 접근 방식을 설명해보겠습니다. 먼저, 위에서 다룬 블록-붓스트랩(block-bootstrap)을 이용하여 원본 데이터와 비슷한 여러 시계열을 모사하겠습니다.

nsim <- 1000L
sim <- bld.mbb.bootstrap(debitcards, nsim)

각각의 시계열에 대해, ETS 모델을 맞추고, 모델로부터 한 가지 표본 경로를 모사합니다. 다른 ETS 모델은 시계열이 비슷하기 때문에 같은 모델이 선택될 수도 있고, 각 경우에서 다른 ETS 모델이 선택될 수도 있습니다. 하지만, 추정한 매개변수를 다를 것입니다. 따라서 모사한 표본 경로에 오차항과 관련된 불확실성, 모델 불확실성, 매개변수 불확실성이 들어가게 될 것입니다. 이 방법은 모델로 많은 수의 시계열을 다루기 때문에 시간이 많이 걸립니다.

h <- 36L
future <- matrix(0, nrow=nsim, ncol=h)
for(i in seq(nsim))
  future[i,] <- simulate(ets(sim[[i]]), nsim=h)

마지막으로, 점 예측값과 예측 구간을 생성하기 위해 이러한 표본 경로의 평균과 분위수(quantile)값을 고려합니다.

start <- tsp(debitcards)[2]+1/12
simfc <- structure(list(
    mean = ts(colMeans(future), start=start, frequency=12),
    lower = ts(apply(future, 2, quantile, prob=0.025),
               start=start, frequency=12),
    upper = ts(apply(future, 2, quantile, prob=0.975),
               start=start, frequency=12),
  level=95),
  class="forecast")

이러한 예측 구간은 ETS 모델을 원본 데이터에 직접 적용하여 얻은 예측 구간보다 클 것입니다.

etsfc <- forecast(ets(debitcards), h=h, level=95)
autoplot(debitcards) +
  ggtitle("아이슬란드의 월별 소매 직불 카드 사용량") +
  xlab("연도") + ylab("백만 ISK") +
  autolayer(simfc, series="모사한 것") +
  autolayer(etsfc, series="ETS")
아이슬란드 직불 카드 사용량을 예측한 값을 ETS 모델을 이용하여 일반적인 예측구간과 모델과 매개변수 불확실성을 허용하는 모사를 이용하여 계산한 예측 구간과 함께 나타낸 것.

Figure 11.17: 아이슬란드 직불 카드 사용량을 예측한 값을 ETS 모델을 이용하여 일반적인 예측구간과 모델과 매개변수 불확실성을 허용하는 모사를 이용하여 계산한 예측 구간과 함께 나타낸 것.

배깅한 ETS 예측

붓스트랩한 시계열을 예측 정확도를 높이는데 사용하기도 합니다. 각각의 추가적인 시계열에서 예측값을 내고 결과 예측값을 평균했다면, 원본 시계열에서 단순하게 직접 예측한 것보다 더 나은 예측값을 얻습니다. 이것을 “배깅(bagging)”이라고 부릅니다. “배깅(bagging)”은 “bootstrap aggregating”의 약자입니다.

이전에 계산하여 모사한 미래 표본 경로를 단순하게 평균할 수도 있을 것입니다. 하지만, 점 예측 정확도를 높이는 것에만 관심이 있고 향상된 예측 구간을 얻는 것에는 관심이 없다면, 각 시계열에서 얻은 점 예측값을 평균하면 더 빠릅니다. 모사할 여러 시계열을 생성할 필요가 없어서 계산이 빠르게 끝납니다.

각각의 시계열을 예측하기 위해 ets()을 사용하겠습니다. 그림 11.18은 이러한 방법으로 얻은 10가지 예측값을 나타냅니다.

sim <- bld.mbb.bootstrap(debitcards, 10) %>%
  as.data.frame() %>%
  ts(frequency=12, start=2000)
fc <- purrr::map(as.list(sim),
           function(x){forecast(ets(x))[["mean"]]}) %>%
      as.data.frame() %>%
      ts(frequency=12, start=start)
autoplot(debitcards) +
  autolayer(sim, colour=TRUE) +
  autolayer(fc, colour=TRUE) +
  autolayer(debitcards, colour=FALSE) +
  ylab("붓스트랩한 시계열") +
  guides(colour="none")
ETS 모델을 이용하여 얻은 붓스트랩 시계열의 예측값.

Figure 11.18: ETS 모델을 이용하여 얻은 붓스트랩 시계열의 예측값.

이러한 예측값의 평균은 원본 데이터를 배깅한 예측값입니다. baggedETS() 함수로 전체 과정을 다룰 수 있습니다. 기본값으로 붓스트랩하여 얻은 100개의 시계열을 사용하고, 붓스트랩한 잔차를 얻기 위한 블록(block)의 길이는 월별 데이터에 대해 24로 둡니다. 그림 11.19 은 결과 예측값을 나타냅니다.

etsfc <- debitcards %>% ets() %>% forecast(h=36)
baggedfc <- debitcards %>% baggedETS() %>% forecast(h=36)
autoplot(debitcards) +
  autolayer(baggedfc, series="배깅한ETS", PI=FALSE) +
  autolayer(etsfc, series="ETS", PI=FALSE) +
  guides(colour=guide_legend(title="예측값"))
배깅한 ETS 예측값을 (100개의 붓스트랩한 예측값의 평균) ETS를 데이터에 바로 적용한 결과와 비교한 것.

Figure 11.19: 배깅한 ETS 예측값을 (100개의 붓스트랩한 예측값의 평균) ETS를 데이터에 바로 적용한 결과와 비교한 것.

이 경우에는, 크게 차이나지 않습니다. Bergmeir, Hyndman, & Benítez (2016) 에서 ets()를 그냥 적용한 것보다 더 나은 예측값을 낸다는 것을 보였습니다. 물론, 더 많은 계산이 필요하기 때문에 더 느립니다.

참고 문헌

Bergmeir, C., Hyndman, R. J., & Benítez, J. M. (2016). Bagging exponential smoothing methods using STL decomposition and Box-Cox transformation. International Journal of Forecasting, 32(2), 303–312. https://robjhyndman.com/publications/bagging-ets/

Hyndman, R. J., Koehler, A. B., Snyder, R. D., & Grose, S. (2002). A state space framework for automatic forecasting using exponential smoothing methods. International Journal of Forecasting, 18(3), 439–454. https://robjhyndman.com/publications/hksg/