У меня есть иерархические данные. Данные имеют следующие уровни (сверху вниз):
- Производственные мощности
- Промышленность
- Заказчик
- Группа продуктов
- SKU
Я прогнозирую с использованием r
библиотеки hts
. Для повышения точности я хотел бы использовать библиотеку thief
(также функции nnfor::mlp.thief
и nnfor::elm.thief
). Я добавил эти функции в forecast.hts()
следующим образом:
loopfn <- function(x, ...) {
out <- list()
if (is.null(FUN)) {
if (fmethod == "ets") {
models <- forecast::ets(x, lambda = lambda, ...)
out$pfcasts <- forecast::forecast(models, h = h, PI = FALSE)$mean
} else if (fmethod == "arima") {
models <- forecast::auto.arima(x, lambda = lambda, xreg = xreg,
parallel = FALSE, ...)
out$pfcasts <- forecast::forecast(models, h = h, xreg = newxreg)$mean
} else if (fmethod == "rw") {
models <- forecast::rwf(x, h = h, lambda = lambda, ...)
out$pfcasts <- models$mean
} else if (fmethod == "thief"){
models <- thief::thief(x, h = h , usemodel = usemodel, ...)
out$pfcasts <- models$mean
}else if (fmethod == "mlp.thief"){
models <- nnfor::mlp.thief(x, h = h , ...)
out$pfcasts <- models$mean
} else if (fmethod == "elm.thief"){
models <- nnfor::elm.thief(x, h = h , ...)
out$pfcasts <- models$mean
}
} else { # user defined function to produce point forecasts
models <- FUN(x, ...)
if (is.null(newxreg)) {
out$pfcasts <- forecast(models, h = h)$mean
} else {
out$pfcasts <- forecast(models, h = h, xreg = newxreg)$mean
}
}
if (keep.fitted) {
out$fitted <- stats::fitted(models)
}
if (keep.resid) {
out$resid <- stats::residuals(models)
}
return(out)
}
Будет ли какая-либо теоретическая проблема для этого? Фактически, это повышает точность прогноза.
Учитывая следующую литературу, я не вижу никаких проблем, хотя Hyndman et.al. 2017 и Hyndman et.al. 2011