Günlük, haftalık ve yıllık periyodiklik ile saatlik zaman serilerini tahmin etme


12

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.


Ayrıca, mevsimsellik ile ilgilenmek için fourier kullanmayı denedim ama aynı hatayı döndürdüm. başka bir dışsal değişken olmadan kendi başına bir matris olarak kullanıldığında bile ... Lütfen birisi neden böyle olacağına dair bir açıklamada bana yardımcı olabilir mi?
krcooke

verileri yeniden yükleyebilir misiniz?
MyHeadHurts

Yanıtlar:


4

Maalesef, R ve SPSS ile sınırlı olduğunuz için göreviniz başarısızlığa mahkum. Oynanabilecek her olay / tatil / eksojen değişken için kurşun ve gecikme ilişkisi yapısını tanımlamanız gerekir. SPSS'nin yapamayacağı olası Zaman Eğilimlerini tespit etmeniz gerekir. Konsolide.reeconciled tahmin sağlamak için Günlük Tahminleri / Tahminleri saatlik tahminlerin her birine dahil etmeniz gerekir. Parametreleri değiştirmek ve varyansı değiştirmekle ilgilenmeniz gerekir. Bu yardımcı olur umarım. Elbette isteğe bağlı kullanıcı tanımlı kontrollere tabi olarak bu tür verileri yıllardır otomatik bir şekilde modelliyoruz.

EDIT: OP istendiği gibi burada tipik bir analiz sunmak. Daha yoğun saatler geçirdiğimde bir tane aldım ve günlük bir model geliştirdim. Tam bir analizde, tahminlerin uzlaştırılması için 24 saatin tamamı ve günlük bir model geliştirilecektir. Aşağıda modelin kısmi bir listesi bulunmaktadır resim açıklamasını buraya girin. Önemli regresörlere ek olarak (gerçek kurşun ve gecikme yapısının atlandığına dikkat edin) mevsimsellik, seviye değişimleri, günlük etkiler, günlük etkilerdeki değişiklikler ve tarihle tutarlı olmayan alışılmadık değerleri yansıtan göstergeler vardı. Model istatistikleri resim açıklamasını buraya girin. Önümüzdeki 360 gün için tahminlerin bir grafiği burada gösterilmektedir resim açıklamasını buraya girin. Fiili / Sığdır / Tahmin grafiği sonuçları düzgün bir şekilde özetlerresim açıklamasını buraya girinMuazzam derecede karmaşık bir sorunla karşı karşıya kaldığında (bunun gibi!) Bir çok cesaret, deneyim ve bilgisayar üretkenliği yardımı ile ortaya çıkması gerekir. Sadece yönetiminize sorunun çözülebilir olduğunu, ancak ilkel araçlar kullanarak gerekli olmadığını söyleyin. Umarım bu, önceki yorumlarınız çok profesyonel olduğu, kişisel zenginleştirme ve öğrenmeye yönelik olduğu için çabalarınıza devam etmenizi teşvik eder. Bu analizin beklenen değerini bilmesi gerektiğini ve ek yazılım düşünürken bunu bir kılavuz olarak kullanması gerektiğini ekliyorum. Belki de "yönetmenlerinizi" bu zorlu göreve uygun bir çözüme yönlendirmek için daha yüksek bir sese ihtiyacınız vardır.

Günlük Toplamları ve 24 Saatlik Modellerin her birini inceledikten sonra, Ziyaret Sayısı'nın ciddi bir dezavantajda olduğunu kesinlikle yansıtacağım! Potansiyel bir alıcı tarafından yapılan bu tür bir analiz, bir satıcının bu çok olumsuz projeksiyona dayanarak işi satma çabalarını iki katına çıkarırken akıllıca bir satın alma yapılmamasını önerecektir.


Merhaba Dave, sorumu okumak ve yanıtlamak için zaman ayırdığınız için çok teşekkürler. Yazılımınızın herhangi bir alternatifin ötesine geçtiğini ancak maalesef şimdilik bir seçenek olmadığını anlıyorum. R'nin yeteneklerini bilmek, zaten yaptığım şeyleri geliştirmem için bana önerebileceğin herhangi bir tavsiye var mı? Saygılarımla,
krcooke

@krcooke Uygun yanıtı belirlemek için ziyaretler ve her bir regresörünüzdeki alternatif olası satışlar / gecikmeler arasındaki çapraz korelasyonu inceleyebilirsiniz. Nick'e bazı regresörlerin bazı saatler için yararlı olabileceğini, ancak bazıları için yararlı olmayabileceğini tamamen kabul ediyorum. Her bir saati ayrı ayrı modelleyebilirsiniz. 4 çeşit aykırı değeri (Darbe, Seviye Kaydırma, Mevsimsel Darbe ve Zaman Eğilimleri) tespit etmek, nedensel olduğunuzda ve muhtemelen SPSS'de kullanılamıyorsa. Verilerinizi indirdim ve AUTOBOX kullanacağım Biz her zaman analistlerimizi sertleştirmek için sizinki gibi "zor veriler" arıyoruz.
IrishStat

Merhaba Dave, regresörlerin analizini çevreleyerek neler yapabileceğimi göreceğim. Kullandığım regresörlerin çok 'standart' olduğunu ve bu tür mağazaların tümünü etkileyebileceğini hissettim. Jubilee banka tatil haftasonunu Nick'in yorumunda örnek olarak kullandım; bu muhtemelen regresörlerin kullanımından fayda sağlayacaktır, ancak şimdilik bunu dahil etmedim. Ve verilerle neler yapabileceğinizi görmekle çok ilgileniyorum! Tekrar teşekkürler.
krcooke

