Math & Statistics/Forecasting: Principles and Practice

챕터 3. 예측 기법 - 단순한 예측 기법 & 변환

corycory 2022. 2. 8. 23:14
728x90
반응형
Forecasting: Principles and Practice 2nd Edition을 공부한 내용을 기록, 정리하고 있습니다. 

 

 

3.1 단순한 예측 기법

평균 기법

과거 데이터의 평균을 가지고 미래의 값을 예측 하는 것.

# y: ts data, h: prediction range
meanf(y, h)

 

단순 기법 (naïve method)

마지막 과거 값을 예측값으로 사용하는 것. 경제 금융 시계열에서 많이 쓰이는 기법이다. 특히 데이터가 확률보행 (random walk)를 따를 때 단순기법이 잘 맞는다. 이 때문에 확률보행 예측값(random walk forecast)이라고 불리기도 한다.

naive(y, h)
rwf(y, h)

 

계절성 단순기법 (seasonal naïve method)

계절성이 뚜렷한 데이터를 다룰 때 유용한다 .단순 기법과 비슷하나, 마지막 관측값을 설정할 때 같은 계절의 마지막값 (예: 작년의 같은 달)을 가져와 사용한다. 

snaive(y, h)

 

표류기법

단순기법(naïve method)를 수정해서, 시간이 지날 수록 예측값이 증가하거나 감소하게 하는 것이다. 즉 시간이 지날 수록 예측값이 표류(drift)하게 된다. 

rwf(y, h, drift=TRUE)

 

예제로, 분기별 맥주 생산량 데이터에 위의 3개 기법을 적용한 내용이다. 각 기법이 어떤 식으로 예측하는지 한눈에 볼 수 있다. 

3가지 기법을 다 적용해 본 모습.

 

 

3.2 변환과 조정

종종 예측을 할 때, 데이터를 그대로 사용하기 보다 조금 조정하면 더 예측이 편리해지기도 한다. 여기서는 네 가지 조정 방법을 소개한다.

 

달력조정

월별로 계절성 데이터가 있는 경우, 월별로 날짜의 개수가 다르기 때문에  오차가 생기기도 한다. 이런 달력의 변동을 제거하면 예측이 편해지기도 한다. 아래 차트를 보자. 위쪽은 월별 평균 우유 생산량이고, 아래쪽은 일평균 우유 생산량이다. 월별로 보는 대신 일평균으로 보는 것을 선택함으로써, 우리는 차트를 더 간단하게 만들수 있었다. 영업일을 기준으로 하는 데이터들도 비슷하게 적용할 수 있다. 

 

위쪽은 월별 생산량, 아래쪽은 일평균 생산량.

 

인구조정

인구의 변화에 영향을 받는 데이터는 인구 1명당(또는 1,000명당 등) 데이터로 환산해서 조정할 수 있다. 예를 들어 어떤 지역의 평균 병상수를 카운트한다거나 할때, 인구 천명당, 혹은 만명당 병상수가 몇개다 이런식으로 이야기 하는 것을 들어 보았을 것이다. 이로써 병상의 수가 정말로 늘어나는지 줄어드는지를 비교할 수 있다. 

 

인플레이션 조정

화폐의 가치의 변화(인플레이션/디플레이션)에 영향을 받는 데이터들 또한 모델링을 하기 전에 변환하는 것이 좋다. 예를 들면, 새로운 집을 사는데 드는 돈은 지난 수십년간 인플레이션으로 인해 상승했다. 오늘날의 2억은 20년전의 2억과 가치가 다르다. 이때문에 금융 시계열 데이터는 종종 특정 해의 돈의 가치로 환산하곤 한다. 

인플레이션을 환산하는 방법은 가격지수이다. 만약 z(t)가 가격지수이고, y(t)가 t해의 집값이라고 치자. 그러면 2000년도의 집값을 기준으로 환산하면 아래와 같은 수식을 사용할 수 있다.

일반적으로 가격지수는 정부에서 발표하며, 소비자 물가 지수(CPI) 등이 좋은 예시이다.

 

수학적 변환

때때로 시계열에 감소하거나 증가하는 변동이 있다면, 변환(transformation)이 유용할 수도 있다. 로그 변환 (logarithmic transformation)이 많이 쓰는 변환 중 하나이다. 로그 변환은 해석이 편리해서 유용하다: 로그 값의 변화는 원래 값의 상대적인 값만큼 변한다. 따라서 만약 로그의 밑을 10으로 쓴다면, 로그가 1만큼 증가하는 것이 원래 값의 10배 증가한 것과 동일해진다. 

