Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Prognose/Vorhersage Verfahren
Mackerlama
myCSharp.de - Member



Dabei seit:
Beiträge: 118
Herkunft: Thüringen

Themenstarter:

Prognose/Vorhersage Verfahren

beantworten | zitieren | melden

Hallo.

Entschuldigt meinen "schwammigen" Thread.

Habt ihr euch schon einmal mit dem Thema Prognose bzw. Vorhersage in irgendeiner Form auseinandersetzen müssen? Z.B. Auswerten von historischen Daten --> Modell entwickeln --> Aussage über mögliche Zukunft treffen.

Wie seid ihr vorgegangen? Was gibt es da für Standardverfahren?
Ich meine so etwas wie lineare Regression (egal in welcher Form) oder Algorithmen aus dem Bereich Data Mining (wobei Regression da auch hinein fällt).

Grundsätztlich suche ich nach Schlagworten, Beispielen oder Allem, was damit in Verbindung steht.


// Aus (sagen wir) beruflichen Gründen bin ich auf das Thema gestosen und habe da nun ein persönliches Interesse für entwickelt.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Realnub,

Prognosen sind schwierig, vor allem wenn sie die Zukunft betreffen.

Ich erlaube mir mal, der Schwammigkeit der Frage entsprechend schwammig zu antworten: Ich denke, sowas wie ein Standardverfahren gibt es nicht und kann es nicht geben, weil es immer darauf ankommt, ein Modell zu finden oder zu entwickeln, das für den konkreten Fall möglichst gut passt. Ich denke, dass können einem Rechner (bisher) noch nicht abnehmen. Es sollte klar sein, dass z.B. lineare Regression kein geeignetes Modell ist, um Aktienkurse vorherzusagen.

Stichworte hast du ja schon ein paar genannt. Wenn du damit anfängst zu suchen, solltest du schnell auf weitere Stichworte stoßen.

herbivore
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.856
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

das Haupt-Schlagwort ist "Time Series Prediction" / Zeitreihenanalyse.

Wenn ein elementar deterministisches System vorliegt (wie in der Mechanik) kann über eine vollständige mathematische Beschreibung des Systems zu jedem Zeitpunkt der Folgenzustand bei gegeben Anfansgszustand unter Berücksichtigung aller äußeren Einflüsse exakt berechnet werden. Die äußeren Einflüsse zu modellieren stellt hier das Problem dar.

Da die Wechselwirkungen der realen System mit der Umwelt vielfach und oft unbekannt sind ist eine vollständige mathematische Beschreibung nahezu ausgeschlossen. Also wird anstatt das System mit Zustandsgleichungen zu beschreiben oft ein der zeitliche Verlauf des Systemzustands mit allen Einflüssen betrachtet.

Das Problem der Zeitreihenvorhersage lässt sich formal als
y(t+1) = f(y(t), y(t-1),...,y(t-f+1))
beschreiben, wobei t die Zeit und f die Fensterlänge ist. Der Vektor Y(t) = [y(t), y(t-1),...,y(t-f+1)]^T wird dabei als Regressor zur Zeit t bezeichnet und f(.) ist das Modell für die Vorhersagung.

Egal welche Methode für die Vorhersage verwendet wird ist ein Preprocessing der Werte wichtig. Meist ist es besser nicht die rohen Daten der Zeitreihe zu verwenden, sondern diese in Indikatoren überzuführen damit die zu Grunde liegende Information besser wiedergegeben werden kann.
Zusätzlicih gilt natürlich das was herbivore angemerkt hat.

Bevor jedoch eine Methode zur Prognose gewählt wird ist es durchaus sinnvoll sich ein Diagramm der Zeitreihen anzuschauen. Dadurch können ungeeignten Verfahren von vorn herein ausgeschlossen werden.

Weitere Schlagworte (ohne bestimmte Reihenfolge):
  • Extrapolation
  • Komponentemodelle, Trendkomponente, Saisonkomponente
  • Box-Jenkins-Methode und deren Weiterentwicklungen, ARMA-Modell und Abwandlungen
  • Markov-Kette, Brownsche Bewegung (Random-Walk), Diffusionsprozess, Monte Carlo-Methoden, Metropolis Algorithmus
  • Black-Sholes Gleichung (v.a. für Finanzmodelle)
  • Fuzzy Algortihmen
  • evolutionäre Methoden
  • neuronalen Netzen (NN in Folge als Abkürzung)
