Verwenden des R-Vorhersagepakets mit fehlenden Werten und / oder unregelmäßigen Zeitreihen


16

Ich bin beeindruckt vom R- forecastPaket, sowie zB dem zooPaket 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 NAdafür.

Die Sache ist: all die schöne Magie des Prognose - Pakets, wie zum Beispiel eta(), auto.arima()usw., scheint deutlich zu erwarten tsObjekte, 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 NAWerte kann leicht durch Verwendung einer der angebotenen Interpolationsfunktionen in zoound durch gelöst werden forecast::interp. Danach starte ich die Vorhersage.

Meine Fragen:

  1. Schlägt jemand eine bessere Lösung vor?
  2. (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.


Willkommen auf der Seite und zur Vorhersage! Reale Anwendungen für Zeitreihen mit gleichem Abstand sind definitiv nicht sehr eingeschränkt. Ich weiß etwas über die Prognosen, die in Ihren Supermarkt gelangen, wenn genügend Produkte zur Verfügung stehen, um mit der Nachfrage nach Werbemaßnahmen fertig zu werden, und glauben Sie mir, diese Millionen von Zeitreihen (20.000 Artikel in 1.000 Geschäften sind sehr verbreitet) sind in der Tat sehr gut verteilt. (Entschuldigung, aber Sie haben irgendwie darum gebeten ...) Aber ich werde versuchen, Ihnen gleich etwas Besseres einfallen zu lassen.
S. Kolassa - Reinstate Monica

2
Könnten Sie genauer erläutern, warum die Callcenter-Daten nicht gleich verteilt sind? (Vielleicht verstehe ich falsch, was Sie unter "gleichmässig" verstehen.) Die Call-Center-Prognosemethoden, die ich bisher gesehen habe, häufen eingehende Anrufe normalerweise in Intervallen von 15 Minuten an, was meiner Definition von "gleichmässig" entspricht. Wir müssen uns dann mit komplexer Saisonalität (täglich, wöchentlich, jährlich) befassen, für welches Thema dies hilfreich sein kann: stats.stackexchange.com/questions/44704/… Beantwortet dies Ihre Frage? Wenn nicht, teilen Sie uns einfach mit, was Sie sonst noch brauchen.
S. Kolassa - Setzen Sie Monica am

5
auto.arimaKann mit fehlenden Werten umgehen.
Rob Hyndman

1
Vielen Dank für alle konstruktiven Kommentare! Stephan, meine Daten sind nicht auf zwei Arten gleich verteilt: 1. Viele Call Center sind nur samstags und sonntags geschlossen. Einige sind nur sonntags geschlossen. Der "normale" Abstand zwischen zwei benachbarten Datenpunkten beträgt also einen Tag, mit Ausnahme von Fr bis Mo (drei Tage). Der Raum ist also nicht gleich, dh nicht gleichmässig. Zweitens können irgendwo zufällig Daten fehlen, weil sie einfach vergessen haben, ihr Messgerät an diesem Tag einzuschalten oder was auch immer. Ich hoffe das macht meinen Standpunkt klar.
entreprogreur

1
Nur ein (provokanter) Gedanke. Wenn Sie sagen, Call Center sind am Wochenende geschlossen. Dann haben Sie keine fehlenden Daten. Ihre Zeitreihe erstreckt sich von Mo-Fr. 5 Tage. ziemlich äquidistant. Die Wochenenden zu interpolieren scheint mir formal falsch zu sein, da Sie wissen, dass keine Anrufe eingehen und alle Informationen, die Sie unterstellen, falsch sind. Ich würde argumentieren, dass Sie eine Schätzung niemals verbessern können, indem Sie Daten erfinden ...
Mittel zur Bedeutung

Antworten:


1

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:

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

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.


Vielen Dank, IMA, für die hilfreiche Antwort! Also, was ich jetzt mache: Für diskrete fehlende Werte verwende ich Interpolation (sowie vom Benutzer bereitgestellte "Anpassungen"), um die fehlenden Daten zu füllen. IMA, Ihre Antwort zur weiteren Verbesserung ist sehr hilfreich. Bei "normalen" fehlenden Daten, wie z. B. am Wochenende, transformiere ich meine Daten nur zu Prognosezwecken in ein zweites "Pseudo" und transformiere dann das Ergebnis zurück in die "richtigen" Zeitreihen, sodass auch in der Prognose Werte fehlen an den Wochenenden. Ich wäre immer noch dankbar für einen eleganteren Vorschlag, wie man mit regelmäßigen "Lücken" an den Wochenenden umgeht.
entreprogreur

@entreprogreur, ich habe nicht geantwortet, IMA hat. IMA wird hier voll angerechnet. Ich habe die Formatierung so angepasst, dass sie gut angezeigt wird.
gung - Wiedereinsetzung von Monica

1

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.


0

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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.