Основная редакция: Я хотел бы сказать большое спасибо Дэйву и Нику за их ответы. Хорошая новость заключается в том, что у меня получился цикл (принцип заимствован из поста профессора Гиднмана о пакетном прогнозировании). Чтобы объединить невыполненные запросы:
а) Как мне увеличить максимальное число итераций для auto.arima - кажется, что при большом количестве экзогенных переменных auto.arima достигает максимальных итераций перед тем, как сойтись в конечной модели. Пожалуйста, поправьте меня, если я неправильно понимаю это.
б) В одном ответе Ника подчеркивается, что мои прогнозы для часовых интервалов основаны только на этих часовых интервалах и не зависят от событий, произошедших ранее в течение дня. Мои инстинкты, связанные с этими данными, говорят мне, что это не должно часто вызывать серьезную проблему, но я открыт для предложений относительно того, как справиться с этим.
в) Дейв указал, что мне требуется гораздо более сложный подход к определению времени опережения / отставания, связанного с моими переменными предиктора У кого-нибудь есть опыт с программным подходом к этому в R? Я, конечно, ожидаю, что будут ограничения, но я хотел бы продвинуть этот проект настолько далеко, насколько смогу, и я не сомневаюсь, что он должен быть полезен и для других здесь.
d) Новый запрос, но полностью связанный с поставленной задачей - учитывает ли auto.arima регрессоры при выборе заказов?
Я пытаюсь прогнозировать посещения магазина. Мне нужна способность учитывать движущиеся праздники, високосные годы и спорадические события (по сути, выбросы); Исходя из этого, я понимаю, что ARIMAX - моя лучшая ставка, использующая экзогенные переменные, чтобы попытаться смоделировать множественную сезонность, а также вышеупомянутые факторы.
Данные записываются 24 часа с почасовыми интервалами. Это оказывается проблематичным из-за количества нулей в моих данных, особенно во времена дня, когда количество посещений очень низкое, а иногда и вовсе отсутствует, когда магазин только что открылся. Кроме того, часы работы являются относительно неустойчивыми.
Кроме того, вычислительное время огромно при прогнозировании как один полный временной ряд с 3 годами + исторических данных. Я полагал, что это ускорило бы вычисление каждого часа дня в виде отдельных временных рядов, и при тестировании этого в более загруженные часы дня, как представляется, дает более высокую точность, но опять-таки оказывается проблема с ранними / поздними часами, которые не т постоянно получать посещения. Я полагаю, что этот процесс выиграл бы от использования auto.arima, но он не может сойтись в модели до достижения максимального числа итераций (следовательно, с использованием подбора вручную и предложения maxit).
Я попытался обработать «пропущенные» данные, создав экзогенную переменную для посещений = 0. Опять же, это прекрасно работает для более загруженного времени суток, когда нет единственных посещений, когда магазин закрыт в течение дня; в этих случаях экзогенная переменная успешно, кажется, справляется с этим для прогнозирования вперед и не включает в себя влияние дня, который был ранее закрыт. Однако я не уверен, как использовать этот принцип в отношении прогнозирования более тихих часов, когда магазин открыт, но не всегда получает посещения.
С помощью сообщения профессора Хиндмана о пакетном прогнозировании в R я пытаюсь создать цикл для прогнозирования 24-й серии, но, похоже, он не хочет прогнозировать на 13:00 и не может понять, почему. Я получаю «Ошибка в optim (init [mask], armafn, method = optim.method, hessian = TRUE,: конечное разностное значение без конечных значений [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 здесь ...
Кроме того, я очень новичок в этих форумах - я постарался дать как можно более полное объяснение, продемонстрировать предыдущие исследования, которые я провел, а также привести воспроизводимый пример; Я надеюсь, что этого достаточно, но, пожалуйста, дайте мне знать, если есть что-то еще, что я могу предоставить, чтобы улучшить свой пост.
РЕДАКТИРОВАТЬ: Ник предложил мне использовать дневные итоги в первую очередь. Я должен добавить, что я проверил это, и экзогенные переменные действительно дают прогнозы, которые отражают ежедневную, еженедельную и годовую сезонность. Это было одной из других причин, по которым я думал прогнозировать каждый час как отдельную серию, хотя, как упоминал Ник, мой прогноз на 4 часа дня в тот или иной день не будет зависеть от предыдущих часов дня.
РЕДАКТИРОВАТЬ: 09/08/13, проблема с циклом была просто связана с первоначальными заказами, которые я использовал для тестирования. Я должен был заметить это раньше и уделить больше внимания попытке auto.arima работать с этими данными - см. Пункты а) и d) выше.
Ответы:
К сожалению, ваша миссия обречена на провал, поскольку вы ограничены R и SPSS. Вам необходимо определить структуру отношений между лидерами и лагами для каждого из событий / праздников / внешних переменных, которые могут вступить в игру. Вам необходимо определить возможные тренды времени, которые SPSS не может сделать. Вам необходимо включать ежедневные тренды / прогнозы в каждый из почасовых прогнозов, чтобы обеспечить сводный, согласованный прогноз. Вы должны быть обеспокоены изменением параметров и изменением дисперсии. Надеюсь это поможет. В течение многих лет мы моделировали данные такого рода в автоматическом режиме, при условии, конечно, необязательных пользовательских элементов управления.
РЕДАКТИРОВАТЬ: По просьбе OP я представлю здесь типичный анализ. Я взял один, если часы заняты, и разработал ежедневную модель. В полном анализе будут разработаны все 24 часа, а также ежедневная модель для согласования прогнозов. Ниже приведен частичный список модели . В дополнение к значительным регрессорам (обратите внимание, что фактические опережающие и запаздывающие структуры были опущены) были показатели, отражающие сезонность, сдвиги уровней, ежедневные эффекты, изменения ежедневных эффектов и необычные значения, не соответствующие истории. Модель статистики есть . График прогнозов на ближайшие 360 дней приведен здесь . График Actual / Fit / Forecast аккуратно суммирует результаты. Когда сталкиваешься с чрезвычайно сложной проблемой (такой, как эта!), Нужно проявить много смелости, опыта и компьютерной производительности. Просто сообщите своему руководству, что проблема решаема, но не обязательно с использованием примитивных инструментов. Я надеюсь, что это вдохновит вас на продолжение ваших усилий, так как ваши предыдущие комментарии были очень профессиональны, направлены на личное обогащение и обучение. Я хотел бы добавить, что нужно знать ожидаемую ценность этого анализа и использовать его в качестве ориентира при рассмотрении дополнительного программного обеспечения. Возможно, вам нужен более громкий голос, чтобы помочь вашим «директорам» найти реальное решение этой сложной задачи.
Изучив ежедневные итоги и каждую из 24-часовых моделей, я определенно пойму, что количество посещений серьезно снизилось! Этот вид анализа потенциальным покупателем предполагает отсутствие покупки, в то время как продавцу будет целесообразно удвоить свои усилия по продаже бизнеса на основе этого весьма негативного прогноза.
источник
Это не более, чем набор комментариев, но это будет слишком долго для этого формата. Я не более чем любитель временного ряда, но у меня есть несколько простых предложений.
Вы можете быть здесь по приказу, но я думаю, что это нуждается в некотором уточнении с точки зрения того, что вы ожидаете достичь и что является наиболее важным для вас. Прогнозирование посещений, к сожалению, нечеткая цель. Например, предположим, что сейчас 4 часа дня, а вы хотите прогнозировать посещения на час вперед. Вам действительно нужна супер-модель, включающая в себя обработку всей предыдущей серии? Это должно исходить из некоторого рассмотрения реальных практических и / или научных целей, которые могут быть установлены вашим начальством или клиентом или могут быть вашими собственными научными исследованиями. Я подозреваю, что более вероятно, что разные модели нужны для разных целей.
Выделение почасовых рядов, по-видимому, обусловлено идеей сокращения вычислений без особого рассмотрения того, насколько это имеет смысл. Итак, вы подразумеваете, что вы не будете (не будете) использовать информацию, полученную ранее сегодня, для прогнозирования того, что происходит в 16:00, только все предыдущие наблюдения в 16:00? Мне кажется, что нужно много говорить через.
Вы, очевидно, учитесь во временных рядах (и я ставлю себя вровень), но ни один ученик не должен начинать с такой большой проблемы. В самом деле! У вас много данных, у вас есть периодичность в нескольких масштабах, у вас есть неравномерность времени работы и праздников, у вас есть экзогенные переменные: вы выбрали очень сложную проблему. (А как насчет трендов?) Легко сказать, но до сих пор вас это явно обошло: вам, возможно, придется сначала поработать над очень упрощенными версиями задачи и понять, как подойти к более простым моделям. Бросить все в большую сложную модель, очевидно, не очень хорошо, и кажется, что требуется нечто радикально более простое, или осознание того, что проект, возможно, слишком амбициозен.
источник