나는 시계열에서 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)
의견을 보내 주셔서 감사합니다. 나는 그것을 시도했지만 예측을 향상시키지 못했다. 나는 그것을 언급하지 않았지만 mts2DataTs1 <-msts (na.approx (Datats1), seasonal.periods = c (24,7 * 24,365 * 24)), 그래서 그것은 여전히 seasonals.periods를 tbats 부분에 포함시키는 것이 필요하다. 함수의? – user3476463
수업을 계절별로 msts로 지정했다면 훌륭합니다. 시간별 데이터를 처리하는 것 같습니다. 서로 다른 빈도로 데이터를 탐색하고 잠재적으로 다른 빈도로 예측을 조정하는 것을 고려할 수 있습니다 (예 : 도둑 패키지를 살펴보십시오). – Julius