如何使用权重在R中集合预测

时间:2016-06-16 23:06:31

标签: 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 个答案:

答案 0 :(得分: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

有人可能会问你是否应该使用相同的砝码或如何知道如何制作砝码。这通常由

决定

(a)幼稚,平等的权重,如果你有时间,它似乎工作正常

(b)使用保留或交叉验证样本进行迭代,注意不要过度拟合

有些人试图采取更多花哨的方法。这很容易搞砸,但是如果你做得好,那么它可以引导你进行更优化的预测。

基于模型和其他更奇特的方法是创建建模过程的另一个阶段,其中您对保留样本的预测是 X 矩阵,结果变量是实际的 y 该样本。

另外,请查看h2oEnsemble中的Erin LeDell's approach