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


16

Я работаю над алгоритмом в 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и посмотреть, если вы получите те же результаты?
синоптик

Большое спасибо за ваше время и ответ! Я согласен с вами в том, что последний пункт можно рассматривать как «выбросы» (21 против 7, 6 или 5 в предыдущем году). Он может быть обнаружен с помощью доверительного интервала на основе прошлых данных и должен быть чистым перед вычислением статистический прогноз. Но если мы предположим, что это «нормальная» продажа, есть ли способ избежать такого поведения путем ограничения прогноза или, по крайней мере, быть предупрежденным, что прогноз в два раза больше, чем история? Ограничение альфа, бета и гамма не имеет значения в этом случае. Еще раз большое спасибо за вашу помощь в этом вопросе!
MehdiK

Я уже проголосовал за ваш ответ, теперь я предполагаю, что вы можете оставлять комментарии. В будущем, пожалуйста, оставьте комментарий непосредственно под ответом, чтобы ответившие заметили его. Спасибо
синоптик

ETS и все одномерные модели временных рядов предполагают, что прошлое поведение предсказывает будущее поведение. Если есть какие-то аномальные точки данных, вам нужно сообщить модели, что существует аномалия. Модель не будет знать, что значение является нормальным, вам нужно указать в модели значение выброса.
синоптик

Ответы:


10

Как отметил @forecaster, это вызвано выбросами в конце ряда. Вы можете ясно увидеть проблему, если вы нанесете компонент оценки уровня сверху:

plot(forecast(fit2))
lines(fit2$states[,1],col='red')

Обратите внимание на повышение уровня в конце серии.

Один из способов сделать модель более устойчивой к выбросам - это уменьшить пространство параметров, чтобы параметры сглаживания принимали меньшие значения:

fit2 <- ets(train_ts, upper=c(0.3,0.2,0.2,0.98))  
plot(forecast(fit2))

введите описание изображения здесь


каков прогноз: auto.arima эквивалент вашего второго предложения по обработке выбросов?
Brash Equilibrium

1
В моделях ARIMA вы можете обрабатывать выбросы с фиктивными переменными, установленными в 1, в проблемные моменты времени. Просто используйте аргумент xreg в auto.arima или Arima.
Роб Хиндман

6

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

Когда я выполняю повторный анализ с удалением последних двух точек данных, я получаю разумный прогноз. Пожалуйста, смотрите ниже:

values.clean <- 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)## Last two points removed

train_ts.clean<- ts(values.clean, frequency=12)
fit2.clean<-ets(train_ts.clean)  
ets.f.clean <- forecast(fit2.clean,h=24)
plot(ets.f.clean)

введите описание изображения здесь


5

@forecasterВы правы, что последнее значение является выбросом, НО periood 38 (предпоследнее значение) не является выбросом, если принять во внимание тенденции и сезонную активность. Это определяющий / обучающий момент для тестирования / оценки альтернативных надежных подходов. Если вы не выявите и не откорректируете аномалии, тогда разница будет завышена, и другие элементы не будут найдены. Период 32 также является выбросом. Периоды 3,32 и 1 также являются выбросами. Существует статистически значимая тенденция в ряду для первых 17 значений, но затем она уменьшается, начиная с периода 18. Таким образом, в данных действительно есть две тенденции. Урок, который следует усвоить здесь, заключается в том, что простые подходы, которые не предполагают наличия тренда или конкретной формы тренда и / или молчаливо предполагают, что конкретная форма авторегрессивного процесса, должны подвергаться серьезному сомнению. Чтобы продвинуться вперед в хорошем прогнозе, необходимо рассмотреть возможное продолжение исключительной активности, найденной в конечной точке (период 39). Это невозможно извлечь из данных.

Это, возможно, полезная модель:

введите описание изображения здесьИтоговая статистика доступна здесь введите описание изображения здесь. График Actual / Fit и Forecast интересен тем, что подчеркивает исключительную активность.введите описание изображения здесь


+1 ваши ответы всегда познавательны и просвещают. Я понимаю пульс и время, это фиксированные эффекты чисто детерминированной модели?
синоптик

@forecaster Да, фиксированные эффекты / сезонные импульсы являются чисто детерминированными ... так же, как импульсы / сдвиги уровней и тенденции местного времени. Кроме того, август месяц (8) не был значительным и не был в окончательном списке.
IrishStat
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.