Wie kann ich Datenverkehr basierend auf früheren Zeitreihendaten vorhersagen?

18

Wenn ich ein Einzelhandelsgeschäft besitze und messen kann, wie viele Personen pro Minute mein Geschäft betreten, und diese Daten mit einem Zeitstempel versehen, wie kann ich dann den zukünftigen Fußgängerverkehr vorhersagen?

Ich habe mich mit Algorithmen für maschinelles Lernen befasst, bin mir aber nicht sicher, welche ich verwenden soll. In meinen Testdaten ist ein Jahr-über-Jahr-Trend genauer als andere Dinge, die ich ausprobiert habe, wie z. B. KNN (mit den meiner Meinung nach sinnvollen Parametern und der Abstandsfunktion).

Es sieht fast so aus, als könnte dies der Finanzmodellierung ähneln, bei der Sie sich mit Zeitreihendaten befassen. Irgendwelche Ideen?

user1132959
quelle
Vielleicht könnte dieses Whitepaper nützlich sein. knime.org/files/knime_bigdata_energy_timeseries_whitepaper.pdf Es geht um die Modellierung von Zeitreihen einschließlich Saisonalität. - Rosaria
Rosaria

Antworten:

17

Das Problem bei Modellen wie KNN ist, dass sie die Saisonalität nicht berücksichtigen (zeitabhängige Abweichungen im Trend). Um dies zu berücksichtigen, sollten Sie die Zeitreihenanalyse verwenden.

Für Zähldaten wie Ihre können Sie verallgemeinerte lineare Modelle mit automatischem gleitendem Durchschnitt (GLARMA) verwenden. Glücklicherweise gibt es ein R-Paket, das sie implementiert ( Glarma ).

Die Vignette ist eine gute Quelle für die Theorie hinter dem Werkzeug.

Christopher Louden
quelle
2
Ein weiteres sehr nützliches Paket für Prognosen und Zeitreihenanalysen ist die Prognose von Prof. Rob J. Hyndman.
Def_Os
Wissen Sie, ob dies bereits in einer anderen Sprache implementiert ist? Ich bin nicht gerade ein Profi bei R. Ich werde auf jeden Fall die Zeitung lesen.
user1132959
Ich kenne mich nicht aus. Wenn Sie Python verwenden möchten , können Sie das Paket rpy2 verwenden , um die Glarma-Funktion aufzurufen, während Sie den größten Teil der restlichen Programmierung in Python ausführen. Die meisten anderen Sprachen haben ebenfalls einen solchen Konnektor.
Christopher Louden
10

Ich denke, die obigen Antworten von Christopher sind völlig vernünftig. Als Alternative (oder vielleicht zusätzlich zu den Ratschlägen, die er gibt) möchte ich zunächst die Daten ein wenig visualisieren, um einen groben Überblick über die Vorgänge zu bekommen.

Wenn Sie dies noch nicht getan haben, können Sie versuchen, den Monat und den Wochentag eines Datums als Funktionen hinzuzufügen. Wenn Sie am Ende bei KNN bleiben, hilft dies dem Modell, die Saisonalität zu ermitteln.

Um dies anders zu verstehen, sollten Sie mit einem wirklich, wirklich einfachen Modell (wie OLS) beginnen. Diese Modelle sind oft sehr hilfreich, um vernünftige Vorhersagen zu generieren.

Und je mehr wir über Ihre Daten wissen, desto einfacher können wir Ihnen bei der Erstellung von Vorschlägen behilflich sein. Welchen Zeitrahmen beachten Sie? Welche Funktionen verwenden Sie derzeit? etc.

Hoffe das hilft --

Mark T. Patterson
quelle
Ja, die Visualisierung ist ein wesentlicher erster Schritt bei jeder Analyse.
Christopher Louden
Ich habe den Monat, den Tag des Monats, den Wochentag und das Jahr als Merkmale hinzugefügt. Ich habe sogar versucht, den "Recentness" -Wert linear zu verringern. Ich glaube nicht, dass ich OLS ausprobiert habe. Ich beobachte einen Zeitrahmen, der zwischen ein paar Wochen und mehreren Jahren liegen kann. Was die Visualisierung angeht, habe ich versucht, das zu tun. Das Problem ist, dass die Software automatisch und ohne menschliches Eingreifen Vorhersagen für verschiedene Kunden erstellen kann.
user1132959
3

Du könntest es mit Neural Network versuchen. Hier und hier finden Sie zwei großartige Erklärungen zur Anwendung von NN auf Zeitreihen .

Beachten Sie, dass Folgendes empfehlenswert ist:

  • Deseasonalize / Detrend der Eingabedaten (damit der NN die Saisonalität nicht lernt).
  • Skalieren / Normalisieren Sie die Eingabedaten neu.

Da Sie nach einem Regressionsproblem suchen, sollten linearund sollten die Aktivierungsfunktionen nicht sigmoidoder tanhnur minimiert werden sum-of-squares error(als Widerspruch zur Maximierung des negative log-likelihoodEinteilungsproblems).

Orelus
quelle
Ich habe mir Neuronale Netze als Option angesehen, wusste aber nicht, welche Art von Parametern ich verwenden würde. Ich muss die probieren.
user1132959
Sigmoid und Tanh sind in Ordnung, Nichtlinearität soll komplexere Wechselwirkungen lernen und die Gewichte ordnen diese jedem Bereich zu, den das Netzwerk für notwendig hält
Jan van der Vegt
3

