시계열 분석 ARIMA 모델 파라메터 선택 [자동으로 모델을 적합시키는 방법]

    오늘날에는 수동으로 반복하는 과정에서 벗어나,  모델을 자동으로 선택하는 방법이 사용된다.  자동화된 모델의 선택은 앞서  forecast 패키지의 auto.arima() 함수와 함께 잠깐 언급된 AIC 와 같은 다양한 정보 손실 기준을 토대로 이루어 진다.


자동으로 모델을 적합시키는 방법

# 패키지 로딩 
  library(readxl)
  library(httr)
  library(forecast)
# 데이터 셋 가져오기 
  url = "https://drive.google.com/u/0/uc?id=1txatfA9L88BFAfDKKXbqfGMSw6TBfwhQ&export=download"
  GET(url, write_disk(tf <- tempfile(fileext = ".xlsx")))

 demand <- read_excel(tf, 1L) 

## R
  est = auto.arima(demand[["Banking orders (2)"]],
                   stepwise = FALSE,  ## 느리지만 좀 더 완전한 검색이 가능
                   )

  est
## Series: demand[["Banking orders (2)"]] 
## ARIMA(0,0,3) with non-zero mean 
## 
## Coefficients:
##           ma1      ma2      ma3       mean
##       -0.0645  -0.1144  -0.4796  79914.783
## s.e.   0.1327   0.1150   0.1915   1897.407
## 
## sigma^2 estimated as 1.467e+09:  log likelihood=-716.71
## AIC=1443.42   AICc=1444.53   BIC=1453.89

 함수의 입력 인수 중 마지막 한 줄은  AR 및 MA 가 수용 가능한 최대 차수를 지정한 부분으로,  이전에 수행한 데이터 탐색에서 얻은 사전 지식의 일부를 토대로 작성 하였다.  모델을 선택하는 알고리즘이 고른 모델은 사실상 지정된 것보다 더 단순한 것으로 AR 항 자체가 없다.  그래도 이 모델은 잘 적합된 것으로 보인다.  다만 타당한 이유 없이 단순히 이 모델을 뛰어 넘기 위해 데이터를 지나치게 들여다보는 행위는 지양 되어야 한다.  AIC 기분에 따르면 수동으로 직접 고른 MA 모델이 더 나은 것으로 보이지만, 그래프를 그려보면 이 둘 사이에는 의미 있는 수준의 차이가 없다. 

자동으로 선택된 모델이 만든 예측의 그래프를 그리고, 잔차를 확인 하고,  문제 해결에 더 많은 항이 추가될 필요가 있는지 등어 대한 것은 더 많은 확인이 필요하다.  예측의 경우를 포함하여 코드 자체는 AR 및 MA에서 사용한 것과 다르지 않고, ARIMA 모델이 앞서 예측에 사용된 MA 모델과 크게 다르지 않으므로 코드를 생략 한다. 

부수적으로 수동으로 모델을 적합 시킬 때만든 가상의 데이터에 대해 auto.arima()가 도출한 결과를 살펴 보자. 


##  ARIMA 모델의 차수값을 아래와 같이 정한다.  
  y = arima.sim(n = 1000, list( ar = c(0, -0.30) , ma = 0.25))  
  
  
## R
  auto.model = auto.arima(y)
  auto.model
## Series: y 
## ARIMA(2,0,1) with zero mean 
## 
## Coefficients:
##          ar1      ar2     ma1
##       0.0476  -0.3190  0.1965
## s.e.  0.0772   0.0342  0.0804
## 
## sigma^2 estimated as 0.9991:  log likelihood=-1417.14
## AIC=2842.29   AICc=2842.33   BIC=2861.92

이번에는 auto.arima()에 모델의 검색 시작점을 알리는 인수조차 제공되지 않았지만, 우리가 만든 것과 동일한 솔루션으로 수렴된 것을 알 수 있다..  서로 다른 방법을 사용했지만, 동일한 해결책을 찾은 경우 이다.

복잡한 모델을 수동으로 만들기 위해서 간단한 모델의 잔차에 대한 ACF 및 PACF를 직접 분석했던 반면, auto.arima()는 주로 격자탐색 grid search을 통한 AIC 최소화 작업을 수행한다.  물론 ARIMA 과정이 원본 데이터를 생성했다는 사실을 감안하면 실세계 데이터보다는 훨씬 더 간단한 경우이다.  실세계 데이터에서는 수동 적합과 자동화된 모델 선택이 동일한 결론에 항상 도달하지는 않습니다. 

auto.arima() 또는 이와 유사한 자동화된 모델의 선택 도구를 분석의 중요한 요소로 취급하고 싶다면 관련 문서를 읽어 본 다음, 합성 데이터로 실험하고 다른 분석가들의 경험을 참고하는 것이 중요하다.  

순진하게 예상했던 것만큼 잘 동작하지 않은 경우도 있지만, 이를 해결하기 위한 방법들도 많이 발견되었기 때문이다.  이러한 자동화된 방법들은 훌륭한 해결책이기는 하지만, 그렇다고 완벽하다고 본 수는 없다.  auto.arima()의 동작방식은 이 기능을 제작한 롭 하인드먼 교수가 집필한 교과서에 잘 설명되어 있으며, 이 책은 온라인에서도 무료로 열람이 가능 하다. 

지금까지 파라미터 추정에 대한 두 가지 방식을 살펴 보았다.  그 중 하나는 박스-젠킨스 접근방식을 따르는 방식이었고,  나머지 하나는 forecast 패키지가 제공하는 자동화된 방식을 사용하는 것이다.  사실 많은 실무자가 이 방식에 대한 자신들만의 강한 신념을 가지고 있다.  일부는 수동적인 방식만 선호하는 반면,  어떤 사람들은 자동화된 도구만 선택해서 사용한다.  이는 이 분야에서 계속 논쟁으로 남아 있다.  하지만 장기적으로 보면 시계열 분석에 점점 더 많은 빅 데이터를 도입하면서 대규모 데이터셋의 시계열 분석에 있어서 자동화 된 담색 및 모델의 적합 방법이 지배적일 가능성이 높다. 

# 참고서적 : 실전 시계열 분석   한빛 미디어 

댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...