Wobei für neuronale Netze folgende brauchbare Ergebnisse liefern:
  • Multilayer Perceptron (Sliding Window-Verfahren) (= MLP)
  • Radiale-Basisfunktionen Netzwerke (v.a. mit Euler-Basisfunktion) (= RBF)
  • Rekurrente Netzwerke (wie die beiden vorher nur mit Rückkopplung)
  • Time-Delay Netzwerk (wie die beiden oberen nur mit Verzögerungsverbindungen)
  • selbstorganisierende Merkmalskarte (= SOM = Kohonen-Netz)
  • neuronales Gas, wachsendes neuronales Gas

Die Vorteile der Verwendung von NN sind
  • NN sind universelle Funktionsapproximatoren die auch nichtlineare Zusämmenhänge abbilden können
  • sind sehr flexible da keine speziellen Informationen über Wahrscheinlichkeitsverteilungen und auch keien formalen Modellspezifikation benötigen
  • für das Prognose-Modell sind keine Annahmen notwendig und viele Parameter sind durch die zur Verfügung stehenden Daten gegeben
  • robust gegenüber Rauschen in den Daten und kann auch mit chaotischen Anteilen relativ gut umgehen
  • das Training kann während der Prognose fortgesetzt werden -> Anpassung an Änderungen in den Daten
Nachteile gibts dabei natürlich auch:
  • das Lernen ist aufwändig
  • bereits bekannte Zusammenhänge können kaum beim Lernen berücksichtigt werden
  • aus dem trainierten Netz können (fast) nicht die zu Grunde liegenden kausalen Zusammenhänge abgeleitet werden
  • haben Probleme mit gleichzeitigen linearen und nichtlinearen Zusammenhängen
Angemerkt sein dass in der Literatur eigentlich immer noch mit MLPs vorzugsweise gearbeitet wird obwohl ich die SOM für deutlich besser halte. Mich wundert das, aber wahrscheinlich liegt das daran dass jeder der sich mit NN beschäftig zuerst auf MLP stößt und dann zufrieden ist ohne sich mit den anderen Möglichkeiten zu beschäftigen. Die SOM ist das einzige NN-Modell das dem biologischen Hirn am nächsten kommt.

Für die Prognose* hab ich gute Erfahrungen mit folgenden Ansätzen - basieren auf NN - gemacht:
  • Nahe Vorhersage eines Skalars:
    Die Zeitreihe wird in Teile zerlegt (Fensterung, time-delayed-vectors) und dann mit einem wachsenden neuronalen Gas geclusteret, wobei ich die Maximalgröße des Gases je nach Fensterlänge beschränkt habe. Für die Vorhersage wird aus dem letzen bekannten Fenster (Regressor) das Sieger-Neuron ermittelt. Da dieses für eine diskreten Wert in der gesamten (bisher bekannten) Zeitreihe steht wird zusammen mit den Nachbarn des Sieger ein gewichteter Mittelwert für den vorhergesagten Wert berechnet.

  • Nahe Vorhersage eines Skalars (Variante die meist etwas besser ist):
    Wie oben wird die Zeitreihe in Teile zerlegt und geclustert. Für die Vorhersage wird aus dem Regressor der Sieger-Cluster ermittelt und mit den Zeitreihen-Fenster die zu diesem Cluster gehören ein MLP trainiert und daraus dann der nächste Wert der Zeitreihe prognostiziert. Anstatt dem MLP könnte auch ein RBF verwendet werden, aber das habe ich nie praktisch verfolgt. Diese Verfahren gehören zur Gruppe der in der Literatur als lokale nichtlineare Modell bekannt.

  • Nahe Vorhersage von Vektoren (also mehrere Werte auf einmal vorhersagen wie zB der Verbrauch für die nächsten 24h):
    Wenn wir bei den 24h Stunden bleiben so wir die gesamte Zeitreihen in 24h-Fenster zerlegt und der Mittelwert, Varianz und das normalisierte Profil für jedes Fenster erstellt. Die Trendkomponente wird dabei entfernt und die Varianz normalisiert (z-Transformation). Mit diesen aufbereiteten Fenster wird eine SOM (mit zylindrischer Topologie) trainiert. Die Vorhersage erfolgt dann in fongenden Schritten: 1) der Mittelwert und die Variianz wird mit einer Methode (siehe oben) vorhergesagt 2) für das Profil des nächsten Tages wird in der trainierten SOM nach ähnlichen Tagen der Vergangenheit gesucht (-> Ermittlung Siegerneuron + Nachbarn) und aus den Codebook-Vektoren ein gewichteter Durchschnitt berechnet 3) dem so ermittelten Profil für den nächsten Tag wird die Varianz und der Mittelwert aus 1) wieder hinzugerechnet -> fertig

  • Für längerfristige Vorhersagungen von Trends:
    Etwas komplizierten Ansatz mit zwei neuronalen Gasen wo eines im Regressor-Raum und das andere im Deformations-Raum arbeitet. Details spare ich mir aber sonst wirds allzu lang ;-)

