Büyük düzenleme: Dave & Nick'e şimdiye kadar verdikleri yanıtlar için çok teşekkür etmek istiyorum. İyi haber şu ki, çalışma döngüsünü aldım (prensip, Prof. Hydnman'ın toplu tahmin üzerine görevinden ödünç alındı). Bekleyen sorguları birleştirmek için:
a) auto.arima için maksimum yineleme sayısını nasıl artırabilirim - çok sayıda eksojen değişkenle auto.arima, son bir modele yaklaşmadan önce maksimum yinelemelere çarpıyor gibi görünüyor. Bunu yanlış anlarsam lütfen beni düzeltin.
b) Nick'in bir cevabı, saatlik aralıklarla ilgili tahminlerimin sadece bu saatlik aralıklardan türetildiğini ve günün erken saatlerindeki olaylardan etkilenmediğini vurgulamaktadır. İçgüdülerim, bu verilerle uğraşmaktan, bunun genellikle önemli bir soruna neden olmaması gerektiğini söylüyor, ancak bununla nasıl başa çıkılacağı konusunda önerilere açıkım.
c) Dave, tahmin değişkenlerimi çevreleyen teslim / gecikme sürelerini tanımlamak için çok daha karmaşık bir yaklaşıma ihtiyacım olduğunu belirtti. R'de buna programlı bir yaklaşımla herhangi bir deneyimi olan var mı? Tabii ki sınırlamalar olmasını bekliyorum ama bu projeyi olabildiğince almak istiyorum ve bunun başkaları için de yararlı olması gerektiğinden şüphe etmiyorum.
d) Yeni sorgu ancak eldeki görevle tamamen ilgili - auto.arima siparişleri seçerken regresörleri dikkate alıyor mu?
Bir mağazaya yapılan ziyaretleri tahmin etmeye çalışıyorum. Hareketli tatilleri, artık yılları ve dağınık olayları (aslında aykırı değerler) hesaba katma yeteneğine ihtiyacım var; Bu temelde, ARIMAX'in yukarıda belirtilen faktörlerin yanı sıra çoklu mevsimselliği ve modellemeyi denemek ve dışsal değişkenler kullanarak en iyi bahse giriyorum.
Veriler saatlik aralıklarla 24 saat kaydedilir. Bu, verilerimdeki sıfır miktarından dolayı, özellikle de günün çok düşük miktarlarda ziyaret gördüğü, bazen mağaza yeni açıldığında hiç olmadığı için sorunlu olduğunu kanıtlıyor. Ayrıca, çalışma saatleri nispeten düzensizdir.
Ayrıca, 3 yıllık + geçmiş verilere sahip bir tam zamanlı seriler olarak tahmin edildiğinde hesaplama süresi çok büyüktür. Günün her saatini ayrı zaman serileri olarak hesaplayarak bunu hızlandıracağını düşündüm ve bunu günün daha yoğun saatlerinde test ederken daha yüksek doğruluk sağlıyor gibi görünüyor, ancak yine de ilk / sonraki saatlerde bir sorun olduğunu kanıtlıyor ' t sürekli ziyaret almak. Sürecin auto.arima kullanmanın fayda sağlayacağına inanıyorum, ancak maksimum yineleme sayısına ulaşmadan önce bir model üzerinde yakınsama mümkün görünmüyor (bu nedenle manuel uyum ve maksimum yan tümce kullanma).
Ne zaman ziyaretler = 0 için bir eksojen değişken oluşturarak 'eksik' veri işlemeye çalıştım Yine, bu sadece ziyaret zaman sadece mağaza gün kapalı olduğu zaman günün daha yoğun zamanlar için harika çalışıyor; bu gibi durumlarda, eksojen değişken, bunu önceden tahmin etmek için başarılı bir şekilde ele alır ve daha önce kapatılmış olan günün etkisini içermez. Ancak, mağazanın açık olduğu, ancak her zaman ziyaret almadığı daha sessiz saatleri tahmin etmek için bu prensibi nasıl kullanacağımdan emin değilim.
Profesör Hyndman'ın R'deki parti tahmini hakkındaki yazısının yardımıyla, 24 serisini tahmin etmek için bir döngü oluşturmaya çalışıyorum, ancak saat 13:00 için tahmin etmek istemiyor gibi görünüyor ve nedenini anlayamıyorum. "Optim (init [mask], armafn, method = optim.method, hessian = TRUE,: sonlu olmayan sonlu fark değeri [1]" hatası alıyorum ama tüm seriler eşit uzunlukta ve aslında kullanıyorum Aynı matris, bunun neden olduğunu anlamıyorum, bu matrisin tam bir sıraya sahip olmadığı anlamına gelir, hayır? Bu yaklaşımda bundan nasıl kaçınabilirim?
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()
Ben bu konuda ve bu senaryo çalışması için herhangi bir yardım hakkında gidiş yapıcı eleştiri tamamen takdir ediyorum. Başka yazılımların da mevcut olduğunun farkındayım ama kesinlikle burada R ve / veya SPSS kullanımı ile sınırlıyım ...
Ayrıca, bu forumlar için çok yeniyim - Mümkün olduğunca eksiksiz bir açıklama yapmaya çalıştım, daha önce yaptığım araştırmayı gösterdim ve tekrarlanabilir bir örnek sağladım; Umarım bu yeterlidir, ancak yazıma göre geliştirmek için sağlayabileceğim başka bir şey varsa lütfen bize bildirin.
EDIT: Nick önce günlük toplamları kullanmamı önerdi. Bunu test ettiğimi ve dışsal değişkenlerin günlük, haftalık ve yıllık mevsimselliği yakalayan tahminler ürettiğini eklemeliyim. Bu, Nick'in de belirttiği gibi, herhangi bir günde saat 16: 00'daki tahminim günün önceki saatlerinden etkilenmeyecek olsa da, her saati ayrı bir dizi olarak tahmin etmeyi düşündüğüm diğer nedenlerden biriydi.
EDIT: 09/08/13, döngü ile ilgili sorun sadece test için kullandığım orijinal siparişleri ile ilgiliydi. Bunu daha erken fark etmeliydim ve auto.arima'yı bu verilerle çalışmak için daha fazla aciliyet göstermeliydim - yukarıdaki a) & d) noktasına bakın.