Math & Statistics/Forecasting: Principles and Practice

챕터 6 시계열 분해 - 파트 2

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

 

 

6.6 STL 분해

STL은 Seasonl and Trend decomposition using Loess (Loess를 사용한 계절성과 추세 분해) 를 줄인 것이다.

Loess regression (국소 회귀)는 데이터의 일부에 회귀를 적용하는 방식이다. 예를 들어, 과거의 데이터보다 비교적 현재에 가까운 시간에 찍힌 데이터들이 중요하다면 가까운 데이터들에 가중치를 더 부여해서 모델링을 할 수 있다. 

 

STL의 장점 (앞에서 소개한 고전분해, SEATS, X11보다 좋은)

- SEAT와 X11과는 달리, 월별이나 분기별 데이터 외에도 다양한 계절성을 다룰수 있다.

- 계절성이 시간에 따라 변해도, 분석하는 사람이 통제할 수 있다.

- 추세-주기의 매끄러움도 분석하는 사람이 통제 가능하다.

- outlier들에 크게 영향을 받지 않는다! 추세-주기, 계절성은 잘 나오지만 나머지는 영향을 받긴 한다.

 

STL의 단점 

- 영업일이나 달력의 날짜를 잘 반영하지 못한다.

- 덧셈 분해만 지원한다.

 

하지만 곱셈분해를 하기 위해 데이터에 로그를 씌워서 변형시키고, 분해한뒤 분해한 파트들을 다시 변형할 수 있다. 박스-칵스 변형 (0 < lambda < 1)을 사용해서 덧셈과 곱셈 분해의 중간에 해당하는 분해를 얻을 수 있다. 람다 값이 0이면 곱셈분해이며, 1이면 덧셈분해이다.

 

아래 예제는 앞전에서 다루었던 전자장비 지수 데이터에 STL 분해를 적용한 것이다. 추세-주기가 보다 유연하게 잘 변하고 있으며, 계절성이 일정하게 유지된다. 

 

elecequip %>%
  stl(t.window=13, s.window="periodic", robust=TRUE) %>%
  autoplot()

 

전자 장비 지수 데이터에 STL을 적용한 모습&nbsp;

 

stl() 함수에 t.window, s.window 가 있는데 각각 추세-주기 윈도우와 계절성 윈도우이다. 이 두 패러미터 값을 조정함으로써 추세-주기와 계절성분의 변동치를 조절할 수 있다. t.window 는 추세-주기를 추정할 때 사용할 연속된 값의 갯수이고, s.window는 계절성분에서 값을 추정할 때 쓰는 관측값의 개수. s.window=infinite면 계절성을 주기적으로 고정하는 것과 같은 효과를 준다. t.window는 생락가능하며, 생략할 경우 디폴트 값을 사용한다. 위 예시에서는 t.window=13, s.window='periodic'을 썼는데, 이 값들이 작을수록 그래프가 급격하게 변하며, 값들은 둘다 홀수여야 한다. 

 

6.7 추세와 계절성의 강도를 측정하기

지금까지 살펴본 시계열 분해는 추세와 계절성에 대한 정보를 원 데이터에서 발라낼수 있게 해준다. 덧셈분해의 공식을 떠올려 보자.

덧셈 분해

추세 + 계절성 + 나머지의 합이 관측값이다. 따라서 추세가 강하게 나타나면 (계절성이 조정되었다 가정하고), 나머지 항의 변동성이 줄어들 것이다. 만약 추세가 없거나 아주 작다면, (계절성이 조정되었다 가정하면) 추세와 나머지의 분산값이 비슷해야 한다. 아래의 식은 추세의 강도를 정의하는 공식이다.

 

추세의 강도

나머지 성분의 분산이 계절성이 조정된 데이터의 분산보다 클 수 있으므로, 위 식에서 F(t)의 최소값이 0이 된다. 

계절성의 강도의 정의도 같은 방식으로 정의할 수 있다. 이 경우는 추세가 제거되었다고 가정하고, 아래와 같은 공식으로 나타낸다.

추세가 제거된 데이터

F(s)가 0에 가까우면 계절성이 없거나 강도가 약하다는 것이고, 1에 가까우면 계절성이 강하다는 것으로 해석한다.

이런 추세와 계절성의 강도를 측정하는 것은 데이터에에서 추세나 계절성이 강한 값을 찾고자 하는 등의 경우에 유용하다.

 

6.8 분해법으로 예측하기

분해법은 시계열 데이터의 각 요소(추세, 계절성, 나머지)를 발라내는데 사용할수 있지만, 예측에도 쓸 수 있다. A(t) = T(t) + R(t) 로 정의한다. A(t)는 위에서 정의한 계절성이 조정된 성분이다. 그러면 계절성분 S(t)와, 나머지 성분 A(t)를 아래처럼 쓸 수 있다. 계절성이 거의 변하지 않는다고 가정하고, 관측값의 마지막 연도를 사용해 예측한다. (Seasonal Naïve Method; 계절성 단순기법) 이렇게 계절성이 통제된 데이터를 예측하기 위해선, random walk with drift, Holt's method, non-seasonal ARIMA method 같은 비계절성 예측 기법을 사용할 수 있다.

시계열 분해

아래는 계절성이 통제된 전장장비 지수 데이터의 나이브 예측값이다. 계절성이 통제되었다 칠때, 추세에 대한 예측값은 아래처럼 나오게 된다. 

## STL로 분해
fit <- stl(elecequip, t.window=13, s.window="periodic",
  robust=TRUE)

## seasonally-adjusted naive 적용하기
fit %>% seasadj() %>% naive() %>%
  autoplot() + ylab("New orders index") +
  ggtitle("Naive forecasts of seasonally adjusted data")

 

마지막 예측값을 쭉 가져온다

 

위 예측값에 계절성을 다시 추가할 수 있다. 계절성의 나이브 예측값을 다시 추가하는데, forecast() 함수를 stl 로 분해한 것에 사용하면 된다. 

## STL로 분해
fit <- stl(elecequip, t.window=13, s.window="periodic",
  robust=TRUE)

## 분해한 STL에 forecast 로 예측값 씌워주기
fit %>% forecast(method="naive") %>%
  autoplot() + ylab("New orders index")

 

 

위처럼 STL을 쪼개고 계절성을 다시 추가하는 것은 stlf() 함수로 단숨에 할수 있다. 아래 코드에는 나이브 기법이 들어가 있는데, 다른 기법을 집어 넣어도 된다. 

fcast <- stlf(elecequip, method='naive')

 

반응형