3.5 예측 구간

1.7 절에서 이야기한 것처럼, 예측 구간(prediction interval)은 특정한 확률로 \(y_{t}\)가 들어갈 구간을 의미합니다. 예를 들어, 예측 오차(forecast error)가 상관관계(correlation)가 없고 정규 분포(normal distribution)를 따른다고 가정하면, \(h\)-단계 예측값에 대한 95% 예측 구간은 다음과 같습니다. \[ \hat{y}_{T+h|T} \pm 1.96 \hat\sigma_h, \] 여기에서 \(\hat\sigma_h\)\(h\)-단계 예측 분포(forecast distribution)의 표준 편차의 추정값입니다. 더 일반적으로, 예측 구간(prediction interval)은 다음과 같이 적을 수 있습니다. \[ \hat{y}_{T+h|T} \pm c \hat\sigma_h \] 여기에서 \(c\)는 포함하려는 확률값에 따라 달라집니다. 어떤 임의의 확률도 사용할 수 있겠지만, 이 책에서는 주로 80% 구간과 95% 구간을 계산하겠습니다. 다음의 표는 정규 분포를 따르는 예측 오차를 가정하고, 포함하려는 확률값의 범위에 따라 주어지는 \(k\) 값을 나타냅니다.

Table 3.1: 예측구간에 곱하는 값.
백분율 곱하는 값
50 0.67
55 0.76
60 0.84
65 0.93
70 1.04
75 1.15
80 1.28
85 1.44
90 1.64
95 1.96
96 2.05
97 2.17
98 2.33
99 2.58

예측구간(prediction interval)의 값은 예측값의 불확실성(uncertainty)을 나타냅니다. 점예측값(point forecast)만 낸다면, 예측값이 얼마나 정확한지 나타낼 방법이 없습니다. 하지만, 예측 구간과 함께 낸다면, 각 예측값이 불확실성(uncertainty)과 얼마나 관련이 있는지 알 수 있게 됩니다. 이러한 이유에서, 예측 구간(prediction interval) 없이 나타내는 점 예측값(point forecast)은 거의 의미가 없다고 할 수 있습니다.

한-단계 예측 구간

한-단계(one-step) 앞을 예측할 때, 예측 분포(forecast distribution)의 표준 편차는 잔차(residual)의 표준 편차와 거의 같습니다. (사실, 단순 기법-naïve method-의 경우처럼 추정할 매개변수가 없으면 두 표준 편차는 같습니다. 추정할 매개변수를 포함하는 예측 기법에 대해, 예측 분포의 표준 편차와 잔차의 표준 편차의 차이가 종종 무시되기는 하지만, 예측 분포의 표준 편차는 잔차의 표준 편차보다 살짝 큽니다.)

예를 들어, (그림 3.5 에 나타낸) 구글 주가 데이터 goog200에 대한 단순 예측(naïve method)을 다뤄봅시다. 관측한 시계열의 마지막 값은 531.48입니다. 따라서 DJI의 다음값 예측은 531.48 입니다. 단순 기법(naïve method)에서 얻은 잔차의 표준 편차는 6.21입니다. 따라서, 다음 DJI 값에 대한 95% 예측구간(prediction interval)은 다음과 같습니다. \[ 531.48 \pm 1.96(6.21) = [519.3, 543.6]. \] 비슷하게, 80% 예측구간(prediction interval)은 다음과 같이 주어집니다. \[ 531.48 \pm 1.28(6.21) = [523.5, 539.4]. \]

3.1에서 곱하는 값(1.96 또는 1.28)을 가져왔습니다.

여러-단계 예측 구간

예측 구간의 공통적인 특징은 예측 범위(forecast horizon)이 증가할 수록 구간이 길어진다는 것입니다. 우리가 더 멀리 예측할 수록, 예측에 더 큰 불확실성(uncertainty)이 개입되고, 따라서 예측구간(prediction interval)이 더 넓어집니다. 즉, 보통 \(\sigma_h\)\(h\)에 따라 증가합니다(이러한 특징을 가지고 있지 않은 비-선형 예측 기법도 있습니다만).

예측 구간을 생성하기 위해서는, \(\sigma_h\)의 추정값이 필요합니다. 이미 이야기한 것처럼, 한-단계 예측값에 대해, 잔차(residual)의 표준 편차가 예측값의 표준편차(\(\sigma_1\))의 좋은 추정치가 될 수 있습니다. 여러-단계(multi-step) 예측치에 대해서는, 더 복잡한 계산이 필요합니다. 이러한 계산 과정에서 잔차(residual)에 상관관계(correlation)가 없다고 가정합니다. 보통은 이러한 계산을 표준 예측 소프트웨어에게 맡기고 (소프트웨어를 작성하는 사람이 아니라면!) 예측하는 사람은 이런 것으로 고민할 필요가 없습니다.

변환을 사용하면, 예측구간(prediction interval)은 변환된 눈금으로 계산되어야 하고, 원래의 눈금에서 예측구간(prediction interval)을 내기 위해 구간의 양끝점이 역변환되어야 합니다. 점예측(point forecast) 주변으로 더이상 대칭성(symmetry)을 유지할 수는 없지만 이러한 방식으로 예측 구간의 범위를 보존합니다.

벤치마크 기법

4가지 벤치마크(benchmark) 기법에 대해, 상관관계(correlation)가 없는 잔차를 가정하고, 예측값의 표준 편차를 수학적으로 유도할 수 있습니다. \(\hat{\sigma}_h\)\(h\)-단계 예측 분포(forecast distribution)가 표준 편차를 나타내고, \(\hat{\sigma}\)가 잔차의 표준 편차라면, 다음과 같은 식을 사용할 수 있습니다.

