Korzystanie z pakietu prognozy R z brakującymi wartościami i / lub nieregularnymi szeregami czasowymi

16

Jestem pod wrażeniem forecastpakietu R , a także np. zooPakietu dla nieregularnych szeregów czasowych i interpolacji brakujących wartości.

Moja aplikacja jest w zakresie prognozowania ruchu w call center, więc danych w weekendy (prawie) zawsze brakuje (prawie), co można ładnie obsłużyć zoo. Ponadto może brakować niektórych dyskretnych punktów, po prostu używam NAdo tego R.

Rzecz w tym: cała ładna magia pakietu prognozy, taka jak eta() , auto.arima()etc, zdają się oczekiwać zwykłe tsprzedmioty, czyli równo rozmieszczone szeregi czasowe nie zawierające żadnych brakujących danych. Wydaje mi się, że zastosowania w świecie rzeczywistym dla szeregów czasowych tylko zrównowaŜonych istnieją zdecydowanie, ale - moim zdaniem - bardzo ograniczone.

Problem kilku dyskretnych NA wartości można łatwo rozwiązać za pomocą dowolnej z oferowanych funkcji interpolacji, zoojak również przez forecast::interp. Następnie uruchamiam prognozę.

Moje pytania:

  1. Czy ktoś sugeruje lepsze rozwiązanie?
  2. (moje główne pytanie) Przynajmniej w mojej domenie aplikacji, prognozowaniu ruchu w call center (i, o ile mogę sobie wyobrazić większość innych domen problemowych), szeregi czasowe nie są równe. Przynajmniej mamy powtarzający się program „dni roboczych” czy coś takiego. Jaki jest najlepszy sposób, aby sobie z tym poradzić i nadal używać całej fajnej magii pakietu prognozy?

    Czy powinienem po prostu „skompresować” szeregi czasowe, aby wypełnić weekendy, wykonać prognozę, a następnie „napompować” dane ponownie, aby ponownie wprowadzić wartości NA w weekendy? (Myślę, że to wstyd?)

    Czy są jakieś plany, aby pakiet prognozy był w pełni kompatybilny z pakietami o nieregularnych seriach czasowych, takimi jak zoo lub jego? Jeśli tak, kiedy i jeśli nie, dlaczego nie?

Jestem całkiem nowy w prognozowaniu (i statystykach w ogóle), więc mogę przeoczyć coś ważnego.

przedsiębiorca
źródło
Witamy na stronie i prognozach! Prawdziwe aplikacje światowe równomiernie rozłożonych tylko do serii czasowych są zdecydowanie nie bardzo ograniczone. Zdarzyło mi się trochę wiedzieć o prognozach, które trafiają do twojego supermarketu, mając wystarczającą ilość produktu, aby poradzić sobie z popytem promocyjnym, i uwierz mi, te miliony szeregów czasowych (20 000 jednostek SKU w 1000 sklepach jest bardzo powszechne) są naprawdę bardzo wyrównane. (Przepraszam, ale jakbyś o to prosił ...) Ale postaram się wymyślić coś bardziej pomocnego za chwilę.
Stephan Kolassa
2
Czy możesz wyjaśnić, dlaczego dane centrum obsługi telefonicznej nie są równe? (Być może nie rozumiem, co masz na myśli przez „wyrównany”.) Metody prognozowania call center, które widziałem, zwykle grupują połączenia przychodzące w 15-minutowych odstępach, co spełnia moją definicję „wyrównany”. Następnie musimy poradzić sobie ze złożoną sezonowością (w ciągu dnia, w ciągu tygodnia, w ciągu roku), dla którego tematu może ci to pomóc: stats.stackexchange.com/questions/44704/… Czy to odpowiada na twoje pytanie? Jeśli nie, po prostu powiedz nam, czego jeszcze potrzebujesz.
Stephan Kolassa
5
auto.arimaradzi sobie z brakującymi wartościami.
Rob Hyndman,
1
Dzięki za wszystkie konstruktywne komentarze! Stephan, moje dane nie są wyrównane na dwa sposoby: 1. Wiele centrów telefonicznych jest właśnie zamkniętych w soboty i niedziele. Niektóre są zamknięte tylko w niedziele. Tak więc „normalna” przestrzeń między dwoma sąsiadującymi punktami danych wynosi jeden dzień, z wyjątkiem piątku do poniedziałku, czyli trzech dni. Zatem przestrzeń nie jest równa, tzn. Nie jest równa. Po drugie, gdzieś mogą brakować przypadkowych danych, ponieważ po prostu zapomnieli włączyć urządzenie pomiarowe tego dnia lub cokolwiek innego. Mam nadzieję, że to wyjaśnia mój punkt widzenia.
entreprogreur
1
Tylko (prowokująca) myśl. Jeśli mówisz, że centra telefoniczne są zamknięte w weekendy. Wtedy nie masz żadnych brakujących danych. Twoje szeregi czasowe obejmują Mo-Fr. 5 dni. całkiem w równej odległości. Interpolowanie weekendów wydaje mi się formalnie niewłaściwe, ponieważ wiesz, że nie ma żadnych połączeń, a wszelkie informacje, które podajesz, są fałszywe. Twierdziłbym, że nigdy nie można poprawić oszacowania poprzez wymyślenie danych ...
oznacza od

Odpowiedzi:

1