Wenn es um periodische Daten geht so ist es (oft) vorteilhaft die Zeit "auf einer Spirale zu kodieren". D.h. die Zeit wird als Position t zwischen Beginn und Ende aufgefasst und zusätzlich mit enem Phasenwinkel phi versehen, wobei dieser Winkel die Position im täglichen, wöchentlichen, jährlichen oder was auch immer für eine Zyklus angibt. Somit wird die Zeit als Tripel (t, cos phi, sin phi) im Modell berücksichtigt.

Weiters ist es bei möglichst exakten Prognosen sinnvoll redundant zu arbeiten, d.h. mit mehreren verschiedenen Verfahren die Prognose durchzuführen und somit die Einzelergebnisse validieren.

Bei meinen Versuchen hat mir immer gefallen wie es sich verhält wenn ich den vorgergesagten Wert auch zur weiteren Vorhersage verwende im Vergleich zur real verlaufenden Zeitreihe. Dort v.a. wann und wie die beiden Verläufe divergieren beginnen.

* allerdings nicht für Börsendaten**, dort werden zwar NN zur Prognose von Börsenkursen verwendet. Neben dem konjukturellen Umfeld spielen aber auch Erwartungen, Bauchgefühl und Emotionen dabei eine wichtige Rolle. Würden die Entscheidungen über Kauf/Verkaufen mehr und mehr auf die Ergebnisse der neuronalen Netze gestützt dann würden diese das Marktgeschehen losgelöst von menschlichen Einflüssen bestimmen und die Frage ist dann wie gut deren Prognose dann noch ist in einem Umfeld für das sie nicht trainiert wurden ;-)

** sondern für Prozessverläufe wie zB Verschleißerscheinungen


So, das war genug Text ;-)
Mit oben genannten Stichworten findest du mehr als genug Literatur. Viel Spass!


mfG Gü

Speedski, Zeitreihe, SOM, MLP, TSP, Time Series Prediction

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Mackerlama
myCSharp.de - Member



Dabei seit:
Beiträge: 118
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Danke euch. Speziell gfoidl

mit so vielen brauchbaren Feedback habe ich gar nicht gerechnet.

Um das Thema NN habe ich bisher einen Bogen gemacht. Mir gefällt der Blackbox-Charakter nicht. Außerdem ist das Thema nicht gerade leichte Kost. (meine Versuche haben immer zu auswendig lernen geführt)

Danke für den Hinweis redundant Vorzugehen und mit weiteren Verfahren ein Ergebnis zu validieren. Auf die Idee wäre ich nicht gekommen.

Hintergrund für meine Fragen ist, dass ich versuche Retouren eines Versandhändlers hervorzusagen.
Mein bisheriges Vorgehen stützt sich einfach gesagt auf einfache lineare Regression und Histogrammkurven (nach drei Tagen 7%, nach vier Tagen 5%) usw. Feiertage bzw. Nichtarbeitstage berücksichtige ich, sowie noch ein paar andere Parameter (Wochentage, Frachtführer, Kunde, Artikel usw.).

Mein Weg ist jedoch recht grob. Wobei die Ergebnisse akzeptabel sind. Alternativ habe ich versucht jede einzelne Position, die versendet wird zu klassifizieren. Die Klasse stehen hier für die Laufzeit. (0 keine Retour, 1-60 für Tage). Das Ergebnis war nicht gut ("zackige" Kurve). Vermutlich ist die Datenbasis zu dünn, oder ich habe die Parameter falsch gewichtet.

Anfangs steckte ich noch nicht so tief in dem Thema drin. Jetzt läuft es jedoch mit annehmbaren Ergebnissen und ich weiß deutlich mehr. Trotzdem will ich einfach andere Verfahren diskutieren. Vorallem will ich meinen entstandenen Tunnelblick verlieren.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.856
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

