시계열분석의 이노베이티브 아웃라이어

시계열분석의 이노베이티브 아웃라이어

빌드업

2.png

위의 그래프에서 2001년 9월에 굉장히 큰 아웃라이어를 찾을 수 있다. 그러나 애디티브 아웃라이어와 달리 그 후에도 계속해서 영향을 미치고 있다. 여객기의 이용자 수는 계절성을 가지고 꾸준히 증가하고 있었는데, 911테러의 공포가 이용자 수 자체를 팍 줄여버린 것으로 해석할 수 있다.

정의 1

이렇게 분석의 판도 자체를 바꾸는 아웃라이어를 이노베이티브 아웃라이어Innovative Outlier라 부른다.

실습

이러한 이노베이티브 아웃라이어는 직관적으로 찾아도 좋고, TSA 패키지의 detectIO() 함수를 사용해도 좋다. 사용하는 방법은 다음과 같다:

  1. 원래의 데이터로 이노베이티브 아웃라이어가 고려되지 않은 시계열분석을 한다.
  2. 리턴된 모형자체를 detectIO() 함수에 넣는다. 그러면 다음과 같은 결과를 얻는다. 20190825\_194941.png
  3. 람다의 절댓값이 가장 큰 인덱스를 최우선적인 후보로 둔다. 위의 스크린샷에선 69번째다.
  4. 이노베이티브 아웃라이어를 반영해서 다시 분석한다. 마음에 드는 결과가 나올 때까지 반복한다.

이노베이티브 아웃라이어를 반영한 분석은 개입분석을 사용하는데, 수식적으로는 접근하기 어려운 부분이 많다. 다행스럽게도 코드는 별로 어렵지 않고, arima()io 옵션에 해당 인덱스를 직접 넣어주면 된다. 예를 들어 69번째가 의심된다면 io=c(69)와 같이 추가하면 되는 것이다.

22.png

실제로 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')

  1. Cryer. (2008). Time Series Analysis: With Applications in R(2nd Edition): p257. ↩︎

댓글