Nie jestem ekspertem od R, więc może jest prostszy sposób, ale już wcześniej się z tym spotkałem. To, co zrobiłem wcześniej, to wdrożenie funkcji, która mierzy odległość (w jednostkach czasu) między faktycznymi datami i zapisuje ją w nowej kolumnie w istniejących szeregach czasowych. Mamy więc coś takiego:

index/date | value | distance  
01.01.2011 |  15   |   1  
02.01.2011 |  17   |   3  
05.01.2011 |  22   |   ..   

W ten sposób, jeśli twoja seria czasowa nie jest jeszcze powiązana z rzeczywistą serią punktów w czasie (lub w niewłaściwym formacie lub czymkolwiek), możesz nadal z nią pracować.

Następnie piszesz funkcję, która tworzy dla ciebie nową serię czasową:

Najpierw obliczysz, ile jednostek czasu faktycznie miałaby seria czasowa między datami wyboru i utworzysz tę oś czasu w zoo, ts lub cokolwiek innego z pustymi wartościami.

Po drugie, bierzemy niepełną tablicę szeregów czasowych i, używając pętli, wypełniamy wartości we właściwej osi czasu, zgodnie z wybranymi limitami. Gdy natrafisz na wiersz, w którym odległość jednostki nie jest równa jeden (brakuje dni (jednostek)), wypełniasz interpolowane wartości.

Teraz, ponieważ jest to twoja funkcja, możesz właściwie wybrać sposób interpolacji. Na przykład decydujesz, że jeśli odległość jest mniejsza niż dwie jednostki, używasz standardowej interpolacji liniowej. Jeśli brakuje tygodnia, robisz coś innego, a jeśli osiągniesz określony próg brakujących dat, ostrzegasz o danych - naprawdę cokolwiek chcesz sobie wyobrazić.

Jeśli pętla osiągnie datę zakończenia, zwrócisz nowe ts.

Zaletą takiej funkcji jest to, że można stosować różne interpolacje lub procedury obsługi w zależności od długości odstępu i zwrócić czysto tworzy serię w wybranym przez ciebie formacie. Raz napisany, pozwala uzyskać czyste i ładne ts z dowolnego rodzaju danych tabelarycznych. Mam nadzieję, że to ci jakoś pomoże.

IMA
źródło
Dzięki, IMA, za pomocną odpowiedź! Więc co teraz robię: w przypadku dyskretnych brakujących wartości używam interpolacji (a także „korekt” podanych przez użytkownika) do uzupełnienia brakujących danych. IMA, twoja odpowiedź w dalszym ulepszaniu jest bardzo pomocna. W przypadku „regularnych” brakujących danych, takich jak weekend, przekształcam moje dane w sekundę „pseudo” ts tylko do celów prognozowania, a następnie przekształcam wynik z powrotem do „prawidłowych” szeregów czasowych, aby również prognoza miała brakujące wartości w weekendy. Wciąż byłbym wdzięczny za bardziej elegancką sugestię, jak radzić sobie z regularnymi „lukami” w weekendy.
entreprogreur
@entreprogreur, nie odpowiedziałem, IMA zrobiło. IMA dostaje tutaj pełny kredyt. Właśnie poprawiłem formatowanie, aby wyświetlało się ładnie.
gung - Przywróć Monikę
1

Należy zachować szczególną ostrożność, stosując interpolację przed dalszym traktowaniem statystycznym. Wybór dokonany dla interpolacji wprowadza błąd w danych. Jest to coś, czego zdecydowanie chcesz uniknąć, ponieważ może to zmienić jakość twoich prognoz. Moim zdaniem w przypadku brakujących wartości, takich jak te, o których wspomniałeś, które są regularnie rozmieszczone w czasie i które odpowiadają przerwom w działaniach, bardziej poprawne może być pozostawienie tych dni poza modelem. W małym świecie swojego call center (model, który budujesz na jego temat), lepiej byłoby wziąć pod uwagę, że czas po prostu zatrzymuje się, gdy jest zamknięty, zamiast wymyślać pomiary nieistniejącej działalności. Z drugiej strony model ARIMA został zbudowany statystycznie przy założeniu, że dane są równo rozmieszczone. O ile mi wiadomo, nie ma dostosowania ARIMA do twojej sprawy. Jeśli brakuje Ci tylko kilku pomiarów w rzeczywistych dniach roboczych, być może będziesz zmuszony użyć interpolacji.

Remi D.
źródło
0

Jak zauważył @Remi, nie interpolowałbym danych przed oszacowaniem modelu na tych danych. To zły pomysł. Skrajny przykład: wyobraź sobie, że masz dwa punkty danych: styczeń 2013 r. I styczeń 2014 r. Teraz interpoluj 10 punktów miesięcznych między: od lutego do grudnia 2013 r. I uruchom regresję w dniu miesięcznym. W rzeczywistości nie będzie tak źle, ale to ten sam pomysł: w najlepszym razie będziesz pompować statystyki.

Najlepszym sposobem jest użycie metod szeregów czasowych, które obsługują brakujące dane. Na przykład metody przestrzeni stanów. Spójrz na astsa pakietu R. Pochodzi z doskonałą książką na temat analizy szeregów czasowych. To ładnie poradzi sobie z brakującymi danymi. Matlab ma teraz podobną funkcjonalność w pakiecie ssm . Musisz nauczyć się przekształcania modeli w formę przestrzeni stanu, ale musisz się tego nauczyć, jeśli chcesz odejść od auto.arima„magii”.

Aksakal
źródło