Punktprognose

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
Post Reply
jkone
Posts: 1
Joined: Sat 29. Jun 2013, 13:14

Punktprognose

Post by jkone »

Hallo an alle!

Ich habe folgendes Projekt für die Uni, bei dem ich im Moment erhebliche Schwierigkeiten habe:
Die Aufgabe besteht darin eine Vorhersage der Nachfrage nach einem bestimmten Produkt mit neuronalen Netzen zu prognostizieren.

Folgendes Szenario habe ich mir überlegt:
Angenommen ich habe Daten über den Absatz eines Produktes X über die letzten zehn Jahre für jeden Monat (01/2004-12/2013), also insgesamt 120 Daten.
Ziel ist die Prognose für 12/2013.

Folgendes Vorgehen habe ich mir überlegt:
Als Input verwende ich die Monate Jan bis Nov und als Output immer den Dezember, d.h. 11 Muster zum lernen.
Im letzten Jahr gebe ich dann den Input vor und lasse das Netz den Output für 12/2013 berechnen. Die Daten für 12/2013 habe ich natürlich vorliegen, sodass
ich den Fehler der Vorhersage berechnen kann. Damit kann ich dann die Qualität gegenüber anderen Vorhersagemethoden bewerten.

Meine Fragen bzw. Probleme sind:
1. Macht das Szenario so überhaupt Sinn? Sind das zu wenige Daten oder eher zu viele? Ich kann es nicht einschätzen, weil mir die Erfahrung fehlt.
2. Als Architektur habe ich mir ein MLP überlegt mit einem hidden layer. Mich hat dabei ziemlich verwirrt, ob ich eine zeitabhängige Simulation durchführen muss? Eigentlich hätte ich gedacht ein einfaches MLP reicht.
3. Nachdem ich ein MLP gebaut habe, konnte ich mit den Daten den Trainer nicht starten, weil sie out of range waren (meine Daten liegen zwischen 30 und 70). Ich glaube es liegt daran, dass man nur Zahlen zwischen 0 und 1 eintragen kann und die Normalization verstehe ich nicht so genau.
4. Brauche ich 11 Input (Jan-Nov) Neuronen? Ansonsten müsste ich ja eigentlich einen Vektor an Daten in die Inputneuronen eingeben. Außerdem ist mir nicht klar welche Funktion ich bei Inputneuronen einstellen soll.

Meine Bitte nun an euch: Sind in dem Model krasse Denkfehler drin oder müsste das so oder so ähnlich funktionieren. Ansonsten wäre ich sehr dankbar, wenn mir jemand sagt wo ich anfangen soll und vor allem wie.

Vielen Dank für eure Hilfe :D
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Punktprognose

Post by TJetter »

Hallo,
jkone wrote:1. Macht das Szenario so überhaupt Sinn? Sind das zu wenige Daten oder eher zu viele? Ich kann es nicht einschätzen, weil mir die Erfahrung fehlt.
Man wird die Qualität des Netzes natürlich nicht nur anhand eines einzigen Validierungspunkts festmachen können. Das Netz könnte diesen Punkt ja zufällig gut bzw. schlecht treffen. Eine Aussage bzgl. der Qualität von NN muss immer eine statistische sein.
D.h., man kann natürlich zu Versuchszwecken mehrere Datenpunkte aus der Vergangenheit aus dem Trainingssatz entfernen und zur Validierung heranziehen. Fällt das akzeptabel aus, kann man das Netz mit allem was man hat außer dem letzten Datenpunkt trainieren und so die Wahrscheinlichkeit einer guten Prognose maximieren.
jkone wrote:2. Als Architektur habe ich mir ein MLP überlegt mit einem hidden layer. Mich hat dabei ziemlich verwirrt, ob ich eine zeitabhängige Simulation durchführen muss? Eigentlich hätte ich gedacht ein einfaches MLP reicht.
Eine zeitabhängige Simulation muss nicht sein, denke ich. Beginnen würde ich auf jeden Fall ohne Zeitabhängigkeit.
jkone wrote:3. Nachdem ich ein MLP gebaut habe, konnte ich mit den Daten den Trainer nicht starten, weil sie out of range waren (meine Daten liegen zwischen 30 und 70). Ich glaube es liegt daran, dass man nur Zahlen zwischen 0 und 1 eintragen kann und die Normalization verstehe ich nicht so genau.
Die 'Normalization' ist nichts anderes als ein benutzerspezifischer Wertebereich für jedes Input- und Output Neuron. Also einfach die Normalization bei den betreffenden Neuronen aktivieren und die gewünschten Grenzen eingeben.
Bei den Output-Neuronen sollte man in jedem Fall etwas 'Luft lassen' Wenn die Werte also zwischen 30 und 70 erwartet werden, dann würde ich 20 und 80 als Grenzen nehmen. Bei Input-Neuronen kann man bis ganz an die bekannten Wertegrenzen gehen. Das hängt damit zusammen, dass Input-Neuronen immer eine lineare Aktivierungsfunktion haben, Output-Neuronen aber ihre eingestellten Grenzwerte nie wirklich erreichen können (nur asymptotisch).
jkone wrote:4. Brauche ich 11 Input (Jan-Nov) Neuronen? Ansonsten müsste ich ja eigentlich einen Vektor an Daten in die Inputneuronen eingeben. Außerdem ist mir nicht klar welche Funktion ich bei Inputneuronen einstellen soll.
Wenn überhaupt, dann wären es 13 Input-Neuronen, nämlich 12 für die Monate und eines für das Jahr. Denn aus der Vergangenheit gibt es ja auch Werte für den Dezember, oder? Also kann man diesen als Input ja nicht weglassen. Außerdem muss für die Zielprognose ja auch der Dezember angelegt werden.
Allerdings ist dieser Ansatz nicht allzu gut:
Bei der Datenkodierung sollte man physikalisch zyklische Werte immer auch als solche im Netz-Input abbilden. Ein Jahresverlauf (genauso wie eine Tageszeit übrigens) ist ein solcher zyklischer Verlauf. Dass er von 1 bis 12 angegeben wird und dann wieder auf 1 springt, können wir zwar kognitiv problemlos verarbeiten, aber für ein NN ist das eine sehr ungünstige Kodierung: So liegt der Januar zahlenmäßig weitestmöglich vom Dezember weg, was ja nun ganz und gar nicht der physikalischen Realität entspricht.
Deshalb sollte man solche Dinge sinusförmig kodieren. Damit man dann noch den März vom September unterscheiden kann, sollte man zwei Input-Neuronen vorsehen, eines mit dem Sinus des Monats und eines mit dem Cosinus (und beide natürlich mit der Periode 12). So ist der der Monat als Punkt auf einem Kreisumfang definiert, was ideal der physikalischen Realität entspricht.
Das Jahr könnte man nun entweder direkt als Input-Neuron mit dem entsprechenden Wertebereich definieren. Oder aber man unterteilt die Zeitspanne der vergangenen Jahre in eine lineare Monatsskala und zählt auf dieser mit jedem Monat einen Schritt hoch. So hat man nicht wieder einen großen Sprung zwischen zwei Jahren (der ja physikalisch bzw. in seiner Auswirkung auf den Absatz keine Bedeutung hat).

Dann mal viel Erfolg und Grüße
Thomas Jetter
Post Reply