Ich bin beeindruckt vom R- forecast
Paket, sowie zB dem zoo
Paket für unregelmäßige Zeitreihen und Interpolation fehlender Werte.
Meine Anwendung liegt im Bereich der Callcenter-Verkehrsprognose, daher fehlen (fast) immer Daten an den Wochenenden, die gut verarbeitet werden können zoo
. Außerdem können einige diskrete Punkte fehlen, ich benutze einfach Rs NA
dafür.
Die Sache ist: all die schöne Magie des Prognose - Pakets, wie zum Beispiel eta()
, auto.arima()
usw., scheint deutlich zu erwarten ts
Objekte, dh äquidistante Zeitreihe keine fehlenden Daten enthalten. Ich denke, dass reale Anwendungen für Zeitreihen mit gleichem Abstand auf jeden Fall existieren, aber meiner Meinung nach sehr begrenzt.
Das Problem einiger diskreter NA
Werte kann leicht durch Verwendung einer der angebotenen Interpolationsfunktionen in zoo
und durch gelöst werden forecast::interp
. Danach starte ich die Vorhersage.
Meine Fragen:
- Schlägt jemand eine bessere Lösung vor?
(meine Hauptfrage) Zumindest in meiner Anwendungsdomäne, der Callcenter-Verkehrsprognose (und soweit ich mir die meisten anderen Problemdomänen vorstellen kann), sind Zeitreihen nicht gleich verteilt. Zumindest haben wir wiederkehrende "Werktage" oder so. Was ist der beste Weg, um damit umzugehen und trotzdem die coole Magie des Forecast-Pakets zu nutzen?
Sollte ich die Zeitreihen nur "komprimieren", um die Wochenenden zu füllen, die Prognose durchführen und dann die Daten erneut "aufpumpen", um die NA-Werte an den Wochenenden erneut einzufügen? (Das wäre eine Schande, denke ich?)
Gibt es Pläne, das Prognosepaket vollständig mit unregelmäßigen Zeitreihenpaketen wie zoo oder dessen kompatibel zu machen? Wenn ja, wann und wenn nein, warum nicht?
Ich bin ziemlich neu in der Vorhersage (und der Statistik im Allgemeinen), daher kann ich etwas Wichtiges übersehen.
quelle
auto.arima
Kann mit fehlenden Werten umgehen.Antworten:
Ich bin kein R-Experte, also gibt es vielleicht einen einfacheren Weg, aber ich bin darauf schon einmal gestoßen. Was ich vorher getan habe, ist die Implementierung einer Funktion, die den Abstand (in Zeiteinheiten) zwischen den tatsächlichen Daten misst und diesen in einer neuen Spalte in der vorhandenen Zeitreihe speichert. Wir haben also so etwas wie:
Auf diese Weise können Sie immer noch damit arbeiten, wenn Ihre Zeitreihe noch nicht mit einer tatsächlichen Zeitreihe (oder einem falschen Format oder was auch immer) verknüpft ist.
Als Nächstes schreiben Sie eine Funktion, die eine neue Zeitreihe für Sie erstellt:
Zuerst berechnen Sie, wie viele Zeiteinheiten die Zeitreihe tatsächlich zwischen dem Datum Ihrer Auswahl haben würde, und erstellen diese Zeitachse in zoo oder ts oder, wie auch immer, mit leeren Werten.
Zweitens nehmen Sie Ihr unvollständiges Zeitreihenarray und füllen die Werte mit einer Schleife in der richtigen Zeitleiste entsprechend den von Ihnen gewählten Grenzen aus. Wenn Sie auf eine Zeile stoßen, in der der Einheitsabstand nicht eins ist (Tage (Einheiten) fehlen), geben Sie interpolierte Werte ein.
Da dies nun Ihre Funktion ist, können Sie tatsächlich auswählen, wie interpoliert werden soll. Sie entscheiden beispielsweise, dass Sie eine lineare Standardinterpolation verwenden, wenn der Abstand weniger als zwei Einheiten beträgt. Wenn eine Woche fehlt, tun Sie etwas anderes und wenn eine bestimmte Schwelle für fehlende Daten erreicht ist, geben Sie eine Warnung über die Daten aus - wirklich, was immer Sie sich vorstellen möchten.
Wenn die Schleife das Enddatum erreicht, geben Sie Ihre neuen ts zurück.
Vorteil einer solchen Funktion ist, dass Sie je nach Länge der Lücke unterschiedliche Interpolationen oder Bearbeitungsverfahren anwenden und eine sauber erstellte Serie im Format Ihrer Wahl zurückgeben können. Einmal geschrieben, können Sie aus jeder Art von tabellarischen Daten saubere und nützliche Testergebnisse gewinnen. Hoffe das hilft dir irgendwie.
quelle
Sie sollten sehr vorsichtig sein, wenn Sie Interpolation anwenden, bevor Sie die statistische Behandlung fortsetzen. Die Auswahl, die Sie für Ihre Interpolation treffen, führt zu einer Verzerrung Ihrer Daten. Dies sollten Sie unbedingt vermeiden, da dies die Qualität Ihrer Vorhersagen beeinträchtigen kann. Meiner Meinung nach ist es für fehlende Werte wie die von Ihnen erwähnten, die regelmäßig zeitlich getrennt sind und einem Stopp der Aktivitäten entsprechen, richtiger, diese Tage aus Ihrem Modell herauszulassen. In der kleinen Welt Ihres Callcenters (dem Modell, das Sie gerade erstellen) ist es möglicherweise besser, zu berücksichtigen, dass die Zeit einfach gestoppt ist, wenn sie geschlossen ist, anstatt Messungen einer nicht vorhandenen Aktivität zu erfinden. Andererseits wurde das ARIMA-Modell statistisch unter der Annahme erstellt, dass die Daten gleichmäßig verteilt sind. Soweit ich weiß, gibt es keine Anpassung von ARIMA an Ihren Fall. Wenn Sie nur ein paar Messungen an den tatsächlichen Arbeitstagen verpassen, müssen Sie möglicherweise interpolieren.
quelle
Ich würde die Daten nicht interpolieren, bevor ich das Modell anhand dieser Daten abschätze, wie @Remi feststellte. Es ist eine schlechte Idee. Ein extremes Beispiel: Stellen Sie sich vor, Sie haben zwei Datenpunkte für Januar 2013 und Januar 2014. Interpolieren Sie jetzt 10 monatliche Punkte zwischen Februar und Dezember 2013 und führen Sie eine Regression für das monatliche Datum durch. In Wirklichkeit wird es nicht so schlimm sein, aber es ist die gleiche Idee: Sie werden Ihre Statistiken bestenfalls aufblasen.
Der Weg ist, Zeitreihenmethoden zu verwenden, die mit fehlenden Daten umgehen. Zum Beispiel Zustandsraummethoden. Schauen Sie sich das astsa R-Paket an. Es wird mit einem hervorragenden Buch zur Zeitreihenanalyse geliefert. Dies wird mit fehlenden Daten gut umgehen. Matlab hat jetzt eine ähnliche Funktionalität im ssm- Paket. Sie müssen lernen, Ihre Modelle in Zustandsraumform umzuwandeln, aber Sie müssen dies trotzdem lernen, wenn Sie sich von
auto.arima
"Magie" entfernen möchten .quelle