Я работаю над алгоритмом в R для автоматизации расчета ежемесячного прогноза. Я использую, среди прочего, функцию ets () из пакета прогноза для расчета прогноза. Это работает очень хорошо.
К сожалению, для какого-то определенного временного ряда результат, который я получаю, странный.
Пожалуйста, найдите ниже код, который я использую:
train_ts<- ts(values, frequency=12)
fit2<-ets(train_ts, model="ZZZ", damped=TRUE, alpha=NULL, beta=NULL, gamma=NULL,
phi=NULL, additive.only=FALSE, lambda=TRUE,
lower=c(0.0001,0.0001,0.0001,0.8),upper=c(0.9999,0.9999,0.9999,0.98),
opt.crit=c("lik","amse","mse","sigma","mae"), nmse=3,
bounds=c("both","usual","admissible"), ic=c("aicc","aic","bic"),
restrict=TRUE)
ets <- forecast(fit2,h=forecasthorizon,method ='ets')
Пожалуйста, вы найдете ниже соответствующий набор данных истории:
values <- c(27, 27, 7, 24, 39, 40, 24, 45, 36, 37, 31, 47, 16, 24, 6, 21,
35, 36, 21, 40, 32, 33, 27, 42, 14, 21, 5, 19, 31, 32, 19, 36,
29, 29, 24, 42, 15, 24, 21)
Здесь, на графике, вы увидите исторические данные (черный), подогнанное значение (зеленый) и прогноз (синий). Прогноз определенно не соответствует установленному значению.
Есть ли у вас какие-либо идеи о том, как «связать» прогноз с тем, чтобы «соответствовать» историческим продажам?
ets
. Среднее значение / уровень исторических данных составляет около 20, а среднее значение / уровень прогноза составляет около 50. Не знаете, почему это произойдет? Можете ли вы запустить базовыйets
и посмотреть, если вы получите те же результаты?Ответы:
Как отметил @forecaster, это вызвано выбросами в конце ряда. Вы можете ясно увидеть проблему, если вы нанесете компонент оценки уровня сверху:
Обратите внимание на повышение уровня в конце серии.
Один из способов сделать модель более устойчивой к выбросам - это уменьшить пространство параметров, чтобы параметры сглаживания принимали меньшие значения:
источник
Это учебник в случае выбросов в конце ряда и его непреднамеренными последствиями. Проблема с вашими данными в том, что последние две точки являются выбросами , вы можете определить и обработать выбросы, прежде чем запускать алгоритмы прогнозирования. Позже сегодня я обновлю свой ответ и анализ некоторых стратегий для выявления выбросов. Ниже приведено быстрое обновление.
Когда я выполняю повторный анализ с удалением последних двух точек данных, я получаю разумный прогноз. Пожалуйста, смотрите ниже:
источник
@forecasterВы правы, что последнее значение является выбросом, НО periood 38 (предпоследнее значение) не является выбросом, если принять во внимание тенденции и сезонную активность. Это определяющий / обучающий момент для тестирования / оценки альтернативных надежных подходов. Если вы не выявите и не откорректируете аномалии, тогда разница будет завышена, и другие элементы не будут найдены. Период 32 также является выбросом. Периоды 3,32 и 1 также являются выбросами. Существует статистически значимая тенденция в ряду для первых 17 значений, но затем она уменьшается, начиная с периода 18. Таким образом, в данных действительно есть две тенденции. Урок, который следует усвоить здесь, заключается в том, что простые подходы, которые не предполагают наличия тренда или конкретной формы тренда и / или молчаливо предполагают, что конкретная форма авторегрессивного процесса, должны подвергаться серьезному сомнению. Чтобы продвинуться вперед в хорошем прогнозе, необходимо рассмотреть возможное продолжение исключительной активности, найденной в конечной точке (период 39). Это невозможно извлечь из данных.
Это, возможно, полезная модель:
Итоговая статистика доступна здесь . График Actual / Fit и Forecast интересен тем, что подчеркивает исключительную активность.
источник