Vorhersage vom vorherigen Datum: Wertdaten

8

Ich habe ein paar Datensätze aus ähnlichen Zeiträumen. Es ist eine Präsentation von Menschen an diesem Tag, die Zeit beträgt etwa ein Jahr. Die Daten wurden nicht in regelmäßigen Abständen gesammelt, es ist ziemlich zufällig: 15-30 Einträge für jedes Jahr, aus 5 verschiedenen Jahren.

Die aus den Daten für jedes Jahr gezogene Grafik sieht ungefähr so ​​aus: Graph mit Matplotlib gemacht. Ich habe die Daten in datetime.datetime, int Format.

Ist es möglich, auf vernünftige Weise vorherzusagen, wie sich die Dinge in Zukunft entwickeln werden? Mein ursprünglicher Gedanke war, den Durchschnitt von allen vorherigen Ereignissen zu zählen und vorherzusagen, dass dies der Fall sein wird. Das berücksichtigt jedoch keine Daten des laufenden Jahres (wenn es die ganze Zeit über dem Durchschnitt lag, sollte die Schätzung wahrscheinlich etwas höher sein).

Der Datensatz und mein Wissen über Statistiken sind begrenzt, daher ist jede Einsicht hilfreich.

Mein Ziel wäre es, zuerst eine Prototyp-Lösung zu erstellen, um zu testen, ob meine Daten für das, was ich versuche, ausreichen, und nach der (potenziellen) Validierung würde ich einen verfeinerten Ansatz versuchen.

Edit: Leider hatte ich nie die Chance, die Antworten zu versuchen, die ich erhielt! Ich bin immer noch neugierig, ob diese Art von Daten ausreichen würde und werde dies im Hinterkopf behalten, wenn ich jemals die Chance bekomme. Danke für alle Antworten.

    
schme 07.08.2012, 11:32
quelle

2 Antworten

12

In Ihrem Fall ändern sich die Daten schnell und Sie haben sofortige Beobachtungen neuer Daten. Eine schnelle Vorhersage kann mit Holt-Winter exponentiellen Glättung implementiert werden.

Die Update-Gleichungen:

m_t sind die Daten, die Sie haben, z. B. die Anzahl der Personen zu jeder Zeit t . v_t ist die erste Ableitung, d. h. das Trending von m . alpha und beta sind zwei Zerfallsparameter. Die Variable mit tilde oben bezeichnet den vorhergesagten Wert. Überprüfen Sie die Details des Algorithmus auf der Wikipedia-Seite.

Da Sie python verwenden, kann ich Ihnen einen Beispielcode zeigen, der Ihnen bei den Daten hilft. Übrigens verwende ich einige synthetische Daten wie folgt:

%Vor%

Oberhalb von data_t ist eine Folge von aufeinanderfolgenden Datenpunkten, die zum Zeitpunkt 0 beginnen; data_y ist eine Folge von beobachteten Anzahl von Personen bei jeder Präsentation.

Die Daten sehen wie folgt aus (Ich habe versucht, sie in die Nähe Ihrer Daten zu bringen).

Der Code für den Algorithmus ist einfach.

%Vor%

Ok, jetzt nennen wir unseren Prädiktor und zeichnen das vorhergesagte Ergebnis gegen die Beobachtungen:

%Vor%

Das rote zeigt das Vorhersageergebnis zu jedem Zeitpunkt. Ich setze alpha auf 0.8, so dass die letzte Beobachtung die nächste Vorhersage sehr beeinflusst. Wenn Sie den Geschichtsdaten mehr Gewicht geben wollen, spielen Sie einfach mit den Parametern alpha und beta . Beachten Sie auch, dass der am weitesten rechts liegende Datenpunkt auf der roten Linie bei t=15 die letzte Vorhersage ist, zu der wir noch keine Beobachtung haben.

BTW, das ist bei weitem keine perfekte Vorhersage. Es ist einfach etwas, mit dem du schnell anfangen kannst. Einer der Nachteile dieses Ansatzes ist, dass Sie in der Lage sein müssen, Beobachtungen zu erhalten, ansonsten würde die Vorhersage immer mehr ausbleiben (wahrscheinlich gilt dies für alle Echtzeit-Vorhersagen). Ich hoffe es hilft.

    
greeness 16.11.2012 03:23
quelle
4

Vorhersage ist schwer. Vielleicht möchten Sie Polynom-Extrapolation ausprobieren - aber der Schätzwert Fehler wird sich drastisch erhöhen Sie kommen weiter vom "bekannten" Bereich entfernt.

Eine andere mögliche Lösung ist der Versuch, maschinelles Lernen -Algorithmen zu verwenden, aber dafür müssen Sie sammeln eine Menge Daten.

Extrahieren Sie Features aus Ihren Daten (ein Feature ist beispielsweise die Anzahl der Einträge an einem einzelnen Tag). Und trainiere den Algorithmus. (Geben Sie ihm weit entfernte Daten als Features und die Gegenwart als das vorhergesagte Feld zum Beispiel).

Ich weiß nichts über Python, aber in Java - es gibt eine Open-Source-Bibliothek namens weka das die meisten Funktionalitäten und Algorithmen implementiert, die für maschinelles Lernen verwendet werden.

Sie können abschätzen, wie genau diese Methode später die Validierungsprüfung verwendet.

>

Mit diesem gesagt - dieses Problem wird normalerweise als Trend-Erkennung bezeichnet, und ist ein heißes Feld in der Forschung derzeit, so gibt es kein Silber bullet .

    
amit 07.08.2012 11:39
quelle