Zitat
meine Versuche haben immer zu auswendig lernen geführt
Was kann man da auswendig lernen? Mehr als eine algorithmische Idee die vom biologischen Vorbild Hirn inspiriert wurde ist es im Prinzip ja nicht und die paar Formeln auswendig lernen bringt nix. Du musst schon vertehen worums geht und wenn du die Formeln brauchst kannst du die aus der Idee einfach selbst herleiten oder eben nachschlagen ;-)

Zitat
versuche Retouren eines Versandhändlers hervorzusagen.
Da gilt eigentlich das Gleiche wie oben für die Börse angemerkt. Genauer meine ich damit dass der menschliche Einfluss auf Retournieren oder nicht sehr willkürlich sein kann ohne dass ein wirklicher kausaler Hintergrund existiert zB "gefällt mir nicht schick ich zurück". Diese Unsicherheit in der Prognose wirst du schwer in den Griff bekommen können.

Mit einer Zeitreihe hat das aber nix direkt zu tun. Das Zurücksenden ist ein diskretes Ereignis das für ein versendetes Produkt ja nur einmal auftritt. Als Ergebnis der Prognose kommt die Anzahl der Tage bis zum erwarteten Zurücksenden heraus bzw. besser eine Kurve mit der Rücksendewahrscheinlichkeit über die Anzahl der Tage.

Ich würde jedes Produkt (das versendet werden kann ;-) mit Attributen beschreiben - wie zB Preis, Produktkategorie (wie Haushaltsgerät, etc. dieses halt kodiert), usw. mit allem was das Produkt halt auf Meta-Ebene beschreibt - und dann die Daten für jedes Produkt sammeln. Liegen genügend Daten vor werden mit den Meta-Attributen Cluster gebildet - würde ich über eine SOM machen, wenn du aber mit NN nicht willst/kannst dann geht auch mit k-Means*. Der Vorteil der SOM gegenüber k-Means ist dass die Topologie erhalten bleibt, d.h. dass ähnliche Produkte auch in der Projektion nebeneinander liegen.
Soll nun die Prognose für ein Produkt durchgeführt werden so wird anhand dessen Meta-Attributen der entsprechende Cluster gesucht und somit hat man alle ähnlichen Produkte und daraus können dann statischte Schlüsse gezogen werden.

Angehängt ein Bild das eine trainierte SOM zeigt und wo rot und grob einen Cluster eingezeichnet habe und das soll oben beschriebenes Vorgehen verdeutlichen.
Zu sehen ist dass ähnliche Merkmale (für die Betrachtung ist es egal wo die aus dem Bild herkommen) zusammen abgebildet werden (-> Topologieerhaltung).
Fällt ein zu untersuchendes Produkt auch in diesen Cluster so kann mit allen "verwandten Informationen" weiter gearbeitet werden.
Die Cluster werden in der Praxis automatisch mit speziellen Verfahren ermittelt.

Da die richitge Wahl der Cluster-Größe, etc. schwierig ist bzw. nicht vorher angegeben werden kann würde ich hier (zumindest anfänglich) sehr redundant vorgehen. D.h. verschiedene Clusterungen komplett parallel verwalten und stets mit der Realität vergleichen und jene Clusterungen ausscheiden lassen die zu weite vom Realem entfernte Ergebnisse liefern (-> Evolution ;-)

Natürlich setzt das eine genügend große Datenbasis voraus, sonst bringt das nix.
Für das Retournieren gibts aber bestimmt spezielle Literatur denn ich kann mir gut vorstellen dass das Thema in bestimmten Branchen von großem Interesse ist.

* der Linde-Buzo-Gray Algorithmus = k-Means kann formal als Vorgänger der SOM angesehen werden und kann mit wenigen Zeilen Code umgesetzt werden


mfG Gü


Edit: Bild angehängt und entsprechend Absatz oben eingefügt.
Attachments

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Ein wichtiger Faktor ist auch der kaufende Kunde. Manche Menschen neigen eher dazu Ware zu bestellen und wieder zurückzusenden als andere. Ich würde daher eher über den Kunden als über die Ware gehen. Vor allem deshalb weil nicht die Ware am "nicht gefallen" schuld ist.

Ich würde den Kunden nach einige Faktoren Klassifizieren. Z.B. in welchen Preissegmenten der Kunde wie hoch wahrscheinlich eine Ware zurücksendet und welche Produktkategorien von dem Kunden wie häufig zurückgesendet werden.

