Прогнозування погодинних часових рядів з денною, тижневою та річною періодичністю


12

Основна редакція: Я хотів би сказати велике спасибі Dave & Nick за їх відгуки. Хороша новина полягає в тому, що я отримав цикл для роботи (принцип, запозичений з посади проф. Гіднмана щодо пакетного прогнозування). Щоб консолідувати невирішені запити:

а) Як я збільшую максимальну кількість ітерацій для auto.arima - схоже, що при великій кількості екзогенних змінних auto.arima вражає максимальні ітерації, перш ніж сходитися на кінцевій моделі. Будь ласка, виправте мене, якщо я цього не розумію.

б) Одна відповідь від Ніка підкреслює, що мої прогнози щодо годинних інтервалів випливають лише з тих погодинних інтервалів і на них не впливають події раніше. Мої інстинкти, маючи справу з цими даними, кажуть мені, що це часто не повинно викликати значної проблеми, але я відкритий для пропозицій, як з цим боротися.

c) Дейв зазначив, що мені потрібен набагато більш досконалий підхід до визначення періоду часу / відставання, що оточує мої змінні прогноза. Хтось має досвід програмного підходу до цього в R? Я, звичайно, очікую, що будуть обмеження, але я хотів би взяти цей проект наскільки це можливо, і я не сумніваюся, що це повинно бути корисним і для інших тут.

г) Новий запит, але повністю пов'язаний із завданням - чи auto.arima враховує регресори під час вибору замовлень?

Я намагаюся прогнозувати відвідування магазину. Мені потрібна можливість врахувати рухомі канікули, високосні роки та спорадичні події (по суті, інші люди); Виходячи з цього, я вважаю, що ARIMAX - це моя найкраща ставка, використовуючи екзогенні змінні, щоб спробувати і моделювати багаторазову сезонність, а також вищезазначені фактори.

Дані фіксуються 24 години з погодинними інтервалами. Це виявляється проблематичним через кількість нулів у моїх даних, особливо періоди дня, в яких спостерігаються дуже малі обсяги відвідувань, іноді взагалі таких немає, коли магазин тільки що відкрився. Також години роботи відносно нестабільні.

Крім того, обчислювальний час величезний при прогнозуванні як одного повного часового ряду з 3 роками + історичних даних. Я вважав, що це зробить це швидше, обчислюючи кожну годину дня як окремий часовий ряд, і при тестуванні цього в більш зайняті години дня, здається, вища точність, але знову виявляється, що це стає проблемою з ранніми / пізнішими годинами, які не роблять ' t послідовно приймати відвідування. Я вважаю, що цей процес отримає користь від використання auto.arima, але, схоже, він не зможе сходитись за моделлю, перш ніж досягти максимальної кількості ітерацій (отже, використовуючи ручну підгонку та максимальний пункт).

Я спробував обробити "відсутні" дані, створивши екзогенну змінну для відвідувань = 0. Знову це чудово підходить для найзайнятішого часу доби, коли єдиний час, коли немає відвідувань, - це коли магазин закритий на день; у цих випадках екзогенна змінна успішно справляється з цим для прогнозування вперед та не враховуючи ефекту дня, який раніше був закритий. Однак я не впевнений, як використовувати цей принцип щодо прогнозування тихіших годин роботи магазину, але він не завжди отримує відвідування.

За допомогою поста професора Хайндмана про пакетне прогнозування в R я намагаюся створити цикл для прогнозування серії 24, але, схоже, не хочеться прогнозувати на 1 годину вечора і не можу зрозуміти, чому. Я отримую "Помилка оптимізації (init [маска], armafn, метод = optim.method, hessian = ІСТИНА,: нескінченне значення кінцевої різниці [1]", але оскільки всі ряди мають однакову довжину, і я по суті використовую ту ж матрицю, я не розумію, чому це відбувається. Це означає, що матриця не є повноцінною, ні? Як я можу уникнути цього при такому підході?

https://www.dropbox.com/s/26ov3xp4ayig4ws/Data.zip

date()

#Read input files
INPUT <- read.csv("Input.csv")
XREGFDATA <- read.csv("xreg.csv")

#Subset time series data from the input file
TS <- ts(INPUT[,2:25], f=7)


fcast <- matrix(0, nrow=nrow(XREGFDATA),ncol=ncol(TS))

