교차 검증 시계열 분석


37

R 의 캐럿 패키지 를 사용하여 분류 및 회귀에 대한 예측 모델을 작성했습니다. Caret는 교차 검증 또는 부트 스트래핑을 통해 모델 하이퍼 파라미터를 조정할 수있는 통합 인터페이스를 제공합니다. 예를 들어 분류를 위해 간단한 '가장 가까운 이웃'모델을 구축하는 경우 몇 개의 이웃을 사용해야합니까? 2? 10? 100? Caret은 데이터를 다시 샘플링하고 다른 매개 변수를 시도한 다음 결과를 집계하여 최상의 예측 정확도를 산출하여이 질문에 대답 할 수 있도록 도와줍니다.

이 방법은 모델 하이퍼 파라미터를 선택하기위한 강력한 방법론을 제공하고 최종 하이퍼 파라미터를 선택한 후에는 분류 모델의 정확도를 사용하여 모델이 얼마나 '좋은'지에 대한 교차 검증 된 추정치를 제공하기 때문에이 방법이 마음에 듭니다 회귀 모형의 경우 RMSE.

이제 임의 포리스트를 사용하여 회귀 모델을 작성하려는 시계열 데이터가 있습니다. 데이터의 특성상 내 모델의 예측 정확도를 평가하는 좋은 기술은 무엇입니까? 임의 포리스트가 시계열 데이터에 실제로 적용되지 않는 경우 시계열 분석을위한 정확한 앙상블 모델을 구축하는 가장 좋은 방법은 무엇입니까?


나는 정말로 흥미로운 질문을 발견했다. 질문에 답하기 위해 표시 할 수있는 방법이 있습니까?
mariana soffer

1
@mariana soffer 위 / 아래 화살표 아래에서 'Star'아이콘을 클릭하십시오.
Zach

4
Caret는 이제 시계열 교차 유효성 검사를 지원합니다. r-bloggers.com/time-series-cross-validation-5
captain_ahab

1
@ Zach 이것은 오래된 게시물이지만 새로운 생각이 있는지 궁금합니다. 순차적 모델 유효성 검증에 대한 최근 작업을 알고 있습니까?
horaceT

답변:


10

"고전적인"k- 시간 교차 검증 기술은 사용 가능한 데이터 세트의 각 샘플이 (k-1)-시간 동안 모델을 훈련시키고 1 회 시험하기 위해 사용된다는 사실에 근거합니다. "미래"데이터에 대한 시계열 모델의 유효성을 검사하는 것이 매우 중요하므로이 방법은 모델의 안정성에 영향을 미치지 않습니다.

많은 (대부분의) 시계열의 중요한 속성 중 하나는 인접 값 간의 상관 관계입니다. IrishStat에서 지적한 것처럼 이전 판독 값을 모델 후보의 독립 변수로 사용하는 경우이 상관 관계 (또는 독립성 부족)가 중요한 역할을하며 k- 시간 교차 검증이 좋지 않은 또 다른 이유입니다.

이 문제를 극복하는 한 가지 방법은 데이터를 "오버 샘플링 (oversample)"하고이를 관련시키는 것입니다. 역 상관 프로세스가 성공적이라면, 시계열에서 교차 검증을 사용하는 것이 덜 문제가됩니다. 그러나 향후 데이터를 사용하여 모델을 확인하는 문제는 해결되지 않습니다.

설명

미래의 데이터에 대한 모델의 유효성을 검사하여 I 모델 구축, 테스트, 미세 조정 등시 사용할 수없는 새로운 데이터를 기다리고 그리고 그것을 검증하는 모델을 구축하는 의미 새로운 데이터입니다.

데이터를 오버 샘플링함으로써 실제로 필요한 것보다 훨씬 높은 주파수에서 시계열 데이터를 수집하는 것을 의미합니다. 예를 들어 시간별 변경에 실제로 관심이있는 경우 5 초마다 주가를 샘플링합니다. 여기서 "샘플링"이라고 말하면 "보간", ​​"추정"등을 의미하지 않습니다. 높은 주파수에서 데이터를 측정 할 수없는 경우이 기술은 의미가 없습니다.


미래 데이터에서 모델의 유효성을 검사하는 '클래식'방법은 무엇입니까? '오버 샘플링'이란 무엇입니까? 감사합니다!
Zach

TppT

@bgbg 나는 비슷한 문제에 직면하고 있으며 게시물을 찾았습니다. 오버 샘플링 및 데코 레이팅 된 시계열 데이터에 대한 참고 자료를 인용 할 수 있습니까? 시계열의 메모리가 충분히 짧으면 (애리 마에 적합 함을 보여줄 수 있음) "겹치지 않는"샘플을 가져 와서 일반적인 교차 검증을 수행 할 수 있습니다. 모든 생각에 감사드립니다.
horaceT

