Функція 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

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

СТВ та всі одноманітні моделі часових рядів припускають, що минула поведінка передбачає поведінку в майбутньому. Якщо є якісь аномальні точки даних, то потрібно повідомити моделі про те, що існує аномалія. Модель не буде знати значення нормальним, потрібно вказати в моделі, що значення більше.
синоптик

Відповіді:


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ви правильні, що останнє значення - це позарядний АЛЕ періоді 38 (передостаннє значення) - це не більше, якщо враховувати тенденції та сезонну активність. Це визначальний / навчальний момент для тестування / оцінки альтернативних надійних підходів. Якщо ви не визначите та не підкоригуєте аномалії, то дисперсія буде завищена, через що інші елементи не будуть знайдені. Період 32 також є чужим. Періоди 3,32 та 1 також є атрибутами. Існує статистично значуща тенденція в серії для перших 17 значень, але вона знижується після цього, починаючи з періоду 18. Отже, в даних дійсно є дві тенденції. Урок, який слід засвоїти, полягає в тому, що прості підходи, які не передбачають жодної тенденції чи певної форми тренду та / або мовчазно передбачають певну форму авторегресивного процесу, потребують серйозного сумніву. Для досягнення гарного прогнозу слід врахувати можливе продовження виняткової діяльності, що виявляється в кінцевій точці (період 39). Витягнути це з даних неможливо.

Це, можливо, корисна модель:

введіть тут опис зображенняКінцева статистика моделі наведена тут. введіть тут опис зображенняГрафік фактичного / відповідного та прогнозування цікавий тим, що підкреслює виняткову активність.введіть тут опис зображення


+1 ваші відповіді завжди навчальні та освічуючі. Я розумію пульс і час, чи є фіксовані ефекти суто детермінованою моделлю?
синоптик

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