Прогнозный пакет R HoltWinters - избежание перегрузки данных
Я использую прогнозный пакет HoltWinters в R для создания прогнозов на основе данных о месячном объеме вызовов.
Он работает хорошо в большинстве случаев, но имеет тенденцию к перерасходу данных, особенно если существуют особые периоды, например, шаговое изменение спроса на вызовы.
В недавнем примере, в котором изменение шага в середине устанавливает альфа на 0,94, бета на 0 и гамму на 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);
Для сравнения, если я установлю параметры экспоненциального сглаживания на стандартные принятые значения - альфа как 0,2, бета как 0,1 и гамма как 0,1, я получу гораздо более привлекательный прогноз.
Я все еще хотел бы использовать автоматическую подгонку прогноза, но хотел бы установить диапазон вокруг альфа, бета и гамма.
Я пытался установить пределы для автоматической подгонки так, чтобы альфа составляла от 0,1 до 0,5, гамма от 0,1 до 0,3 и гамма от 0,1 до 0,3.
https://stat.ethz.ch/R-manual/R-devel/library/stats/html/HoltWinters.html
Похоже, это должно быть возможно, установив
optim.control = list()
функции, но я не смог найти способ успешно установить ограничения на альфа, бета и гамма, чтобы заставить это работать.
Кто-нибудь знает как это сделать?
1 ответ
Для многопараметрической оптимизации, HoltWinters
использует алгоритм L-BFGS-B. Можно установить lower
а также upper
ограничения для всех параметров путем настройки оригинала HoltWinters
функция.
Редактировать функцию:
fix(HoltWinters)
изменив строку 66 из:
в
Закройте окно и сохраните изменения (это повлияет только на этот сеанс). Запустите код, как вы делали раньше:
myforecast <- HoltWinters (myts, seasonal ="additive",
optim.start = c(alpha = 0.2, beta = 0.1, gamma = 0.1))