ARIMA 즉 "자기회귀누적이동평균" 의 모델에 대한 설명의 미리 보고 파라메터 선택 부분을 봐야 한다. 앞에 이야기에서 이어지는 것이다. 필요시 아래를 클릭 하여 참고 하면 된다.
https://rdmkyg.blogspot.com/2021/08/arima.html
ARIMA 모델에서 파라메터의 역할을 아래와 같다.
- 파라메터 p : 자귀회귀와 관련이 있고, 순환성을 설명할때 필요하다.
- 파라메터 q : 이동평균과 관련이 있고, 오차항에 대한 시스템 충격이라고 표현환다.
- 파라메터 d : 시계열에서 설명 하는 차분이다.
파라미터의 선택
ARIMA 모델은 (p,d,q) 파라미터로 구체화 된다. 데이터에 적절한 p,d,q값을 선택해야 한다.
아래는 위키피디아에 등재된 ARIMA 모델의 잘 알려진 일부 예를 보여준다.
- ARIMA(0, 0, 0)는 백색잡음 모델이다.
- ARIMA(0, 1, 0)은 확률보행이고, 0이 아닌 상수로 구성된 ARIMA(0, 1, 0)는 표류가 있는 확률보행 random walk with drift 이다.
- ARIMA(0, 1, 1)는 지수평활 exponential smoothing 모델이고, ARIMA(0,2,2)는 지수평활을 추세를 가진 데이터로 확장시킨 홀트의 선형방법 Holt's linear method과 같다. (추세를 기반으로 한 예측에 사용 될 수 있다.)
도메인 지식, 다양한 적합성 평가 지표 (예: AIC), 주어진 과정에 대하 PACF 및 ACF가 나타나는 방식에 대한 일반 지식을 조합하여 모델의 차수를 선택 한다. 이어지는 내용에서는 PACF 및 ACF에 기반하에 수동으로 ARIMA 모델을 반복적으로 과정에 적합시키는 방법과 forecast 패키지의 auto.arima() 함수와 같은 도구로 파라미터를 자동으로 선택하는 방법 모두를 다룬다.
수동적으로 모델을 적합시키는 방법
단순성이 가장 중요한 ARIMA 모델의 파라미터 선택을 위한 발견적 heuristics 방법들이 있습니다. 그 중 가장 오랫동안 인기를 누려오고 반복적으로 수행되는 다단계 과정인 박수-젠킨스 방법이 있습니다.
- 데이터, 시각화, 기반 지식을 사용하여 데이터에 적합한 모델의 종류를 고른다.
- 주어진 학습용 데이터로 파라미터를 추정한다.
- 학습용 데이터를 기반으로 모델 성능을 평가하고, 모델의 파라미터를 조정하여 성능 진단상 나타나는 약점을 해결 한다.
데이터 적합시키는 한가지 예를 다루겠다. 그러려면 데이터가 필요한데, 사용되는 데이터의 투명성과 정답을 알아야 한다는 목적에 따라 ARMA 프로세스를 사용하여 데이터를 생성한다.
실전 시계열 분석 서적에서는 아래와 같은 예제가 있었다 하지만, # 표시는 주석 으로 되어 있어, R에서 코드가 실행 되지 않는다.
따라서 아래와 같이 방법을 바꾸어서 데이터를 돌려야 한다. ARIMA 시뮬레이션 모델을 돌릴때, 모델의 오차항을 다루는 ma 의 q 파라레터를 조정하여, 서적과 유사하게 모델을 접근해 보겠다.
# 패키지 로딩
require(forecast)
## ARIMA 모델의 차수값을 아래와 같이 정한다.
y = arima.sim(n = 1000, list( ar = c(0, -0.30) , ma = 0.25))
plot(y, type ='l')
정상성의 여부를 파악하기 위해 시계열 그래프를 그려봐야 한다. 그다음 y에 대한 ACF와 PACF를 관찰하고 아래 표를 이용해서 비교 합니다.
ACF와 PACF 모두 급격히 0으로 떨어지는 현상이 목격되지 않으므로 ARMA 과정이 맞다는 것을 유추 할 수 있다. 차분과 증거가 필요하지 않다는 것을 알기 때문에, 처음에는 비교적 간단한 ARIMA(1, 0, 1) 모델을 적합 시키는 것으로 시작 하겠다.
ar1.ma1.model = Arima(y, order = c(1, 0, 1))
par(mfrow = c(2,1))
acf(ar1.ma1.model$residuals)
pacf(ar1.ma1.model$residuals)
위 그림 잔차는 PACF 에서 특히 큰 값을 보여주므로 자기회귀 동작을 완전히 설명하지 못하는다는 것을 알 수 있다. 따라서 AR 요소에 대한 높은 차수를 가진 ARIMA(2, 0, 1)모델을 만들고 테스트한 다음, 해당 모델의 잔차에 대한 ACF 및 PACF 그래프를 아래와 같이 그린다.
ar2.ma1.model = Arima(y, order = c(2,0,1))
plot(y, type ='l')
lines(ar2.ma1.model$fitted, col = 2)
plot(y, ar2.ma1.model$fitted)
acf(ar2.ma1.model$residuals)
pacf(ar2.ma1.model$residuals)
위 그림에서 볼 수 있듯이 ACF와 PACF에서는 더는 큰 값이 목격되지 않았다. 모델의 단순성에 대한 추구와 ARIMA 모델의 과적합에 대한 위험성을 고려해 볼 때, 경험이 많은 분석가는 이쯤에서 멈추는 것이 다당할지도 모른다. 자귀회귀, 이동평균, 차분의 요소로 적할 될 필요가 있는 잔차의 그 이상의 행동을 살펴보지 행동을 보고 않고 것을 가정한 말이다.
다음은 좀 더 복잡한 모델을 적합 시키는 시도를 하는 코드이다. 이전 모델과 비교해보면, 모델의 성능이 비약적으로 향상되지 않았고, ACF와 PACF의 값을 더 줄이는데 크게 기어하지 못했다. 아래와 같이 확인 해 보자.
ar2.ma2.model = Arima(y, order = c(2, 0, 2))
plot(y, type ='l')
lines(ar2.ma2.model$fitted, col =2)
par(mfrow = c(2,1))
acf(ar2.ma2.model$residuals)
pacf(ar2.ma2.model$residuals)
ar2.d1.ma2.model = Arima(y, order = c(2,1,2))
plot(y, type = 'l')
lines(ar2.d1.ma2.model$fitted, col =2)
plot(y, ar2.d1.ma2.model$fitted)
par(mfrow = c(2,1))
acf(ar2.d1.ma2.model$residuals)
pacf(ar2.d1.ma2.model$residuals)
아래의 코드는 적합된 모델의 예측값과 실제값 사이의 상관관계를 분석하여 모델을 비교한 것이다.
cor(y, ar1.ma1.model$fitted)
## [1] 0.3668006
cor(y, ar2.ma1.model$fitted)
## [1] 0.4258621
cor(y, ar2.ma2.model$fitted)
## [1] 0.4258938
cor(y, ar2.d1.ma2.model$fitted)
## [1] 0.4261985
ARIMA(1,0,1) 모델에서 ARIMA(2,0,1) 모델로 전환하면서 상관계수가 0.36에서 0.42로 바뀌는 것을 보면 개선이 이루어 졌다는 것을 알수 있다. 반면 복잡석을 더 추가한 세 번째와 네 번째 모델의 상관계술를 보면 크게 개선되니 않았다는 것도 알 수 있다. 이러한 사실은 앞서 내일 ARIMA(2,0,1) 모델이 충분하고 AR 또는 MA 구성 요소를 그 이상으로 향상하여 적합시킬 필요가 없다는 결론을 내릴 수 있다.
몇가지 이유로 ARIMA 과정을 '수동으로' 직접 적합 시키는 작업은 비판을 받고 있다. 시계열 분석가에게 많은 부담을 줄 수 있으며, 수동적이기 때문에 때로는 형편 없는 결과를 초래 할 수도 있기 때문이다. 또한 많은 시간이 투자되어야 하며, 도출된 결과가 긍정적이더라도 이는 분석가가 시행한 특정 작업의 순서에 의존적일 수 있다. 수십 년간 실세계 예측 문제에서 실제로 사용했고 좋은 결과를 만들어낸 방식이지만 완벽하다고 보기는 어렵다.
#참고서적 : 실적 시계열 분석 한빛 미디어
댓글 없음:
댓글 쓰기