2016-06-16 2 views
1

У меня есть пара прогнозов и пыталась выяснить, как объединить эти два в соответствии с некоторым критерием, который широко используется.Как ансамблевые прогнозы в R с использованием весов

В первой части я разделил данные и сравнил прогнозы с фактическими баллами, используя Forest_comb.

library(forecast) 
library(ForecastCombinations) 
y1 = rnorm(100) 
train = y1[1:90] 
test = y1[91:100] 
fit1 = auto.arima(train) 
fit2 = ets(train) 
forc1 = forecast(fit1, n=10)$mean 
forc2 = forecast(fit2, n=10)$mean 
forc_all = cbind(forc1,forc2) 
forc_all 
?Forecast_comb 
fitted <- Forecast_comb(obs = test ,fhat = as.matrix(forc_all), Averaging_scheme = "best")$fitted 
fitted 

Во второй части я перестроил всю модель по всем данным и прогнозировал десять значений. Как можно объединить два значения вместе в соответствии с некоторым критерием?

fit3 = auto.arima(y1) 
fit4 = ets(y1) 
forc3 = forecast(fit3, n=20)$mean 
forc4 = forecast(fit4, n=20)$mean 
forc_all = cbind(forc3,forc4) 
forc_all 
fitted <- Forecast_comb(obs = y1[91:100] ,fhat = as.matrix(forc_all), Averaging_scheme = "best")$fitted 
fitted 

Спасибо за помощь

Причины, по которой я использую ForecastCombination в том, что она включает в себя процедуру для популярных стратегий комбинации. Я думал, что, возможно, эта функция может быть изменена для выполнения желаемого ансамбля.

ответ

1

Основываясь на большом количестве соревнований Kaggle, где люди делятся/обсуждают свои сценарии, я бы сказал, что наиболее распространенным и наиболее эффективным способом является просто вес вручную и добавление ваших прогнозов.

pacman::p_load(forecast) 
pacman::p_load(ForecastCombinations) 
y1 = rnorm(100) 
train = y1[1:90] 
test = y1[91:100] 
fit1 = auto.arima(train) 
fit2 = ets(train) 
forc1 = forecast(fit1, n=10)$mean 
forc2 = forecast(fit2, n=10)$mean 
forc_all = cbind(forc1,forc2) 
forc_all 
?Forecast_comb 
fitted_1 <- Forecast_comb(obs = test ,fhat = as.matrix(forc_all), Averaging_scheme = "best")$fitted 
fitted_1 

fit3 = auto.arima(y1) 
fit4 = ets(y1) 
forc3 = forecast(fit3, n=20)$mean 
forc4 = forecast(fit4, n=20)$mean 
forc_all = cbind(forc3,forc4) 
forc_all 
fitted_2 <- Forecast_comb(obs = y1[91:100] ,fhat = as.matrix(forc_all), Averaging_scheme = "best")$fitted 
fitted_2 

# By far the most common way to combine/weight is simply: 
fitted <- fitted_2*.5+fitted_1*.5 
fitted 

Можно спросить, должны ли вы использовать равные веса или как знать, что делать весами. Это, как правило, определяется

(а) наивные, равное взвешивание, если это все, что у вас есть время для, и это, кажется, работает нормально

(б) перебор с оттягиванием или перекрестной проверкой образцом (ов), будучи осторожно, чтобы не переоборудовать

Некоторые люди пытаются использовать более причудливые подходы. Это легко испортить, но если вы правильно это сделаете, это может привести к более оптимальному прогнозу.

модель на основе и другие более причудливые подходы такие вещи, как создать еще один этап процесса моделирования, в котором ваши прогнозы на образце затяжка являются матрица X и переменная результат является фактическим у для этого образца.

Кроме того, выезд Erin LeDell's approach в h2oEnsemble.

Смежные вопросы