9

http://robjhyndman.com/researchtips/crossvalidation/ 에는 시계열의 교차 검증을위한 빠른 팁이 포함되어 있습니다 . 시계열 데이터에 임의 포리스트를 사용하는 것과 관련하여 ... 부스트 스트랩 샘플을 사용하여 모델이 적합하다는 점을 감안할 때 이상한 선택 인 것 같습니다. Neural Nets와 같은 ML 기술 (예 : pdf ) 과 같이 사용할 수있는 고전적인 시계열 방법 (예 : ARIMA)이 있습니다 . 시계열 전문가 중 일부는 시계열 특정 알고리즘과 비교하여 ML 기술이 얼마나 잘 작동하는지에 대해 언급 할 수 있습니다.


2
이것은 머리에 못을 박았습니다. 기계 학습 기술을 시계열 분석에 적용하려고합니다.
Zach

나는 전에 예측을 위해 임의의 숲을 사용하여 성공했습니다. 체크 아웃 : biomedcentral.com/1471-2105/15/276
captain_ahab

6

다음은 교차 검증 시계열 모델에 대한 예제 코드 입니다. 나는 블로그 에서이 코드를 확장 하여 foreach 패키지 를 통합하여 작업 속도를 높이고 교차 유효성 검사에서 가능한 xreg 용어를 허용했습니다.

Rob Hyndman의 블로그 코드는 다음과 같습니다.

library(fpp) # To load the data set a10
plot(a10, ylab="$ million", xlab="Year", main="Antidiabetic drug sales")
plot(log(a10), ylab="", xlab="Year", main="Log Antidiabetic drug sales")

k <- 60 # minimum data length for fitting a model
n <- length(a10)
mae1 <- mae2 <- mae3 <- matrix(NA,n-k,12)
st <- tsp(a10)[1]+(k-2)/12

for(i in 1:(n-k))
{
  xshort <- window(a10, end=st + i/12)
  xnext <- window(a10, start=st + (i+1)/12, end=st + (i+12)/12)
  fit1 <- tslm(xshort ~ trend + season, lambda=0)
  fcast1 <- forecast(fit1, h=12)
  fit2 <- Arima(xshort, order=c(3,0,1), seasonal=list(order=c(0,1,1), period=12), 
      include.drift=TRUE, lambda=0, method="ML")
  fcast2 <- forecast(fit2, h=12)
  fit3 <- ets(xshort,model="MMM",damped=TRUE)
  fcast3 <- forecast(fit3, h=12)
  mae1[i,1:length(xnext)] <- abs(fcast1[['mean']]-xnext)
  mae2[i,1:length(xnext)] <- abs(fcast2[['mean']]-xnext)
  mae3[i,1:length(xnext)] <- abs(fcast3[['mean']]-xnext)
}

plot(1:12, colMeans(mae1,na.rm=TRUE), type="l", col=2, xlab="horizon", ylab="MAE",
     ylim=c(0.65,1.05))
lines(1:12, colMeans(mae2,na.rm=TRUE), type="l",col=3)
lines(1:12, colMeans(mae3,na.rm=TRUE), type="l",col=4)
legend("topleft",legend=c("LM","ARIMA","ETS"),col=2:4,lty=1)

결과


Zach 안녕. 시계열이있는 회귀 모형에 적절한 수의 항을 탐지하기 위해 약간 다른 버전의 Hyndman 코드를 구현했습니다. 불행히도 CV 오류 그림에는 몇 개의 지역 최소값이 표시되어 항의 수를 올바르게 선택하는 방법에 대해 의문을 제기했습니다. 전체 문제는 여기 에 설명되어 있습니다 . 전에 비슷한 일을 겪었습니까?
jroberayalas

5

시계열 데이터가있는 경우 "자유도 문제"가있을 수 있습니다. 예를 들어, 시간 간격으로 4 개의 관측치가 있고 1 분 간격으로 241 개의 관측치를 사용하기로 결정한 경우에는 241 개의 관측치가 있지만 반드시 독립적 일 필요는 없습니다. 이 241 개의 값 / 측정 값을 분석 패키지에 제출하면 패키지는 특정 마술을 수행 할 때 241 개의 독립적 인 값일 것으로 예상 할 수 있습니다. 시계열 데이터가있는 경우 분석을 업그레이드해야 할 수도 있습니다. 나는 당신이 참조하는 프로그램을 모른다.하지만 그것은 테스트 (F 테스트 / T 테스트 ... 등)가 아마도 당신의 문제 세트에 적용되지 않는다는 내 추측 (잘못 될 수있다!)에 대한 합리적인 추측이다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.