5.6 회귀로 예측하기

다음과 같은 식으로 \(y\)의 예측값을 얻을 수 있다는 것을 다시 되짚어봅시다. \[ \hat{y_t} = \hat\beta_{0} + \hat\beta_{1} x_{1,t} + \hat\beta_{2} x_{2,t} + \cdots + \hat\beta_{k} x_{k,t}, \] 여기에서 추정된 계수를 포함하고 회귀식의 오차를 무시합니다. 예측변수(predictor variable)의 값들 \(x_{1,t},\dots,x_{k,t}\) for \(t=1,\dots,T\)을 넣으면 \(y\)의 (학습-표본) 적합값을 얻습니다. 하지만, 여기에서는 \(y\)미래 값을 예측하는 것에 관심이 있습니다.

사전 예측 대 사후 예측

시계열 데이터에 회귀 모델을 사용할 때, 예측치를 계산할 때 알려진 가정에 따라 나올 수 있는 다양한 종류의 예측값을 구분해야 합니다.

사전 예상값(Ex-ante forecast)은 미리 쓸 수 있는 정보만으로 내는 것입니다. 예를 들어, 표본이 끝난 다음 분기의 미국 소비 백분율 변화에 대한 사전 예상값에는 2016 Q3까지 사용할 수 있는 정보만 사용해야 합니다. 이는 당시에 이용할 수 있는 정보를 가지고 미리 낸 진정한 예측값입니다. 따라서 사전 예상값을 내려면 모델에 예측변수(predictor variable)의 미래 값(예상값)이 필요합니다. 이러한 것을 얻으려면 3.1 절에서 소개한 간단한 방법 중에서 하나, 또는 7 장과 8 장에서 다루는 더욱 세련된 순수 시계열 접근 방식을 사용할 수 있습니다. 또는, 정부 기관 같은 다른 출처에서 얻은 예상값을 사용할 수도 있습니다.

사후 예상값(Ex-post forecast)은 예측변수(predictor variable)에 대한 이후 정보로 내는 것입니다. 예를 들어, 소비에 대한 사후 예상값을 낼 때 일단 예측변수(predictor variable)의 실제 값을 관측하고나서 실제 값을 사용할 수도 있습니다. 이러한 예상값은 실제 예상값은 아니지만, 예측 모델이 작동하는 것을 살펴볼 때 유용합니다.

사후 예상값을 내는 모델을 예측 기간의 데이터를 이용하여 추정해서는 안 됩니다. 즉, 사후 예상값은 예측변수(\(x\) 변수)에 관한 지식을 가정할 수 있지만, 예측할 데이터(\(y\) 변수)에 대한 지식을 가정해서는 안 됩니다.

사전 예상값과 사후 예상값을 비교 평가하면 예측 불확실성의 원인을 구분하는데 도움이 될 수 있습니다. 예측 오차가 안 좋은 예측 모델 때문에 생겼는지 아니면 예측변수(predictor variable)에 대한 안 좋은 예측값 때문에 생겼는지 나타낼 것입니다.

예제: 호주 분기별 맥주 생산량

일반적으로, 사전 예상값을 낼 때 예측변수(predictor variable)의 실제 미래 값을 쓸 수 없습니다. 왜냐하면 예측변수(predictor variable)의 값을 미리 알 수 없기 때문입니다. 하지만, 5.4 절에서 소개한 특별한 예측변수(predictor vvariable)는 달력 변수(예: 계절성 가변수나 공휴일 표시자) 또는 시간의 확정적인(deterministic) 기능(예: 시간 추세)에 근거하기 때문에 미리 모두 알고 있습니다. 이러한 경우에는, 사후 예상값(ex-post forecast)과 사전 예상값(ex-ante forecast)이 차이가 없습니다.

beer2 <- window(ausbeer, start=1992)
fit.beer <- tslm(beer2 ~ trend + season)
fcast <- forecast(fit.beer)
autoplot(fcast) +
  ggtitle("회귀를 이용한 맥주 생산량 예측값") +
  xlab("연도") + ylab("백만 리터")
맥주 생산량에 대한 회귀 모델로부터 얻은 예측값. 상대적으로 어두운 음영 영역은 80% 예측구간(prediction interval)이고 상대적으로 밝은 음영 영역은 95% 예측구간(prediction interval)입니다.