#Create matrix of exogenous variables for forecasting.
xregf <- (cbind(Weekday=model.matrix(~as.factor(XREGFDATA$WEEKDAY)),
                    Month=model.matrix(~as.factor(XREGFDATA$MONTH)),
                Week=model.matrix(~as.factor(XREGFDATA$WEEK)),
                    Nodata=XREGFDATA$NoData,
                NewYearsDay=XREGFDATA$NewYearsDay,
                    GoodFriday=XREGFDATA$GoodFriday,
                EasterWeekend=XREGFDATA$EasterWeekend,
                    EasterMonday=XREGFDATA$EasterMonday,
                MayDay=XREGFDATA$MayDay,
                    SpringBH=XREGFDATA$SpringBH,
                SummerBH=XREGFDATA$SummerBH,
                    Christmas=XREGFDATA$Christmas,
                BoxingDay=XREGFDATA$BoxingDay))
#Remove intercepts
xregf <- xregf[,c(-1,-8,-20)]

NoFcast <- 0

for(i in 1:24) {

  if(max(INPUT[,i+1])>0) {

  #The exogenous variables used to fit are the same for all series except for the
  #'Nodata' variable. This is to handle missing data for each series
   xreg <- (cbind(Weekday=model.matrix(~as.factor(INPUT$WEEKDAY)),
                     Month=model.matrix(~as.factor(INPUT$MONTH)),
                 Week=model.matrix(~as.factor(INPUT$WEEK)),
                     Nodata=ifelse(INPUT[,i+1] < 1,1,0),
                     NewYearsDay=INPUT$NewYearsDay,
                 GoodFriday=INPUT$GoodFriday,
                     EasterWeekend=INPUT$EasterWeekend,
                 EasterMonday=INPUT$EasterMonday,
                     MayDay=INPUT$MayDay,
                 SpringBH=INPUT$SpringBH,
                     SummerBH=INPUT$SummerBH,
                 Christmas=INPUT$Christmas,
                     BoxingDay=INPUT$BoxingDay))
  xreg <- xreg[,c(-1,-8,-20)]

  ARIMAXfit <- Arima(TS[,i], 
                     order=c(0,1,8), seasonal=c(0,1,0),
                     include.drift=TRUE,
                     xreg=xreg,
                     lambda=BoxCox.lambda(TS[,i])
                     ,optim.control = list(maxit=1500), method="ML")  


  fcast[,i] <- forecast(ARIMAXfit, xreg=xregf)$mean

 } else{
  NoFcast <- NoFcast +1
 }
}

#Save the forecasts to .csv
write(t(fcast),file="fcasts.csv",sep=",",ncol=ncol(fcast))


date()

Я цілком буду вдячний за конструктивну критику того, як я про це йду, та будь-яку допомогу щодо налагодження роботи цього сценарію. Я знаю, що є інше програмне забезпечення, але я чітко обмежений у використанні R та / або SPSS тут ...

Також я дуже новачок на цих форумах - я намагався дати якомога повніше пояснення, продемонструвати попередні дослідження, які я провів, а також надати відтворюваний приклад; Я сподіваюся, що цього достатньо, але, будь ласка, повідомте мене, чи є ще щось, що я можу надати, щоб покращити свою посаду.

EDIT: Нік запропонував спочатку використати підсумкові суми. Слід додати, що я перевірив це, і екзогенні змінні створюють прогнози, що охоплюють щоденну, тижневу та річну сезонність. Це було однією з інших причин, за якими я думав прогнозувати кожну годину як окрему серію, хоча, як згадував також Нік, на мої прогнози на 16:00 у будь-який день не впливатимуть попередні години дня.

EDIT: 08.09.13, проблема з циклом полягала просто в тому, що було виконано початкові замовлення, які я використовував для тестування. Я мав би помітити це швидше і вказувати більше уваги на спробу auto.arima для роботи з цими даними - див. Пункт а) і г) вище.


Крім того, я спробував за допомогою фур’єра подбати про сезонність, але повернув ту саму помилку "Помилка оптимізму (init [маска], armafn, метод = optim.method, hessian = TRUE,: нескінченне значення кінцевої різниці [1]" навіть коли він використовується як матриця самостійно без інших екзогенних змінних. Будь ласка, хтось може мені допомогти з поясненням, чому це було б так?
krcooke

Ви можете перезавантажити дані?
MyHeadHurts

Відповіді:


4

