Ważna edycja: Chciałbym jak dotąd podziękować Dave'owi i Nickowi za ich odpowiedzi. Dobrą wiadomością jest to, że dostałem pętlę do pracy (zasada zapożyczona z postu prof. Hydnmana na temat prognozowania partii). Aby skonsolidować zaległe zapytania:
a) Jak zwiększyć maksymalną liczbę iteracji dla auto.arima - wydaje się, że przy dużej liczbie zmiennych egzogenicznych auto.arima osiąga maksymalne iteracje przed zbiegnięciem się na ostateczny model. Proszę mnie poprawić, jeśli nie rozumiem tego.
b) Jedna odpowiedź od Nicka podkreśla, że moje prognozy dla przedziałów godzinowych pochodzą wyłącznie z tych przedziałów godzinowych i nie mają na nie wpływu wcześniejsze zdarzenia w ciągu dnia. Mój instynkt, od czynienia z tymi danymi, mówi mi, że nie powinno to często powodować znaczącego problemu, ale jestem otwarty na sugestie, jak sobie z tym poradzić.
c) Dave zauważył, że potrzebuję znacznie bardziej wyrafinowanego podejścia do identyfikowania czasów wyprzedzenia / opóźnienia otaczających moje zmienne predykcyjne. Czy ktoś ma jakieś doświadczenie z programowym podejściem do tego w języku R? Oczywiście spodziewam się, że będą pewne ograniczenia, ale chciałbym posunąć ten projekt tak daleko, jak to tylko możliwe i nie mam wątpliwości, że musi on być przydatny także dla innych tutaj.
d) Nowe zapytanie, ale w pełni związane z danym zadaniem - czy auto.arima bierze pod uwagę regresory przy wyborze zamówień?
Staram się prognozować wizyty w sklepie. Potrzebuję umiejętności rozliczania się z przeprowadzkami, latami przestępczymi i sporadycznymi zdarzeniami (zasadniczo wartościami odstającymi); na tej podstawie uznaję, że ARIMAX jest moim najlepszym wyborem, wykorzystując zmienne egzogeniczne do próby modelowania wielokrotności sezonowości, a także wyżej wymienionych czynników.
Dane są rejestrowane 24 godziny w odstępach godzinnych. Jest to problematyczne ze względu na liczbę zer w moich danych, szczególnie w porach dnia, w których liczba odwiedzin jest bardzo mała, czasem żadna wcale po otwarciu sklepu. Ponadto godziny otwarcia są względnie zmienne.
Ponadto czas obliczeniowy jest ogromny w przypadku prognozowania jako jednego pełnego szeregu czasowego zawierającego ponad 3 lata danych historycznych. Doszedłem do wniosku, że przyspieszy to obliczanie każdej godziny dnia jako osobnych szeregów czasowych, a podczas testowania tego w bardziej obciążonych godzinach dnia wydaje się uzyskiwać większą dokładność, ale znów okazuje się, że staje się problemem z wczesnymi / późniejszymi godzinami, które nie powodują konsekwentnie otrzymuj wizyty. Sądzę, że proces skorzystałby z użycia auto.arima, ale wydaje się, że nie jest w stanie zsynchronizować się z modelem przed osiągnięciem maksymalnej liczby iteracji (stąd użycie ręcznego dopasowania i klauzuli maxit).
Próbowałem poradzić sobie z „brakującymi” danymi, tworząc zmienną egzogeniczną, gdy odwiedziny = 0. Ponownie, działa to świetnie w przypadku bardziej obciążonych porach dnia, gdy jedynym czasem braku odwiedzin jest zamknięcie sklepu na dany dzień; w tych przypadkach zmienna egzogeniczna wydaje się z powodzeniem radzić sobie z prognozowaniem naprzód, nie uwzględniając wpływu dnia, który był wcześniej zamknięty. Nie jestem jednak pewien, jak zastosować tę zasadę w odniesieniu do przewidywania spokojniejszych godzin, w których sklep jest otwarty, ale nie zawsze są odwiedzane.
Przy pomocy postu profesora Hyndmana o prognozowaniu wsadowym w R próbuję stworzyć pętlę do prognozowania serii 24, ale wydaje się, że nie chcę przewidywać od 13:00 i nie mogę zrozumieć, dlaczego. Otrzymuję komunikat „Błąd w optimum (init [maska], armafn, method = optim.method, hessian = TRUE,: nieskończona wartość różnicy skończonej [1]”), ale ponieważ wszystkie serie mają równą długość i zasadniczo używam ta sama matryca, nie rozumiem, dlaczego tak się dzieje. Oznacza to, że matryca nie ma pełnej rangi, nie? Jak mogę tego uniknąć w tym podejściu?
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()
Byłbym w pełni wdzięczny za konstruktywną krytykę sposobu, w jaki to robię i wszelką pomoc w uruchomieniu tego skryptu. Wiem, że jest dostępne inne oprogramowanie, ale jestem ściśle ograniczony do używania R i / lub SPSS tutaj ...
Ponadto jestem bardzo nowy na tych forach - starałem się przedstawić możliwie pełne wyjaśnienie, zademonstrować wcześniejsze badania, które przeprowadziłem, a także dać powtarzalny przykład; Mam nadzieję, że to wystarczy, ale daj mi znać, jeśli mogę jeszcze coś ulepszyć w swoim poście.
EDYCJA: Nick zasugerował, że najpierw używam sum dziennych. Powinienem dodać, że to przetestowałem, a zmienne egzogeniczne generują prognozy, które uwzględniają dzienną, tygodniową i roczną sezonowość. Był to jeden z innych powodów, dla których myślałem o przewidywaniu każdej godziny jako osobnej serii, jednak, jak wspomniał Nick, na moją prognozę na godzinę 16:00 w danym dniu nie będą miały wpływu wcześniejsze godziny w ciągu dnia.
EDYCJA: 09/08/13, problem z pętlą dotyczył po prostu oryginalnych zamówień, których użyłem do testowania. Powinienem był to zauważyć wcześniej i pilniej próbuję użyć auto.arima do pracy z tymi danymi - patrz punkt a) id) powyżej.
Odpowiedzi:
Niestety twoja misja jest skazana na porażkę, ponieważ jesteś ograniczony do R i SPSS. Musisz zidentyfikować strukturę relacji wyprzedzenia i opóźnienia dla każdego ze zdarzeń / wakacji / zmiennych egzogenicznych, które mogą się pojawić. Musisz wykryć możliwe trendy czasowe, których SPSS nie może wykonać. Musisz włączyć codzienne trendy / prognozy do każdej prognozy godzinowej, aby uzyskać skonsolidowaną. Uzgodnioną prognozę. Musisz się martwić o zmianę parametrów i zmianę wariancji. Mam nadzieję że to pomoże. Modelujemy tego rodzaju dane od lat w sposób automatyczny, oczywiście podlegając opcjonalnym kontrolom określonym przez użytkownika.
EDYCJA: Na prośbę OP przedstawiam tutaj typową analizę. Wziąłem jeden, jeśli zajęte godziny i opracowałem model dzienny. W pełnej analizie opracowane zostaną wszystkie 24 godziny, a także model dzienny w celu uzgodnienia prognoz. Poniżej znajduje się częściowa lista modelu . Oprócz znaczących regresorów (należy zauważyć, że rzeczywista struktura odprowadzeń i opóźnień została pominięta) istniały wskaźniki odzwierciedlające sezonowość, zmiany poziomów, efekty dzienne, zmiany efektów dziennych oraz niezwykłe wartości niezgodne z historią. Statystyki modelu są . Tutaj pokazany jest wykres prognoz na następne 360 dni . Wykres Rzeczywisty / Dopasowanie / Prognoza starannie podsumowuje wynikiW obliczu niezwykle złożonego problemu (takiego jak ten!) Trzeba wykazać się dużą odwagą, doświadczeniem i pomocą komputerową. Po prostu poinformuj swoje kierownictwo, że problem można rozwiązać, ale niekoniecznie za pomocą prymitywnych narzędzi. Mam nadzieję, że zachęca to do kontynuowania wysiłków, ponieważ poprzednie komentarze były bardzo profesjonalne i nastawione na osobiste wzbogacenie i naukę. Dodam, że trzeba znać oczekiwaną wartość tej analizy i wykorzystać ją jako wskazówkę przy rozważaniu dodatkowego oprogramowania. Być może potrzebujesz głośniejszego głosu, aby pomóc swoim „reżyserom” znaleźć realne rozwiązanie tego trudnego zadania.
Po zapoznaniu się z Daily Totals i każdym z 24-godzinnych modeli zdecydowanie zastanowiłbym się, czy liczba odwiedzin jest poważnie obniżona! Tego rodzaju analiza przeprowadzona przez potencjalnego nabywcę sugerowałaby brak zakupu, podczas gdy sprzedawca rozsądnie podwoiłby wysiłki na rzecz sprzedaży firmy w oparciu o tę bardzo negatywną prognozę.
źródło
To tylko zestaw komentarzy, ale dla tego formatu będzie za długo. Jestem tylko amatorem serialu czasowego, ale mam kilka prostych sugestii.
Możesz mieć tutaj zamówienia, ale myślę, że wymaga to zaostrzenia w zakresie tego, czego oczekujesz i co jest dla Ciebie najważniejsze. Prognozy odwiedzin są niestety niewyraźnym celem. Załóżmy na przykład, że jest godzina szesnasta i chcesz prognozować wizyty na godzinę do przodu. Czy naprawdę potrzebujesz super-modelu obejmującego całą poprzednią serię? Musi to wynikać z niektórych rozważań na temat rzeczywistych celów praktycznych i / lub naukowych, które mogą być określone przez przełożonych lub klienta lub mogą być własne jako badacza. Podejrzewam, że bardziej prawdopodobne jest, że różne modele są potrzebne do różnych celów.
Wydaje się, że rozdzielenie serii godzinowych wynika z idei ograniczenia obliczeń bez bardzo dużego rozeznania, jaki sens to ma sens. Oznacza to, że nie użyjesz (i nie) informacji z dzisiejszego dnia wcześniej, aby przewidzieć, co się stanie o 16:00, tylko wszystkie wcześniejsze obserwacje o 16:00? Wydaje mi się, że trzeba dużo rozmawiać.
Najwyraźniej jesteś uczniem w szeregach czasowych (a ja stawiam się na równi), ale żaden uczeń nie powinien zaczynać od tak dużego problemu. Naprawdę! Masz dużo danych, masz okresy w kilku skalach, masz nieregularności godzin otwarcia i świąt, masz zmienne egzogeniczne: wybrałeś bardzo trudny problem. (A co z trendami?) Łatwo powiedzieć, ale najwyraźniej do tej pory minęło: być może będziesz musiał najpierw pracować nad bardzo uproszczonymi wersjami problemu i poczuć, jak dopasować prostsze modele. Wrzucenie wszystkiego do dużego, skomplikowanego modelu najwyraźniej nie działa dobrze i wydaje się, że potrzeba czegoś radykalnie prostszego lub uświadomienie sobie, że projekt jest prawdopodobnie zbyt ambitny.
źródło