평균 예측값: \(\hat\sigma_h = \hat\sigma\sqrt{1 + 1/T}\)

단순 예측값: \(\hat\sigma_h = \hat\sigma\sqrt{h}\)

계절성 단순 예측값: \(\hat\sigma_h = \hat\sigma\sqrt{k+1}\), 여기에서 \(k\)\((h-1)/m\)의 정수 부분이고 \(m\)은 계절성 주기(seasonal period)입니다.

표류 예측값: \(\hat\sigma_h = \hat\sigma\sqrt{h(1+h/T)}\).

\(h=1\)이고 \(T\)가 클 때, 위의 모든 값은 같은 근사값인 \(\hat\sigma\)가 됩니다.

여러분이 벤치마크 예측 기법을 사용할 때 예측 구간이 계산될 것입니다. 한 가지 예로, 구글(Google) 주식 가격 예제에 단순 기법(naïve method)을 사용했을 때 결과를 살펴봅시다.

naive(goog200)
#>     Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
#> 201          531.5 523.5 539.4 519.3 543.6
#> 202          531.5 520.2 542.7 514.3 548.7
#> 203          531.5 517.7 545.3 510.4 552.6
#> 204          531.5 515.6 547.4 507.1 555.8
#> 205          531.5 513.7 549.3 504.3 558.7
#> 206          531.5 512.0 551.0 501.7 561.3
#> 207          531.5 510.4 552.5 499.3 563.7
#> 208          531.5 509.0 554.0 497.1 565.9
#> 209          531.5 507.6 555.3 495.0 568.0
#> 210          531.5 506.3 556.6 493.0 570.0

그래프로 그리면, 예측구간(prediction interval)이 관련 구간의 확률에 따라 다른 색의 강도로 그림자 영역에 나타납니다.

autoplot(naive(goog200))

붓스트랩 잔차에서 얻은 예측 구간

예측오차(forecast error)에 대해 정규 분포를 가정하는 것이 적절하지 않을 때는 한 가지 대안으로 붓스트랩(bootstrap; 표본 안에서 다시 뽑기)을 사용할 수 있습니다. 붓스트랩 기법에서는 예측 오차(forecast error)에 상관관계(correlation)가 없다는 것만 가정합니다.

예측오차(forecast error)는 다음과 같이 \(e_t = y_t - \hat{y}_{t|t-1}\)로 정의됩니다. 이것을 다음과 같이 다시 쓸 수 있습니다. \[ y_t = \hat{y}_{t|t-1} + e_t. \] 따라서 아래의 식을 이용해서 시계열의 다음 관측값을 모사할 수 있습니다. \[ y_{T+1} = \hat{y}_{T+1|T} + e_{T+1} \] 여기에서 \(\hat{y}_{T+1|T}\)는 한-단계(one-step) 예측이고 \(e_{T+1}\)는 아직 모르는 미래 오차입니다. 미래 오차가 과거 오차와 비슷할 것이라고 가정하면, \(e_{T+1}\)을 과거에 확인한 오차(예를 들면, 잔차)에서 뽑는 것으로 바꿀 수 있습니다. 새로 모사한 관측을 데이터에 추가하면, 아래와 같은 식을 얻기 위해 위와 같은 과정을 반복할 수 있습니다. \[ y_{T+2} = \hat{y}_{T+2|T+1} + e_{T+2} \] 여기에서 \(e_{T+2}\)는 잔차값에서 뽑은 또 다른 값입니다. 이 방법을 계속하면, 다루는 시계열에 대한 미래 값 전체를 모사할 수 있습니다.

이 작업을 반복하면, 여러 가지 가능한 미래값을 얻게됩니다. 그러면 각 예측수평선(forecast horizon)에 대해 백분율을 계산하여 예측구간(prediction interval)을 얻을 수 있습니다. 이 결과를 붓스트랩된(bootstrapped) 예측구간이라고 부릅니다. “붓스트랩”이라는 이름은 신발끈을 당겨 우리 자신을 끌어 당긴다는 것에서 유래합니다. 왜냐하면, 이 과정은 과거 데이터만 사용해서 미래의 불확실성을 살필 수 있도록 하기 때문입니다.

이러한 구간을 생성하려면, 예측 함수에 bootstrap 입력값만 추가하면 됩니다. 예를 들면:

naive(goog200, bootstrap=TRUE)
#>     Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
#> 201          531.5 525.7 537.8 522.9 542.9
#> 202          531.5 523.2 539.5 519.4 547.0
#> 203          531.5 520.9 541.2 516.7 552.3
#> 204          531.5 519.0 543.0 514.0 560.3
#> 205          531.5 517.5 544.6 511.8 582.1
#> 206          531.5 516.1 545.9 509.5 582.4
#> 207          531.5 514.8 547.3 508.0 583.5
#> 208          531.5 513.5 548.9 505.8 584.9
#> 209          531.5 512.3 549.8 503.9 586.6
#> 210          531.5 510.7 551.4 502.1 587.5

이 경우에, 정규 분포에 기초한 예측구간과 비슷합니다(하지만 똑같지는 않습니다).

변환을 이용하는 예측구간

어떤 수학적인 변환을 사용했다면, 변환된 눈금으로 예측 구간을 계산해야 하고, 원래의 눈금에서의 예측 구간으로 표현하기 위해 마지막 과정에서 역-변환해야 합니다. 이 방법 때문에 점 예측값(point forecast) 주변에서 예측구간이 더이상 대칭이 아닌 형태로 나타나게 되지만, 이 방법은 예측구간이 다루는 확률 범위를 보존합니다.

예측구간의 역-변환은 R의 forecast 패키지에 포함된 함수에서 자동으로 처리합니다. 예측값을 계산할 때 사용하는 lambda 입력값이 이와 관련있습니다.