실전 시계열 분석 6장 AR(p) 모델의 파라미터 선택 [daily_Demand_Forecasting_Orders 데이터 셋 ]

    실전 시계열 분석의 기초적인 부분은 6장에 있다.   6장 초반부에 나오는 수학적인 설명이 이 서적의 진입 장벽이고,   UCI daily_Demand_Forecasting_Orders  은행 수요 데이터 셋을 데이터 프레임으로 바꾸는 것도 하나의 큰 장벽이다.

   

모델의 파라미터 선택 부분을 이해 하려면,  앞의 내용(아래 링크)을 어느 정도 이해 하고 와야 한다. 

  https://rdmkyg.blogspot.com/2021/08/ar.html

  그리고 예제 코드가 아래 링크와 같이 있지만,  여기에도 소스코드가 일부만 들어 있고 6장은 없다. 

https://deep-diver.github.io/practical-time-series-analysis-korean/


하지만,  이번 장에서는 아주 쉽게 데이터 셋을 얻고 내용도 정리 할 수 있도록 하겠다. 



AR(p) 모델의 파라미터 선택

  데이터가 AR 모델에 적합한 지를 평가 하려면  먼저 과정과 편자기상관함수 partial autocorrelation function (PACF)의 그래프를 그려보는 것이 좋다.    AR 과정의 PACF는 AR(p)과정의 차수 p를 넘는 부분을 0으로 잘라버리는데,  그 결과 데이터에서 실증적으로 볼 수 있는 AR 과정의 차수를 구체적이며 시각적으로 표시한다. 

   반면 AR 과정은 시간의 위치가 증가(미래) 할수록 지수적으로 완화됨을 의미하는 자기상관함수  autocorrelation function(ACF)의 특징적 형태를 갖지만, 유의미한 ACF는 아니다. 

실제  UCI daily_Demand_Forecasting_Orders을 사용 한다.  먼저 시간의 순서 대로 데이터를 그리고  AR 과정으로 모델링 할 것이므로 PACF로 AR 과정의 시차를 잘라 낸다. 

# 패키지 로딩 
  library(readxl)
  library(httr)

# 데이터 셋 가져오기 
  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) 

# 그래프 그리기 
  plot(demand[["Banking orders (2)"]], type = 'l')

시계열 그래프  은행의 일일 주문 건수(2)

  pacf(demand[["Banking orders (2)"]])


편자기 상관함수 PACF  가공되지 않은 차수의 시계열 


lag 3의 PACF 값이 임계값을 5% 초과함을 알수 있다.  이는 R의 stats 패키지가 제공하는 ar() 함수의 결과와 일치한다.   지정되지 않은 경우, ar() 함수는 자동으로 자기회귀 모델의 차수를 선택한다. 

##R 
  fit <- ar(demand[["Banking orders (2)"]], method = "mle")
  fit
## 
## Call:
## ar(x = demand[["Banking orders (2)"]], method = "mle")
## 
## Coefficients:
##       1        2        3  
## -0.1360  -0.2014  -0.3175  
## 
## Order selected 3  sigma^2 estimated as  1.414e+09

  ar() 함수의 문서에 따르면 (기본 파라미터로) 선택된 차수는 아카이케 정보기준 akaike information criterion(AIC)에 다라 결정된다.  아카이케 정보기준은 PACF로 얻는 시각적 선택이 정보기준의 최소화로 얻은 선택과 일관성을 보여주기 유용하다.  이 두 가지 방법은 모델의 차수를 선택하는 서로 다른 방법이지만, 이 경우에서는 일관성을 보인다.

아카이케 정보기준

모델의 AIC는 AIC = 2K - 2lnL와 같다. 여기서 k는 모델을 구성하는 파라미터의 개수이며, L의 함수에 대한 최대 우도 likelihood 값이다. 일반적으로 모델의 복잡도를 줄이면서 (예 : k를 줄임) . 모델의 가능성 및 적합도(예 : L)를 높이는 것이 목표 이다. 즉, AIC 값이 작은 모델을 선호하는 것이다.

우도 함수는 주어진 데이터에 대해 함수의 특정 파라미터들이 다른 파라미터들과 얼마나 연관성이 있을지를 측정 한다. 가령 다음 데이터에 선형회귀 모델을 적합하는 상황을 상상해보자

x y

1 1

2 2

3 3

이 데이터를 모델 y = b × x에 적합한다면, 우도함수는 b=1에서 추정이 b=0에서의 추정보다 훨씬 더 높은 가능성을 가진다는 것을 알려 준다. 우도함수는 특정 데이터 집학에 대한 모델의 가장 정확한 파라미터를 찾는데 도움을 주는 도구로서 생각해 볼 수 있다.