Für neue Kunden würde ich die Durchschnittswerte als Initial werte nehmen.
Mackerlama
myCSharp.de - Member



Dabei seit:
Beiträge: 118
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Zitat von gfoidl
Zitat
meine Versuche haben immer zu auswendig lernen geführt
Was kann man da auswendig lernen? Mehr als eine algorithmische Idee die vom biologischen Vorbild Hirn inspiriert wurde ist es im Prinzip ja nicht und die paar Formeln auswendig lernen bringt nix. Du musst schon vertehen worums geht und wenn du die Formeln brauchst kannst du die aus der Idee einfach selbst herleiten oder eben nachschlagen ;-)

Mit auswendig lernen meinte ich das Netz, nicht mich. (mittels Matlab hatte ich mir aus Testdaten Netze generien lassen)



Ich kann nicht ins Detail gehen. (ich möchte keine Daten preisgeben, die ich nicht darf.)
--> Der Kunde ist ein wichtiger Faktor - das stimmt. Aber es handelt sich nicht zwangsläufig um eine natürliche private Person. Kunden können auch Firmen oder geschäftliche Personen sein. Das macht das ganze komplizierter. Dazu kommt, dass es "wenig" Stammkunden gibt, diese wären natürlich am besten zu analyisieren.
private Nachricht | Beiträge des Benutzers
mo#
myCSharp.de - Member

Avatar #avatar-3131.jpg


Dabei seit:
Beiträge: 187
Herkunft: Baden

beantworten | zitieren | melden

Kurze Frage am Rande: Firmenkunden haben doch gar kein Wiederrufsrecht oder?

Moderationshinweis von herbivore (18.11.2010 - 16:03)

Kein gesetzliches, aber der Händler kann natürlich auf vertraglicher Ebene seinen Kunden beliebige Rechte einräumen.

private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.856
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

Jacks Idee den Kunden zu bewerten ist sinnvoller als das Produkt zu bewerten und dabei den Kunden als undefinierbaren Einfluss zu sehen ;-)
=> die Wahrscheinlichkeit dass der Kunde das Produkt zurückschickt beträgt so und soviel % für den Tag X
=> über alle Kunden die das Produkt kauften ergibt es dann auch eine Aussage für das Produkt

Es wäre aber auch möglich beides zu kombinieren indem zB der Kunde als weiteres Attribut in die Produkt-Metadaten eingeht. Das könnte sogar den Vorteil haben dass dabei die Datenbasis für die Produkte verfielfältig wird.
Zitat
Mit auswendig lernen meinte ich das Netz, nicht mich. (mittels Matlab hatte ich mir aus Testdaten Netze generien lassen)
Deshalb beim Lernen immer zwei Datensätze haben - Lerndatensatz und Validierungsdatensatz. Wenn der Validierungsfehler (der für jeden Lernschritt aufgezeichnet wird) nach erreichen des Minimums wieder steigen beginnt sollte das Lernen beendet werden denn dann ist die Generalisierungsfähig ausgeschöpft und es beginnt das Auswendiglernen.

Zitat
Ich kann nicht ins Detail gehen.
Details brauchst du eh nicht nenne. Die konkrete Umsetzung will dir eh keiner (ohne gute Bezahlung) abnehmen. Aber was geheimes ist das Szenario aber wirklicih nicht. Verkäufer <-> Käufer wobei der mit einer Wahrscheinlichkeit zurückschickt.

Zitat
Dazu kommt, dass es "wenig" Stammkunden gibt, diese wären natürlich am besten zu analyisieren.
Ich denke ob Stammkunde oder nicht ist ziemlich egal. Es geht nur ums Kaufverhalten. Das wird auch bei ebay so gehandhabt. Wenn ein Benutzer sich dieses und jenes anschaut und das eine kauft und ein anderer Kunde ein vergleichbares Verhalten aufweist dann können beide als gleich betrachtet werden.


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Mackerlama
myCSharp.de - Member



Dabei seit:
Beiträge: 118
Herkunft: Thüringen

Themenstarter:

beantworten | zitieren | melden

Den Ansatz über den Kunden zu gehen, hatte ich auch schon in Erwägung gezogen. Aber erlich gesagt nicht weiter in diese Richtung agiert. Ich habe einfach nicht abstrakt genug gedacht.
private Nachricht | Beiträge des Benutzers