7
" Maalesef, R ve SPSS ile sınırlı olduğunuz için göreviniz başarısızlığa mahkum. " - bu yorum ne yazık ki çok ileri gidiyor; herhangi bir Turing-complete dili, yalnızca anahtarları çevirerek makine kodunda programlanabilir ve tamamen Lego'da uygulanmış olsa bile, başka herhangi bir yazılı bir algoritmayı uygulayabilir. Birinde uygulanamayan ve diğerinde yapılamayan hiçbir hesaplama yoktur. AUTOBOX için büyülü özellikler talep etmedikçe, muhtemelen "vanilya dağıtımında fonksiyon olarak zaten mevcut" gibi bir şey demek istediğini düşünüyorum.
Glen_b-Monica

@Glen_b Söyleyebileceğim, kullandığınız vanilya dağıtımlarındaki ateş gücünün, yeni prosedürler yazmak için ellerinizde çok fazla zamanınız yoksa, eldeki sorunu çözmek için yeterli olmadığıdır.
IrishStat

10

Bu, bir grup yorumdan daha fazlası değildir, ancak bu format için çok uzun olacaktır. Ben amatör bir zaman serisi değil, ama bazı basit önerilerim var.

  1. Burada emir altında olabilirsiniz, ancak bence bu, neyi başarmayı beklediğiniz ve sizin için en önemli olan şey açısından biraz keskinleşmelidir. Ziyaretleri tahmin etmek maalesef bulanık bir hedef. Örneğin, öğleden sonra 16: 00'ı varsayalım ve ziyaretleri bir saat öncesinden tahmin etmek istiyorsunuz. Gerçekten önceki tüm dizinin bir tedavisini içeren bir süper modele mi ihtiyacınız var? Bu, amirleriniz veya bir müşteriniz tarafından öngörülebilen veya araştırmacı olarak sizin olabileceğiniz gerçek pratik ve / veya bilimsel hedeflerin bir kısmından gelmelidir. Farklı amaçlar için farklı modellere ihtiyaç duyulduğundan şüpheleniyorum.

  2. Saatlik serileri ayırmak, ne kadar mantıklı olduğuna çok fazla dikkat etmeden hesaplamayı kesme fikrinden kaynaklanıyor gibi görünüyor. Yani, bugünün erken saatlerinden itibaren, saat 16.00'da olanları tahmin etmek için bilgi kullanmamanız (kullanmayacağınız). Bana öyle geliyor ki çok fazla konuşmaya ihtiyaç var.

  3. Açıkçası zaman serilerinde öğrenen birisiniz (ve kendimi eşit bir noktaya koyuyorum), ancak hiçbir öğrenci bu kadar büyük bir problemle başlamamalıdır. Gerçekten mi! Çok fazla veriniz var, çeşitli ölçeklerde periyodikliğiniz var, çalışma saatleri ve tatillerde düzensizlikler var, dışsal değişkenleriniz var: çok zor bir sorun seçtiniz. (Peki ya trendler? Her şeyi büyük bir karmaşık modele atmak açıkça işe yaramıyor ve radikal olarak daha basit bir şey ya da projenin muhtemelen çok iddialı olduğunun farkına varılıyor.


Merhaba Nick, 1- Gerçekten emir altındayım! Amaç, bir model oluşturmaya çalışmaktır, böylece önemli ölçüde aşırı tahmin (personel israfı ile sonuçlanan) veya eksik tahmin (personelin aşırı yorulmaması). 2- Bunu düşündüm ama bu şekilde ne kazandığımı / kaybettiğimi anlamak için daha derine ineceğim. Bir dizi olarak tahmin etmek, onu koyarken bir 'süper modele' benziyordu. 3- Bunun son derece zor olduğunun ve şu anda kilonun üzerine çıktığımı biliyorum, ama burada da benim için çalışacak daha basit bir çözüme tamamen açığım. Düşünceleriniz için çok teşekkürler, Nick.
krcooke

Daha basit çözümler açısından, üstel yumuşatma tekniklerini, geçen yıl jubilee hafta sonu döneminin bu yıl (aynı dönem) aşırı tahmin yapmasına neden olacak şekilde çalıştıramadım. Bu tür aykırı değerler nedeniyle kesinlikle dışsal değişkenler kullanmak zorunda olduğumu hissettim. Keşfedebileceğim başka fikirlerin var mı?
krcooke

Söyleyebileceğim tek şey, emir altında olsaydım ve tam olarak burada verdiğiniz bilgilere sahip olsaydım ne yapacağımdı. İçgüdüm ilk önce günlük toplamları bir araya getirmek ve bunlarla çalışmak olacaktır. Bu yeterince zor. Burada kritik olmak çok daha kolay ....
Nick Cox

Merhaba Nick, Benim hatam, bunu denediğimi söylemeliydim. Günlük toplamlar ile sonuçlar makul görünüyordu. Anahtar kelime olması mantıklıdır çünkü hem sizin hem de Dave'in belirttiği gibi burada dikkate alınması gereken çok daha fazla şey vardır. İlgileniyorsa, günlük verileri yeniden çalıştırabilir ve haftalık, aylık ve yıllık mevsimselliği yakaladığını gösterebilirim. Bu yüzden her saati günlük bir dizi olarak tahmin etmeyi düşündüm.
krcooke

İlk yazıda belirtildiği gibi yaşadığım sorunlardan biri, auto.arima'nın yakınsamadan önce maksimum iterasyonlara çarpması, bu yüzden Arima () ile oldukça genelleştirilmiş parametreler kullanıyorum. Bunun üstesinden nasıl gelebileceğime dair herhangi bir rehberlik çok takdir edilecektir!
krcooke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.