로그 변환 외에도, 거듭곱 변환(power transformation)을 사용하기도 한다. 로그 변환과 거듭곱 변환을 둘다 포함하는 변환 방법을 박스-칵스(Box-Cox)변환이라고 한다. 박스-칵스 변환은 아래처럼 정의할 수 있다. 

람다 값에 좌우된다.

위 식에서 로그는 항상 자연로그이다 (밑이 e). 따라서 람다 값이 0이면 자연로그를 사용하게 되고, 람다 값이 0이 아닌 경우, 거듭곱 변환을 사용한다. 람다=1 이면 y(t)-1이라 변환된 데이터에서 시계열의 모양이 변하지 않고 쭉 아래로 이동하게 된다. 하지만 1 이외의 다른 값에 한해서는 시계열의 모양이 변할 것이다.

 

R에서 BoxCox.lambda() 함수를 통해 적정한 람다 값을 알아서 찾아내게 할 수도 있다. 

(lambda <- BoxCox.lambda(elec))
#> [1] 0.2654
autoplot(BoxCox(elec,lambda))

Box-Cox로 변환된 데이터의 시계열

이렇게 데이터를 변환하고 나면 변환된 데이터를 예측해야 한다. 그리고 모든 예측이 끝나고 나면, 원래의 값을 기준으로 예측치를 얻기 위해 이 과정을 다다시 되돌려야 한다 (back transformation). 역 박스-칵스 변환은 아래의 공식을 사용한다. 위의 박스-칵스 공식을 그대로 반전한 공식이다. 

 

back Box-Cox transformation

 

거듭곱 변환의 특징

- 어떤 양(+)이 아닌 y(t) 는 상수를 더해서 조정하지 않는 한 거듭곱 변환이 어려울 수 있다.

- 람다값을 단순하게 선택할수록 설명하기가 쉬워진다.

- 예측 결과가 람다값에 따라. 민감하게 변하진 않는다.

- 꼭 변환이 필요하지 않을 수도 있다.

- 변환을 해도 예측값에는 때때로 거의 차이가 없지만, 예측구간(prediction interval)은 크게 변화한다. 

 

편향조정 (bias adjustments)

수학적변환의 단점은 다시 역변환을 했을 때 그 예측값이 예측값의 분포의 평균이 아니게 된다는 점이다. 대부분의 케이스에서 평균이 아니라 중간값일 것이다 (해당 분포가 symmetric하다는 가정하에). 위에서 살펴본 박스-칵스 예시에서, 역변환의 평균은 아래와 같이 계산된다. 

 

시그마제곱은 h단계의 예측 분산이다. 예측 분산이 클수록, 평균과 중간값의 차이가 크다.

 

단순하게 역변환된 예측값과, 위의 역변환된 평균간의 차이를 편향(bias)라고 한다. 때문에 중간값 대신에 평균을 사용할 때 점 예측치들이 편향조정(bias-adjustment)되었다고 한다. 이런 편향 조정이 얼마나 큰 차이를 만들어 내는지는 아래 예제에서 확인해보자. 아래 예제에서는 로그변환된 표류 기법을 사용해서 달걀의 연간 평균 가격을 예측한다. 로그변환을 이용하여 예측값이 반드시 양수가 되도록 할 수 있다 (달걀의 가격은 0아래로 내려갈수가 없으므로).

 

fc <- rwf(eggs, drift=TRUE, lambda=0, h=50, level=80)
fc2 <- rwf(eggs, drift=TRUE, lambda=0, h=50, level=80,
  biasadj=TRUE)
autoplot(eggs) +
  autolayer(fc, series="Simple back transformation") +
  autolayer(fc2, series="Bias adjusted", PI=FALSE) +
  guides(colour=guide_legend(title="Forecast"))

 

단순하게 역변환 한 것과, 편향조정을 한 값의 차이가 보인다.

 

forecast 패키지는 기본적으로 편향조정을 하지 않으며, biasadj=TRUE를 사용함으로써 Box-Cox 변환을 사용할 때 편향조정 옵션을 켤 수 있다. 

반응형