시계열분석의 이노베이티브 아웃라이어
빌드업
위의 그래프에서 2001년 9월에 굉장히 큰 아웃라이어를 찾을 수 있다. 그러나 애디티브 아웃라이어와 달리 그 후에도 계속해서 영향을 미치고 있다. 여객기의 이용자 수는 계절성을 가지고 꾸준히 증가하고 있었는데, 911테러의 공포가 이용자 수 자체를 팍 줄여버린 것으로 해석할 수 있다.
정의 1
이렇게 분석의 판도 자체를 바꾸는 아웃라이어를 이노베이티브 아웃라이어innovative Outlier라 부른다.
실습
이러한 이노베이티브 아웃라이어는 직관적으로 찾아도 좋고, TSA
패키지의 detectIO()
함수를 사용해도 좋다. 사용하는 방법은 다음과 같다:
- 원래의 데이터로 이노베이티브 아웃라이어가 고려되지 않은 시계열분석을 한다.
- 리턴된 모형자체를
detectIO()
함수에 넣는다. 그러면 다음과 같은 결과를 얻는다. - 람다의 절댓값이 가장 큰 인덱스를 최우선적인 후보로 둔다. 위의 스크린샷에선 69번째다.
- 이노베이티브 아웃라이어를 반영해서 다시 분석한다. 마음에 드는 결과가 나올 때까지 반복한다.
이노베이티브 아웃라이어를 반영한 분석은 개입분석을 사용하는데, 수식적으로는 접근하기 어려운 부분이 많다. 다행스럽게도 코드는 별로 어렵지 않고, arima()
의 io
옵션에 해당 인덱스를 직접 넣어주면 된다. 예를 들어 69번째가 의심된다면 io=c(69)
와 같이 추가하면 되는 것이다.
실제로 IO가 반영되고나면 분석이 눈에 띄게 개선된다.
코드
다음은 R 로 작성한 예제코드다.
library(TSA)
data("airmiles")
win.graph(6,4)
plot(airmiles, main="미국의 여객기 이용자 수")
out1<-auto.arima(airmiles)
detectIO(out1)
out2<-arima(airmiles,order=c(1,0,1),seasonal=list(order=c(0,1,1),period=12),io=c(69))
win.graph(6,4); par(mfrow=c(1,2))
plot(airmiles,main="IO 미반영",xlim=c(2000,2003),xaxt='n'); lines(fitted(out1),col='red')
plot(airmiles,main="IO 반영",xlim=c(2000,2003),xaxt='n'); lines(fitted(out2),col='red')
Cryer. (2008). Time Series Analysis: With Applications in R(2nd Edition): p257. ↩︎