На жаль, ваша місія приречена на провал, оскільки ви обмежені на R та SPSS. Потрібно визначити структуру взаємозв'язків для кожного з подій / свят / екзогенних змінних, які можуть увійти в гру. Вам потрібно виявити можливі тенденції часу, які SPSS не може зробити. Вам потрібно включити щоденні тенденції / прогнози в кожен з погодинних прогнозів, щоб забезпечити консолідований прогноз. Вам потрібно перейматися зміною параметрів та зміною дисперсії. Сподіваюсь, це допомагає. Ми роками моделювали подібні дані в автоматичному режимі, звичайно, підлягаючи додатковому керуванню, визначеному користувачем.

EDIT: Як вимагає ОП, я представляю тут типовий аналіз. Я взяв один, якщо більш зайняті години та розробив щоденну модель. У повному аналізі було б розроблено всі 24 години, а також щоденну модель для узгодження прогнозів. Далі подано частковий список моделі введіть тут опис зображення. Окрім значущих регресорів (зауважте, фактична структура свинцю та відставання була опущена) були показники, що відображають сезонність, зрушення рівня, щоденні ефекти, зміни щоденних ефектів та незвичні значення, що не відповідають історії. Зразкова статистика є введіть тут опис зображення. Тут представлений сюжет прогнозів на наступні 360 днів введіть тут опис зображення. Графік фактичного / відповідного / прогнозу акуратно підбиває результативведіть тут опис зображенняКоли ми стикаємося з надзвичайно складною проблемою (як ця!), Потрібно проявити багато сміливості, досвіду та засобів комп’ютерної продуктивності. Просто порадьте керівництву, що проблема вирішується, але не обов'язково, використовуючи примітивні інструменти. Я сподіваюся, що це спонукає вас продовжувати свої зусилля, оскільки ваші попередні коментарі були дуже професійними, спрямовані на особисте збагачення та навчання. Я хотів би додати, що потрібно знати очікувану цінність цього аналізу і використовувати це як орієнтир при розгляді додаткового програмного забезпечення. Можливо, вам потрібен голосніший голос, щоб допомогти спрямувати своїх «директорів» на можливе рішення цього складного завдання.

Переглянувши щоденні підсумки та кожну з 24 годинних моделей, я б точно визначив, що кількість відвідувань перебуває в серйозному зниженні! Такий аналіз потенційного покупця передбачає непридбання, тоді як продавець буде розумно подвоїти свої зусилля з продажу бізнесу, грунтуючись на цій дуже негативній прогнозі.


Привіт, Дейв, дуже дякую, що знайшов час, щоб прочитати моє запитання та відповісти. Я розумію, що ваше програмне забезпечення виходить за межі будь-яких альтернатив, але, на жаль, наразі це не варіант для мене. Знаючи можливості R, чи є порада, яку ви можете запропонувати мені покращити те, що я вже зробив? З повагою,
krcooke

@krcooke Ви можете вивчити перехресну кореляцію між відвідуваннями та альтернативними приводами / відставаннями навколо кожного з ваших регресорів, щоб визначити відповідну реакцію. Я повністю погоджуюся з Ніком, що деякі регресори можуть бути корисними протягом деяких годин, а не для інших. Ви можете моделювати кожну годину окремо. Визначення 4-х типів видатків (імпульс, зсув рівня, сезонний імпульс та тенденції часу) недоступний у SAS, коли у вас є причинно-наслідкові випадки, і, ймовірно, недоступний у SPSS. Я завантажив ваші дані та використовуватиму AUTOBOX . Ми завжди шукаємо такі жорсткі дані, як ваша, щоб посилити нашу аналітику.
IrishStat

Привіт, Дейв, я побачу, що я можу зробити, що стосується аналізу регресорів. Я відчував, що регресори, якими я користувався, були дуже «стандартними» і, ймовірно, впливають на всі подібні магазини. Я використала ювілейні святкові вихідні у банку як приклад у коментарі Ніка; це, швидше за все, виграє від використання регресорів, але я поки що це не включав. І мені дуже цікаво подивитися, що ви можете зробити з даними! Знову дякую.
krcooke

7
" На жаль, ваша місія приречена на провал, оскільки ви обмежені на R та SPSS. " - цей коментар, на жаль, надто далеко; будь -яка мова повного Тьюрінга може реалізувати будь-який алгоритм, написаний будь-яким іншим, навіть якщо він програмується лише в машинному коді за допомогою перемикання перемикачів і повністю реалізований у Lego. Немає розрахунку, який можна реалізувати в одному, який не можна зробити в іншому. Якщо ви не претендуєте на магічні властивості для AUTOBOX, я вважаю, що ви, напевно, маєте на увазі сказати щось на зразок "вже доступне як функції в розподілі ванілі" як різницю.
Glen_b -Встановити Моніку

