R HoltWinters预测包 - 避免过度拟合数据

时间:2017-07-27 10:18:04

标签: r optimization forecasting holtwinters

我正在使用R中的HoltWinters预测包来生成每月呼叫量数据的预测。

它在大多数情况下效果很好,但是有过度拟合数据的倾向,特别是在有特殊时期的情况下,例如呼叫需求的阶跃变化。

在最近的一个例子中,中间设置的阶段变化α为0.94,beta为0,gamma为0,这会产生奇怪的预测。

Month   Data
1   7082
2   6407
3   5479
4   5480
5   5896
6   6038
7   5686
8   6126
9   6280
10  6893
11  6028
12  5496
13  3569
14  3383
15  3718
16  3351
17  3340
18  3559
19  3722
20  3201
21  3494
22  2810
23  2611
24  2471
25  7756
26  6922
27  7593
28  6716
29  7278
30  7071

这是我一直在使用的R脚本

scandata <-read_csv("525-gash.csv");
pages <-scandata[,2];
myts <-ts(pages , start=c(2015, 1), frequency = 12)
myforecast <- HoltWinters (myts, seasonal ="additive", 
          optim.start = c(alpha = 0.2, beta = 0.1, gamma = 0.1));
myholt = predict(myforecast, 12 , prediction.interval = FALSE);
plot(myforecast,myholt);

相比之下,如果我将指数平滑参数设置为标准接受值 - alpha为0.2,beta为0.1,gamma为0.1,我得到了更好的预测。

我仍然希望使用预测的自动拟合部分,但希望在alpha,beta和gamma范围内设置范围。

我一直在尝试设置自动调整的限制,以便alpha必须介于0.1和0.5之间,gamma介于0.1和0.3之间,gamma介于0.1和0.3之间。

https://stat.ethz.ch/R-manual/R-devel/library/stats/html/HoltWinters.html

看起来应该可以通过设置

来实现
optim.control = list() 

功能,但我无法找到成功设置alpha,beta和gamma限制的方法来实现此功能。

有谁知道怎么做?

1 个答案:

答案 0 :(得分:3)

对于多参数优化,HoltWinters使用L-BFGS-B算法。通过调整原始lower函数,可以为所有参数设置upperHoltWinters限制。

编辑功能:

fix(HoltWinters)

改变第66行:

enter image description here

enter image description here

关闭窗口并保存更改(这将仅影响此会话)。像以前一样运行代码:

myforecast <- HoltWinters (myts, seasonal ="additive", 
      optim.start = c(alpha = 0.2, beta = 0.1, gamma = 0.1))