ar() 함수는 모델의 계수도 제공 했다.  그런데 이계수를 제한하고 싶을지도 모른다. 예를 들어 PACF의 지연 -1항에 대한 계수를 포함할지, PACF 값이 임계값 보다 훨씬 낮은 항에 필수 계수 mandatory coefficient  0을 할당 할지 등과 같은 것이다.  이때는 stats 패키지에 포함된 arima() 함수를 사용할 수 있다. 

다음은 차수 파라미터를 c(3, 0, 0) 으로 설정하여 AR(3)을 적합하는 함수의 호출 방법을 보여 준다.  여기서 3은 AR 요소의 차수이다. 

## R
  est <- arima(x =demand[["Banking orders (2)"]],
                         order = c(3, 0, 0))
  est 
## 
## Call:
## arima(x = demand[["Banking orders (2)"]], order = c(3, 0, 0))
## 
## Coefficients:
##           ar1      ar2      ar3  intercept
##       -0.1358  -0.2013  -0.3176  79075.350
## s.e.   0.1299   0.1289   0.1296   2981.124
## 
## sigma^2 estimated as 1.414e+09:  log likelihood = -717.42,  aic = 1444.83

 계수를 0으로 제한하면 사전 지식 또는 의견을 모델에 주입할 수 있다.  가령 지연 -1 항을 0으로 유지하려면 다음처럼 함수를 호출 할 수 있다. 

## R
  est.1 <- arima( x =demand[["Banking orders (2)"]],
                  order = c(3, 0, 0),
                  fixed =  c(0, NA, NA, NA))
## Warning in arima(x = demand[["Banking orders (2)"]], order = c(3, 0, 0), : some
## AR parameters were fixed: setting transform.pars = FALSE
  est.1     
## 
## Call:
## arima(x = demand[["Banking orders (2)"]], order = c(3, 0, 0), fixed = c(0, NA, 
##     NA, NA))
## 
## Coefficients:
##       ar1      ar2      ar3  intercept
##         0  -0.1831  -0.3031  79190.705
## s.e.    0   0.1289   0.1298   3345.253
## 
## sigma^2 estimated as 1.44e+09:  log likelihood = -717.96,  aic = 1443.91


arima 함수의 fixed 파라미터에 전달된 벡터 값에 NA 대신 0을 넣어주면, 해당 값을 0으로 유지하도록 제한 할 수 있다. 

이제 학습 데이터에 대한 모델의 성능을 검사해 모델의 적합도를 평가할 차례이다.  평가는 두 가지 방법으로 해볼 수 있는데,  그 중 첫 번째 모델의 잔차(오차)에 대한 ACF 그래프로 모델이 다루지 못하는 자체상관의 패턴 유무를 확인하는 방법이다. 

acf() 함수를 사용하면 단순하게 잔차 그래프를 그릴 수 있다. 

## R
  acf(est.1$residuals)

지연 -1 파라미터를 0으로 강제하여 적합시킨 AR(3) 모델의 잔차에 대한 ACF

ACF 값 중 어느 것도 임계값을 넘지 않았다.  물론 유의성을 평가하거나 기각하기 위해 임계값에 맹목적으로 굴복해서는 안되지만, 이 관측은 이미 믿을 만 하다고 알려진 유용한 데이터 이다. 

  이 그래프로 잔차 residual (오차항)들 간의 자체 상관 패턴을 찾아 볼 수 없다.  어떤 패턴이 드러난다면,  잔차의 자체 상관을 다룰 수 있도록 모델에 추가로 항을 포함해 복잡성을 늘리는 것을 고려 해봐야 한다. 

 흔히 수행되는 또 다른 검정 방법은 륭-박스 검정 Ljung-Box test 이다.  시계열의 임의성을 검정하는 방법으로,  다음과 같은 귀무가설 및 대립가설을 제시한다. 

  • H0 : 데이터가 일련의 상관관계를 나타내지 않습니다. 
  • H1 : 데이터가 일련의 상관관계를 나타냅니다.    

이 검정 방법은 AR(보다 일반적으로는  ARIMA) 모델에 적용되는 것이 일반적이다. 구체적으로는 모델 자체보다는 적합된 모델의 잔차에 적용된다. 

## R 
  Box.test(est.1$residuals, lag = 10, type = "Ljung", fitdf = 3)
## 
##  Box-Ljung test
## 
## data:  est.1$residuals
## X-squared = 9.3261, df = 7, p-value = 0.2301


륭-박스 검정을 est.1 모델에 적용하여 모델의 적합도를 평가 하였다.  이 예제로 부터 데이터가 일련의 상관관계를 보이지 않는다는 귀무가설을 기각할 수 없으며, 이로 부터 잔차의 ACF그래프로 발견한 사실을 확정 지울 수 있다. 

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

댓글 없음:

댓글 쓰기

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

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