Figure 5.17: 맥주 생산량에 대한 회귀 모델로부터 얻은 예측값. 상대적으로 어두운 음영 영역은 80% 예측구간(prediction interval)이고 상대적으로 밝은 음영 영역은 95% 예측구간(prediction interval)입니다.

시나리오 기반 예측

이 설정에서, 예측하는 사람은 관심 있는 예측변수(predictor variable)에 대한 가능한 시나리오를 가정합니다. 예를 들어, 미국 정책 담당자는 고용률 변화 없이 소득과 저축에 대해 각각 1%와 0.5%의 지속적인 성장이 일어나는 것과, 각각 1%와 0.5%의 감소가 일어나는 상황에서 소비에서 예측된 변화량을 표본 이후 각 네 분기에 대해 비교하는 일에 관심이 있을 수 있습니다. 결과 예측치를 아래에 계산하여 그림 5.18에 나타냈습니다. 시나리오 기반의 예측치에 대해서는 예측 구간(prediction interval)이 예측변수(predictor variable)의 미래값과 관련된 불확실성을 포함하지 않습니다. 예측변수(predictor variable)의 값을 미리 안다고 가정합니다.

fit.consBest <- tslm(Consumption ~ Income + Savings + Unemployment,
  data = uschange)
h <- 4
newdata <- data.frame(
    Income = c(1, 1, 1, 1),
    Savings = c(0.5, 0.5, 0.5, 0.5),
    Unemployment = c(0, 0, 0, 0))
fcast.up <- forecast(fit.consBest, newdata = newdata)
newdata <- data.frame(
    Income = rep(-1, h),
    Savings = rep(-0.5, h),
    Unemployment = rep(0, h))
fcast.down <- forecast(fit.consBest, newdata = newdata)
autoplot(uschange[,1]) +
  ylab("미국 소비 지출 % 변화") +
  autolayer(fcast.up, PI = TRUE, series = "증가") +
  autolayer(fcast.down, PI = TRUE, series = "감소") +
  guides(colour=guide_legend(title = "시나리오")) +
  xlab("연도")
시나리오 기반 예측으로 미국 개인 소비 지출 백분율 변화 예측하기.

Figure 5.18: 시나리오 기반 예측으로 미국 개인 소비 지출 백분율 변화 예측하기.

예측 회귀 모델 세우기

회귀 모델의 가장 큰 장점은 관심 있는 목표 예상변수(forecast variable)와 예측변수(predictor variable)의 중요한 관계를 잡아내는데 사용할 수 있다는 것입니다. 하지만, 주된 어려움은 사전 예상값(ex-ante forecast)을 내기 위해, 모델에 각 예측변수(predictor variable)의 미래값이 필요하다는 것입니다. 시나리오 기반 예측에 관심이 있다면, 이러한 모델은 유용합니다. 하지만, 사후 예측에 주된 관심이 있다면, 예측변수(predictor variable)에 대한 예측값을 얻는 것은 어려운 일이 될 수 있습니다(예측변수에 대한 예측값을 내는 많은 경우는 예측변수(predictor variable) 없이 목적 예상변수(forecast variable)를 직접 예측하는 것보다 더 어려울 수 있습니다).

대안은 예측변수(predictor variable)로 시차 값(lagged value)을 사용하는 것입니다. \(h\)-단계 앞 예측을 내는데 관심이 있다고 하면 \(h=1,2\dots\)에 대해 다음과 같이 쓸 수 있습니다. \[ y_{t+h}=\beta_0+\beta_1x_{1,t}+\dots+\beta_kx_{k,t}+\varepsilon_{t+h} \] 예측변수(predictor variable) 모음은 \(y\)를 관찰하기 전 \(h\) 시간 주기에 관찰한 \(x\)의 값으로 구성됩니다. 따라서, 추정된 모델을 미래에 투영할 때, (즉, \(T\) 표본 넘어), 모든 예측변수(predictor variable) 값을 이용할 수 있습니다.

