1 시계열 예측 성능비교 1

Rob J Hyndman은 “International Journal of Forecasting” 저널에 제출된 논문에 대해서 논문게재 거절을 표하면서 다음의 기준을 제시하고 있는데 타당한 면이 많다.

  • 단변량 시계열(Univariate Time Series)
    • 계절을 타지 않는 단변량 시계열 데이터의 성능기준은 랜덤워크(random walk). 랜덤워크는 모든 예측값이 마지막 관측점과 동일하다고 예측함.
    • 계절성을 갖는 단변량 시계열 데이터 성능기준은 계절 최종 관측값이 지난 계절 최종 관측값과 동일하게 예측함.
    • ARIMA 모형은 모든 사람이 ARIMA 모형을 알고 있는 것이 아니라 다소 문제가 될 수 있지만, forecast 팩키지 auto.arima() 함수를 사용해서 성능기준점으로 삼을 수 있다.
  • 다변량 시계열(multivariate Time Series)
    • 단변량 시계열(Univariate Time Series)과 동일한 방법 적용.
  • 공변량(covariate)을 갖는 시계열
    • 표준 선형 회귀모형이 기본 성능기준을 제시하는 것으로 삼는다.
  • Time Series Data, Time Series Data Library(TSDL) by Rob Hyndman, M3-Competition에 제시된 방법론을 성능기준점으로 삼아 예측모형을 개발함.

2 시계열 예측 기본 방법론 2

  • 평균방법: meanf(y, h)
  • 나이브(naive) 방법: naive(y, h), rwf(y, h)
  • 계절 나이브(naive) 방법: snaive(y, h)
  • 이동(drift) 방법: rwf(y, h, drift=TRUE)
  • ETS: ets()
  • ARIMA: auto.arima()
  • \(\theta\) 방법: thetaf()
  • 단일 예측 방법론보다 성능이 좋은 forecastHybrid 팩키지 기본기능도 권장된다.

3 훈련/검증 시계열 데이터 3

3.1 전통적인 검증

전통적인 시계열 모형 개발방법론은 훈련데이터와 시험데이터를 나누고 훈련데이터로 예측모형을 개발하고 나서 예측모형의 성능을 시험데이터로 검증하는 방식을 많이 취했다.

train = 1:18
test = 19:24
par(mar=c(0,0,0,0))
plot(0,0,xlim=c(0,26),ylim=c(0,2),xaxt="n",yaxt="n",bty="n",xlab="",ylab="",type="n")
arrows(0,0.5,25,0.5,0.05)
points(train, train*0+0.5, pch=19, col="blue")
points(test,  test*0+0.5,  pch=19, col="red")
text(26,0.5,"시간")
text(10,1,"훈련데이터",col="blue")
text(21,1,"시험데이터",col="red")

3.2 훈련/시험 (누적) 교차검증

예측 정확도를 시험데이터에 대해서 평균을 내는 방법으로 “evaluation on a rolling forecasting origin”으로 알려져 있고, tsCV() 함수를 사용한다.

par(mar=c(0,0,0,0))
plot(0,0,xlim=c(0,28),ylim=c(0,1),
     xaxt="n",yaxt="n",bty="n",xlab="",ylab="",type="n")
i <- 1
for(j in 1:10)
{
  test <- (16+j):26
  train <- 1:(15+j)
  arrows(0,1-j/20,27,1-j/20,0.05)
  points(train,rep(1-j/20,length(train)),pch=19,col="blue")
  if(length(test) >= i)
    points(test[i], 1-j/20, pch=19, col="red")
  if(length(test) >= i)
    points(test[-i], rep(1-j/20,length(test)-1), pch=19, col="gray")
  else
    points(test, rep(1-j/20,length(test)), pch=19, col="gray")
}
text(28,.95,"시간")

3.3 훈련/시험 (비누적) 교차검증

시간창(time window)를 동일하게 이동해 가면서 내삽오차와 외삽오차를 비교하여 최적 예측모형을 구축하는 것도 가능하다.

par(mar=c(0,0,0,0))
plot(0,0,xlim=c(0,28),ylim=c(0,1),
     xaxt="n",yaxt="n",bty="n",xlab="",ylab="",type="n")
i <- 1
for(j in 1:10)
{
  test <- (16+j):26
  train <- j:(15+j)
  arrows(0,1-j/20,27,1-j/20,0.05)
  points(train,rep(1-j/20,length(train)),pch=19,col="blue")
  if(length(test) >= i)
    points(test[i], 1-j/20, pch=19, col="red")
  if(length(test) >= i)
    points(test[-i], rep(1-j/20,length(test)-1), pch=19, col="gray")
  else
    points(test, rep(1-j/20,length(test)), pch=19, col="gray")
}
text(28,.95,"시간")