2017-01-21 5 views
-1

나는 시계열에서 tbats 모델을 훈련시키는 PositiveTBATS 기능을 가진 코드를 가지고 있습니다. 이 함수는 로그 변환에 대해 -inf 값을 피하기 위해 0을 0.001로 대체 한 후 로그 변환을 시계열에 적용합니다. 로그 변환은 예측이 음수 값을 반환하지 않도록합니다. 그런 다음 함수를 여러 시계열에 적용하는 것과 병렬 처리하는 다른 코드 조각이 있습니다. 내가 겪고있는 문제는 예측의 상한선이 항상 실제 데이터보다 조금 낮게 보인다는 것입니다. 하이 엔드에서 더 높은 예측 값을 얻는 데 도움이 될 수있는 매개 변수가 tbats 모델에서 조정할 수 있는지 궁금합니다. 예측치가 낮 으면 실제 데이터에 거의 가깝습니다.tbats 일관되게 낮은 예측

##Parallelizing TBATS Model Training 

## Making tbats forecast positive 
PositiveTBATS<-function(y){ 
    z<-replace(y,y==0,0.001) 
    x <- log(z) 
    fit <- tbats(x, use.box.cox=FALSE) 
    fit$lambda <- 0 
    fit$control$use.box.cox <- TRUE 
    fc <- forecast(fit,h=20) 
    fc$x <- exp(x) 
    fc 
} 


# Calculate the number of cores 
no_cores <- floor(detectCores()/4) 

# Initiate cluster 
cl <- makeCluster(no_cores) 
clusterEvalQ(cl, library(forecast)) 

tbatsList<-list(mts2DataTs1, mts2DataTs2) 

tbatsModels<-parLapply(cl, tbatsList, 
        PositiveTBATS) 

stopCluster(cl) 


Data: 

dput(mts2DataTs1[1:100]) 
c(50, 48, 47, 41, 33, 24, 23, 24, 25, 31, 36, 48, 56, 68, 79, 
81, 87, 90, 81, 87, 90, 86, 79, 72, 60, 50, 39, 29, 30, 30, 31, 
29, 31, 35, 44, 54, 71, 70, 83, 87, 93, 98, 104, 105, 101, 92, 
94, 83, 76, 66, 64, 55, 48, 42, 38, 33, 34, 36, 47, 51, 58, 65, 
71, 81, 89, 86, 89, 89, 86, 75, 73, 74, 57, 49, 41, 32, 33, 25, 
24, 26, 28, 33, 42, 56, 61, 71, 74, 77, 84, 91, 90, 91, 91, 89, 
93, 90, 79, 66, 66, 48) 


dput(mts2DataTs2[1:100]) 
c(2, 2, 1, 0, 0, 1, 2, 0, 1, 4, 8, 7, 7, 6, 5, 5, 4, 3, 1, 5, 
9, 5, 3, 2, 0, 0, 1, 0, 1, 0, 0, 2, 1, 5, 6, 5, 3, 2, 5, 4, 6, 
5, 3, 4, 2, 5, 2, 1, 0, 4, 1, 2, 2, 2, 1, 1, 2, 1, 2, 7, 7, 3, 
7, 3, 3, 2, 0, 4, 1, 3, 4, 1, 3, 0, 1, 3, 1, 0, 1, 3, 2, 4, 4, 
2, 4, 5, 4, 3, 8, 3, 3, 5, 4, 3, 1, 1, 1, 2, 1, 1) 

답변

0

귀하의 데이터는 계절적이지만 귀하의 TBATS 기능 호출에 계절 기간을 지정하지 않았습니다. PositiveTBATS 함수에서 예측 부분에 대한 역변환도 수행하지 않습니다.

또한 여기에서 제공 한 시리즈 중 하나에 대해서는 로그 변환을 사용하지 않습니다. 두 번째 시리즈에는 교육 데이터에 많은 0이 포함되어 있으며 0은 여기에서 예외가 아닙니다. 마이너스 예측 값을 원하지 않으면 예측을 0으로 자릅니다.

이렇게 수정하면 원하는대로 할 수 있습니다.

PositiveTBATS<-function(y){ 
    fit <- tbats(y, seasonal.periods = 24) 
    fc <- forecast(fit,h=20) 
    mean_fc <- pmax(fc$mean,0) 
    return(mean_fc) 
} 
+0

의견을 보내 주셔서 감사합니다. 나는 그것을 시도했지만 예측을 향상시키지 못했다. 나는 그것을 언급하지 않았지만 mts2DataTs1 <-msts (na.approx (Datats1), seasonal.periods = c (24,7 * 24,365 * 24)), 그래서 그것은 여전히 ​​seasonals.periods를 tbats 부분에 포함시키는 것이 필요하다. 함수의? – user3476463

+0

수업을 계절별로 msts로 지정했다면 훌륭합니다. 시간별 데이터를 처리하는 것 같습니다. 서로 다른 빈도로 데이터를 탐색하고 잠재적으로 다른 빈도로 예측을 조정하는 것을 고려할 수 있습니다 (예 : 도둑 패키지를 살펴보십시오). – Julius