예측변수(predictor variable)의 시차값(lagged value)을 포함하면 예측값을 쉽게 낼 수 있도록 모델을 작동시키기도 하면서, 직관적으로 이해할 수 있도록 만들기도 합니다. 예를 들면, 생산 증가를 목표로 하는 정책 변화의 효과는 소비 지출에 바로 영향을 미치지 않을 수도 있습니다. 시차 효과와 함께 일어날 가능성이 높습니다. 5.4 절에서 분포된 시차값을 예측변수(predictor variable)로 간단하게 소개하면서 이 문제를 다루었습니다. 시계열에서 관찰한 다양한 동역학적인 특징을 더 잘 반영하기 위해 회귀 모델을 일반화하는 몇 가지 방향을 9 절에서 다룹니다.

예측구간

그림 5.18 에서는 소비의 변화에 대한 각 예측값에 95%와 80% 예측구간(prediction interval)도 포함하였습니다. 5.7 절에서 다중 회귀 모델에 대한 예측구간(prediction interval)을 계산하는 방법에 대한 일반적인 식을 다룹니다. 여기에는 몇 가지 고급 행렬 연산이 들어가기 때문에 여기에서는 간단한 회귀에 대한 예측구간(prediction interval)을 계산하는 경우만 다룹니다. 여기에서 한 예측값을 다음과 같은 식으로 낼 수 있습니다, \[ \hat{y}=\hat{\beta}_0+\hat{\beta}_1x. \] 회귀 오차가 정규 분포를 따른다는 것을 가정하면, 이 예측과 관련된 근사적인 95% 예측구간(예측 간격이라고도 불립니다)은 다음과 같이 주어집니다. \[\begin{equation} \hat{y} \pm 1.96 \hat{\sigma}_e\sqrt{1+\frac{1}{T}+\frac{(x-\bar{x})^2}{(T-1)s_x^2}}, \tag{5.4} \end{equation}\] \(T\)는 관측값의 전체 개수, \(\bar{x}\)는 관측된 \(x\) 값의 평균, \(s_x\)는 관측된 \(x\) 값의 표준 편차, \(\hat{\sigma}_e\)는 식 (5.3)으로 주어지는 회귀의 표준 오차입니다. 비슷하게, 80% 예측 구간은 1.96을 1.28로 바꾸어 얻을 수 있습니다. 다른 예측구간(prediction interval)은 1.96을 표 3.1에 주어진 적절한 값으로 바꾸어 얻을 수 있습니다. 예측구간을 얻기 위해 R을 사용한다면, (특별히 작은 \(T\) 값들에 대해) 식 (5.4)으로 주어지는 것보다 더 정확한 계산값을 얻습니다.

(5.4)\(x\)\(\bar{x}\)와 차이가 날 때 예측구간이 넓어지는 것을 나타냅니다. 즉, 예측변수(predictor variable)의 값을 표본 평균에 가깝게 고려할 때 예측값을 더욱 확신하게 됩니다.

예제

미국 소비 예제에서 추정된 단순 회귀 선은 다음과 같습니다. \[ \hat{y}_t=0.55 + 0.28x_t. \]

다음 4개의 분기에 대해 개인 소득이 \(\bar{x}=0.72\%\)의 과거 평균 값만큼 증가할 것을 가정하면, 소비가 \(0.75\%\)만큼 증가한다는 예측을 얻고 관련된 \(95\%\) 예측 구간과 \(80\%\) 예측 구간은 각각 \([-0.45,1.94]\)\([-0.03,1.52]\)입니다(R을 이용하여 계산했습니다). \(5\%\)의 극단적인 수입 증가를 가정한다면, 예측구간(prediction interval)이 그림 5.19 처럼 상당히 넓어집니다.

fit.cons <- tslm(Consumption ~ Income, data=uschange)
h <- 4
fcast.ave <- forecast(fit.cons,
  newdata = data.frame(
    Income = rep(mean(uschange[, "Income"]), h)))
fcast.up <- forecast(fit.cons,
  newdata = data.frame(Income = rep(5, h)))
autoplot(uschange[,"Consumption"]) +
  ylab("미국 소비 % 변화") +
  autolayer(fcast.ave, series = "평균적인 증가",
    PI = TRUE) +
  autolayer(fcast.up, series = "극단적인 증가",
    PI = TRUE) +
  guides(colour = guide_legend(title = "시나리오")) +
  xlab("연도")
5% 극단적인 수입 증가 대비, 소득이 \(0.72\%\)의 과거 평균에 의한 증가할 때 예측구간.

Figure 5.19: 5% 극단적인 수입 증가 대비, 소득이 \(0.72\%\)의 과거 평균에 의한 증가할 때 예측구간.