Wie @Christopher Lauden oben erwähnt hat, ist eine Zeitreihenanalyse für diese Art von Dingen am besten geeignet. Wenn Sie jedoch einen traditionelleren "Ansatz für maschinelles Lernen" haben möchten, habe ich in der Vergangenheit versucht, Ihre Daten in überlappenden Zeitfenstern als Features zu blockieren und dann die nächsten Tage (oder Wochen) vorherzusagen ) der Verkehr.

Ihre Feature-Matrix würde ungefähr so ​​aussehen:

t1 | t2 | ... | tN
t2 | t3 | ... | tN+1
t3 | t4 | ... | tN+2
...
tW | tW+1 | ... |tN+W

Wo tIist der Verkehr am Tag I. Die Funktion, die Sie vorhersagen, ist der Verkehr am Tag nach der letzten Spalte. Verwenden Sie im Wesentlichen ein Verkehrsfenster, um den Verkehr des nächsten Tages vorherzusagen.

Jede Art von ML-Modell würde dafür funktionieren.

Bearbeiten

In Beantwortung der Frage "Können Sie erläutern, wie Sie diese Feature-Matrix verwenden":

Die Feature-Matrix enthält Werte, die den Verkehr in der Vergangenheit über einen bestimmten Zeitraum anzeigen (z. B. den stündlichen Verkehr über 1 Woche). Mit diesen Werten können Sie den Verkehr für einen bestimmten Zeitraum in der Zukunft vorhersagen. Wir nehmen unsere historischen Daten und erstellen eine Feature-Matrix des historischen Verkehrs und kennzeichnen diesen mit dem Verkehr zu einem späteren Zeitpunkt (z. B. 2 Tage nach dem Fenster im Feature). Mit einer Art Regressionsmodell für maschinelles Lernen können wir historische Verkehrsdaten verwenden und versuchen, ein Modell zu erstellen, das vorhersagt, wie sich der Verkehr in unserem historischen Datensatz bewegt hat. Es wird davon ausgegangen, dass der zukünftige Verkehr dem früheren Verkehr ähnelt.

Gallamin
quelle
Könnten Sie näher erläutern, wie Sie diese Feature-Matrix verwenden würden? Versuchen Sie, basierend auf der Veränderung des Datenverkehrs über Tage hinweg zu lernen?
user1132959
Ich habe die Antwort bearbeitet, um hoffentlich mehr Klarheit zu schaffen.
Gallamine
2

Nun, erstens würde ich Dinge wie maschinelles Lernen nicht einmal anwenden, ohne gründliche Kenntnisse zu haben. Einfache Dinge, die ich tun würde, wenn ich diese Zeitreihe hätte, sind:

  1. Schreiben Sie SQL-Abfragen, um zu verstehen, zu welcher Zeit Sie am meisten frequentiert, durchschnittlich und wenig frequentiert sind.
  2. Versuchen Sie dann, die gesamte Zeitreihe zu visualisieren, und verwenden Sie grundlegende Mustervergleichsalgorithmen, um Muster zu erfassen.

Diese beiden Punkte helfen Ihnen zu verstehen, was Ihnen Ihr Datensatz sagt. Dann sind Sie wahrscheinlich in der Lage, Algorithmen für maschinelles Lernen besser zu nutzen.

Außerdem arbeite ich derzeit daran, etwas über Zeitreihen zu erstellen, und die Verwendung der Zeitreihenanalyse hilft Ihnen viel mehr als maschinelles Lernen. Beispielsweise gibt es Mustererkennungsalgorithmen, bei denen die täglichen Daten zum Anzeigen von Mustern verwendet werden, und solche, bei denen bis zu 3 bis 6 Monate Daten zum Erfassen eines Musters verwendet werden.

Nischal Hp
quelle
0

Ich würde von der Verwendung eines neuronalen Netzwerks oder eines gleichwertigen Netzwerks abraten, da ich davon ausgehe, dass Sie aufgrund Ihrer Erfahrung mit dem Geschäft über einen so guten vorherigen Stand verfügen (dh dass es wahrscheinlich tägliche / saisonale Trends und einen gewissen Grad an Glätte gibt) und Ich stelle mir eine relativ kleine Datenmenge vor. Eine bessere Option für IMO wäre die Verwendung einer Kernel-Methode wie eines Gaußschen Prozesses oder einer SVM.

j__
quelle
0

Erwecken Sie diesen Thread zum Leben, da dies für andere nützlich sein könnte, die hier mit ähnlichen Fragen landen.

Facebook hat kürzlich ein internes Prognosetool namens Prophet veröffentlicht und als Open-Source-Version bereitgestellt. Https://facebookincubator.github.io/prophet/

Es ist als R & Python-Paket erhältlich und stellt sich als interessante Lösung für jemanden mit wenig maschinellem Lernhintergrund heraus. Einige zusätzliche ML-Kenntnisse ermöglichen es jedoch, die produzierten Modelle abzustimmen und zu optimieren.

Ich empfehle, Prophet als ersten Schritt zu versuchen. Der schnelle Gewinn dieser Lösung ist die Leichtigkeit und Schnelligkeit des Modellbaus und des Testens: Sie können buchstäblich in wenigen Minuten eine Abstiegsprojektion erhalten. Es verhält sich in Zeitreihen sehr gut und erfasst die Saisonalität der vorliegenden Daten "auf natürliche Weise".

Unter der Haube ähnelt es einem verallgemeinerten additiven Modell (GAM) - weitere Details finden Sie auf dem entsprechenden Artikel: https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf

Alexandre Cortyl
quelle