시계열분석 질문 - freelgs7님 답변


상세한 설명을 주셔서 감사합니다. 정독했습니다.
저는 이론적인 수업만을 받다가 실생활데이터를 이용해 예측값을 추정하고 지속적으로 모니터링하는 어플리케이션을 구축해보려는 시도가 있었는데 그런 도중에 이렇게 질문을 하게 되었습니다.

정독 이후에 또다른 테스트를 시도해 보았습니다.

R에 lh 내장데이터 객체가 있던데 한번 이를 활용해 보았습니다.
아래코드는 time series 객체 lh 를 강제로 ARIMA(1,0,1) 모형으로 적합한 결과입니다.

lh
## Time Series:
## Start = 1 
## End = 48 
## Frequency = 1 
##  [1] 2.4 2.4 2.4 2.2 2.1 1.5 2.3 2.3 2.5 2.0 1.9 1.7 2.2 1.8 3.2 3.2 2.7
## [18] 2.2 2.2 1.9 1.9 1.8 2.7 3.0 2.3 2.0 2.0 2.9 2.9 2.7 2.7 2.3 2.6 2.4
## [35] 1.8 1.7 1.5 1.4 2.1 3.3 3.5 3.5 3.1 2.6 2.1 3.4 3.0 2.9
fit <- arima(lh, ,c(1,0,1))
summary(fit)
## 
## Call:
## arima(x = lh, seasonal = c(1, 0, 1))
## 
## Coefficients:
##         sar1    sma1  intercept
##       0.4522  0.1982     2.4101
## s.e.  0.1769  0.1705     0.1358
## 
## sigma^2 estimated as 0.1923:  log likelihood = -28.76,  aic = 65.52
## 
## Training set error measures:
##                        ME      RMSE       MAE       MPE     MAPE      MASE
## Training set 0.0001162992 0.4385341 0.3432671 -3.502936 15.03096 0.9546483
##                   ACF1
## Training set 0.0376173

위의 결과를 통해

\(\hat{Z}_t=0.4522Z_{t-1} + a_t - 0.1982a_{t-1}\)

의 모델을 우선 만들었다고 볼 수 있고

\(\hat{Z}_{49} = 0.4522 Z_{48} + a_t - 0.1982a_{t-1}\)

의 49번째 시차 예측추정값을 산출하기 위해 아래코드를 수행해 보았습니다.

forecast(fit, h=5)
##    Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 49       2.679611 2.117607 3.241615 1.820100 3.539122
## 50       2.531951 1.861544 3.202359 1.506651 3.557251
## 51       2.465179 1.774697 3.155661 1.409178 3.521180
## 52       2.434985 1.740469 3.129500 1.372815 3.497154
## 53       2.421331 1.725994 3.116668 1.357904 3.484757

그결과 2.679611 값이 나오며 \(Z_{48}=2.9\) 이므로 백색잡음항 \(a_t - 0.1982a_{t-1}\) 을 잠시 보류하여 \(0.4522 \times Z_{48}\) 값만을 고려해 계산해 보았을 때

0.4522 * 2.9
## [1] 1.31138

로써 forecast() 로 산출된 예측값 2.679611 과 차이가 너무나도 나는것을 확인했습니다.
forecast() 외에 더 일반적인 predict() 함수를 써도

predict(fit)
## $pred
## Time Series:
## Start = 49 
## End = 49 
## Frequency = 1 
## [1] 2.679611
## 
## $se
## Time Series:
## Start = 49 
## End = 49 
## Frequency = 1 
## [1] 0.4385341

그 결과는 같더군요
이정도 차이를 보이는것을 볼 때
분명 이동평균모형 부분인 MA(Moving Average)항에 대한 계산이 되어있는것으로 예상됩니다.

forecast(fit, h=1)
##    Point Forecast    Lo 80    Hi 80  Lo 95    Hi 95
## 49       2.679611 2.117607 3.241615 1.8201 3.539122
forecast(fit, h=1)
##    Point Forecast    Lo 80    Hi 80  Lo 95    Hi 95
## 49       2.679611 2.117607 3.241615 1.8201 3.539122
forecast(fit, h=1)
##    Point Forecast    Lo 80    Hi 80  Lo 95    Hi 95
## 49       2.679611 2.117607 3.241615 1.8201 3.539122

그렇다고 forecast() 반복하여 예측값을 산출했을때 변화도 없습니다.
백색잡음항이 사전에 계산되어 고정값으로 씌워진 것인건가.. 하는 의문도 생깁니다.
이런점을 알게되니 forecast() 를 사용해 어플리케이션을 구축해야겠다는 마음이 변질되더군요 T_T..
freelgs7 님의 의견처럼 이론에 근거하여 백색잡음항(White noise)에 난수를 부여해 사용하는것이 저 역시 옳다고 생각합니다.
단 SAS든 R이든 예측값을 내어 주는 로직이 그렇지 않다는것을 이번 계기로 처음알게되어서 약간 충격이었습니다.
전 당연히 확률변수로 인해 예측수행마다 값이 다르게 나오는것인줄 알고 있었거든요..!

덕분에 고민도 나누고 의견도 받게되어 감사합니다.


lovetoken

2016-05-09