@Glen_b Я можу сказати, що вогнева потужність у ванільних розподілах, яку ви використовуєте, недостатня для вирішення проблеми, якщо у вас немає часу на написання нових процедур.
IrishStat

10

Це не більше групи коментарів, але це буде занадто довго для цього формату. Я не більше, ніж любитель часових серій, але в мене є кілька простих пропозицій.

  1. Можливо, ви тут наказуєтесь, але я думаю, що для цього потрібно дещо посилити з точки зору того, що ви очікуєте досягти і що для вас найважливіше. Прогнозування відвідувань, на жаль, нечітка мета. Наприклад, припустимо, що це 4 вечора, і ви хочете прогнозувати відвідування на одну годину вперед. Вам справді потрібна супермодель, що включає обробку всієї попередньої серії? Це повинно випливати з деякого врахування реальних практичних та / або наукових цілей, які можуть бути визначені вашим начальником чи клієнтом або можуть бути вашими як дослідники. Я підозрюю, що більш імовірно, що різні моделі потрібні для різних цілей.

  2. Виділення щогодинних серій, здається, обумовлене ідеєю скорочення обчислень без особливого врахування того, наскільки це має сенс. Отже, підсумок полягає в тому, що ви не використовуєте (не будете) використовувати інформацію з сьогоднішнього дня для прогнозування того, що відбувається о 16:00, як і всі попередні спостереження на 16:00? Мені здається, що потрібно багато говорити.

  3. Ви, очевидно, учень у часових рядах (і я ставлю себе нарівні), але жоден учень не повинен починати з такої великої проблеми. Дійсно! У вас багато даних, у вас періодичність у кількох масштабах, у вас нерегулярність робочого дня та свят, у вас екзогенні змінні: ви вибрали дуже складну проблему. (Що також щодо тенденцій?) Це легко сказати, але це, очевидно, пройшло вже далеко: вам, можливо, доведеться спочатку попрацювати над дуже спрощеними версіями проблеми та отримати уявлення про те, як підібрати більш прості моделі. Зробити все великою складною моделлю, очевидно, не добре, і, здається, вимагається щось радикально простіше, або усвідомлення того, що проект, можливо, занадто амбітний.


Привіт Ніку, 1- Дійсно, я наказую! Метою є спроба побудувати модель так, щоб вона не мала тенденції до значного завищення (що призводить до втрати відпрацьованих годин) або недостатнього прогнозування (щоб персонал не перекручувався). 2- Я це розглядав, але заглиблююсь глибше, щоб зрозуміти, що я отримую / програю таким чином. Прогнозування, як одна серія, здавалося, схожа на "супермодель", як ви сказали. 3- Я знаю, що це вкрай складно, і що я зараз наношу вагу над своєю вагою, але я цілком відкритий до більш простого рішення, яке також буде працювати для мене тут. Велике спасибі за ваші думки, Нік.
krcooke

Що стосується більш простих рішень, я не міг працювати експоненціальними методами згладжування таким чином, що ювілейний період вихідного року минулого року спричинив переоцінку цього року (того ж періоду). У зв'язку з таким видом людей, які беруть участь, я відчував, що мені абсолютно доводиться використовувати екзогенні змінні. Чи є у вас інші ідеї, які я міг би вивчити?
krcooke

Все, що я можу сказати, - це я зробив би, якби я був за наказом і мав саме ту інформацію, яку ви тут даєте. Мій інстинкт був би першим, щоб зібрати щоденні підсумки і працювати з ними. Це досить важко. Тут набагато простіше бути критичним ....
Нік Кокс

Привіт Нік, моя провина, я мав би вже заявити, що я спробував це. При щоденній підсумці результати видаються розумними. Розумно бути ключовим словом, тому що, як ви й Дейв заявили, тут можна розглянути набагато більше. Якщо це представляє інтерес, я можу повторно запустити щоденні дані та продемонструвати, що він фіксує щотижневу, щомісячну та річну сезонність. Тому я думав прогнозувати кожну годину як щоденну серію.
krcooke

Однією з проблем, які у мене були, як згадувалося в першому дописі, є те, що auto.arima вражає максимальні ітерації перед конвергенцією, тому я використовую досить узагальнені параметри з Arima (). Будемо дуже вдячні за будь-які вказівки щодо того, як я можу це подолати!
krcooke
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.