Problem bei Aktienkursprognose

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.
Blu3Scr33n
Posts: 7
Joined: Fri 5. Oct 2012, 16:27

Problem bei Aktienkursprognose

Post by Blu3Scr33n »

Hallo Forums-Mitglieder,

mein erster Post und gleich ein Problem ;-)

Ich habe versucht ein NN zu trainieren, dass mir die Tageshöchst- und -tiefskurse von Aktien prognostizieren soll. Simples 3-Layer MLP mit 3 Inputs und 2 Outputs (5 Hidden Neuronen).

Mit Hilfe des Skriptes von Herrn Jetter (danke an dieser Stelle) lies sich das Training un die Auswertung auch super automatisieren.
Allerdings sind die prognostizierten Werte nicht zu gebrauchen. In der ersten Sekunde sieht alles noch super aus. Der Net Error Graph geht wunderbar runter und rote Target und blaue Current-Linie liegen wunderbar übereinander. Doch dann schießt der Error Graph wieder in die Höhe und die prezise Prognose ist dahin.
Kann mir vielleicht jemand sagen, was ich falsch gemacht habe?
Anhänge mit dabei.
Falls ich etwas vergessen habe, liefere ich es gerne nach.

Für Tipps und Ratschläge bin ich dankbar.
Beste Grüße,

Euer Blu3Scr33n
Attachments
1 NN.mbn
(3.47 KiB) Downloaded 798 times
Pattern Error Viewer.JPG
(63.76 KiB) Not downloaded yet
Net Error Graph.JPG
(35.35 KiB) Not downloaded yet
Blu3Scr33n
Posts: 7
Joined: Fri 5. Oct 2012, 16:27

Re: Problem bei Aktienkursprognose

Post by Blu3Scr33n »

Hier noch die zugrunde liegenden Daten.
Attachments
Validierung.mbl
(8.1 KiB) Downloaded 816 times
Training.mbl
(31.66 KiB) Downloaded 800 times
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Problem bei Aktienkursprognose

Post by Admin »

Hallo und herzlich Willkommen im Forum!

Folgendes Problem:
In der Validierungsdatei ist die Spalte 'Handelsvolumen' mit dem Faktor 1000000 größer skaliert als in der Trainingsdatei. Deshalb lassen sich aus den Trainingsmuster keine passenden Regeln für die Validierung ableiten, die Validierung ist dementsprechend konsequenterweise eine Katastrophe ;)

Habe im Anhang mal die korrigierte Validierungslesson beigefügt, dort ist die Spalte 'Handelsvolumen' nun in Einheiten 'Millionen' wie bei der Trainingsdatei gehalten. Dann klappt es auch mit der Validierung.
Im Netz muss natürlich dementsprechend auch die Normalisierungseinstellung des Inputneurons 'Handelsvolumen' angepasst werden, korrigiertes Netz findet sich ebenfalls im Anhang.

Viele Grüße und viel Erfolg!
Attachments
1 NN_TJ_2.mbn
Netz mit korrigierter Normalisierung 'Handelsvolumen'
(3.47 KiB) Downloaded 828 times
Validierung_TJ.mbl
Validierung mit korrigierter Skalierung 'Handelsvolumen'
(8.1 KiB) Downloaded 781 times
Thomas Jetter
Blu3Scr33n
Posts: 7
Joined: Fri 5. Oct 2012, 16:27

Re: Problem bei Aktienkursprognose

Post by Blu3Scr33n »

Hallo Herr Jetter,

danke für die Hilfe und für den Hinweis auf meine Unachtsamkeit.
Ich habe jetzt beide Varianten (in abgekürzter Millionen-Schreibweise und in ausgeschriebenen Zahlen) getestet und komme mit der zweiten Variante zu besseren Ergebnissen.

Meine Frage ist jetzt. Nachdem das Netz erfolgreich trainiert und validiert worden ist, würde ich das Netz gerne auf die freie Welt loslassen und auf einen dritten Datensatz (Testdatensatz) anwenden. Wie bekomme ich es hin, dass mir Membrain die Regressionsformel ausspuckt, mit der ich weitere Daten auf Grundlage der Prognose berechnen kann? Ich habe nämlich auch aus verschiedenen wissenschaftlichen Papern, dass man den Datensatz in 3 Teile teilt (meist in der Größe 70%, 15%, 15%)

Weitere Fragen, die sich ergeben haben:
- Mein Netz ist ein simples Feed-Forward Net ohne Backpropagation. Im Teacher Manager ist allerdings von mir eingestellt BP mit vollem loop support (Was die besten Ergebnisse auswirft). Kann mir jemand erklären warum das so ist oder habe ich grade einen Denkfehler und mein Netz ist doch mit Backpropagation?
- Mit "Start Teacher" kann ich das Netz trainieren lassen. Was passiert allerdings, wenn ich auf "Start Thinking" klicke?
- Würde es Sinn machen, wenn ich die Daten der Tageshöchst- und -tiefstpreise des Vortages als Inputneuronen definiere oder besteht dann die Gefahr, dass das Netz zu stark auswendig lernt?
- Ich wollte das Netz im Nachhinein in sofern verändern, dass ich überprüfe, ob die Ergebnisse noch besser werden, wenn ich Hidden Neuronen hinzufüge (Ich hatte an 5-9 HN gedacht). Macht das Sinn und macht es evtl. auch Sinn weniger HN zu benutzen?

Beste Grüße,

Blu3Scr33n
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Problem bei Aktienkursprognose

Post by Admin »

Hallo,
Blu3Scr33n wrote:Ich habe jetzt beide Varianten (in abgekürzter Millionen-Schreibweise und in ausgeschriebenen Zahlen) getestet und komme mit der zweiten Variante zu besseren Ergebnissen.
Versuchen Sie doch auch einmal 'LOGISTIC' als Aktivierungsfunktion bei den Hidden- und Outputneuronen. Ich mache damit meist bessere Erfahrungen als mit TAN-HYP, insbesondere, wenn die Daten alle das selbe Vorzeichen haben.
Blu3Scr33n wrote:Wie bekomme ich es hin, dass mir Membrain die Regressionsformel ausspuckt, mit der ich weitere Daten auf Grundlage der Prognose berechnen kann?
Gar nicht. Der Grund dafür liegt im Prinzip: MemBrain ermittelt keine kompakte 'Formel', sondern berechnet die Outputs aus den Inputs über die Neuronen und die Links, die Sie auf dem Bildschirm sehen. Das Ganze über Berechnungsvorschriften für jedes Neuron, wie Sie sie in der MemBrain Hilfe (F1) finden können, im Abschnitt 'Neurons in MemBrain' - 'Neuron Model and Operation'. Gut ist auch der Hilfe-Einstieg über den Abschnitt 'Neural Networks'.
Generell möchte ich Ihnen ans Herz legen, sich einmal grob durch die Hilfe zu lesen, anhand der Registerkarte 'Inhalt'. Ich weiß, das ist etwas mühsam, aber die Hilfe ist bewusst so gestaltet, dass sie nicht nur Alibi-Funktion hat, es steht tatsächlich sehr viel drin ;-)

Wenn Sie das Netz nutzen wollen, um Berechnungen durchzuführen, haben Sie generell vier Möglichkeiten:
- Manuell durch Klicks in MemBrain (im Wesentlichen Buttons des Lesson Editors)
- Über Skripte (wie im Beispiel-Skript für Training und Validierung viewtopic.php?f=13&t=232, ich denke, das haben Sie bereits erfolgreich eingesetzt, oder?
- Über die MemBrain DLL, die Sie in eigene Software einbinden können, so dass sie MemBrain quasi 'unsichtbar' in Ihrer eigenen Software zur Verfügung haben
- In dem Sie C-Quellcode in Ihre eigene Software einbinden, den Sie aus Ihrem Netz mittels MemBrain generieren.
Blu3Scr33n wrote:- Mein Netz ist ein simples Feed-Forward Net ohne Backpropagation. Im Teacher Manager ist allerdings von mir eingestellt BP mit vollem loop support (Was die besten Ergebnisse auswirft). Kann mir jemand erklären warum das so ist oder habe ich grade einen Denkfehler und mein Netz ist doch mit Backpropagation?
Hier verwechseln Sie zwei Begriffe: 'Backpropagation' ist der grundsätzliche Lernalgorithmus, der verwendet wird, um ein Netz zu trainieren (typischerweise ein solches simples Feed-Forward Netz, das sie benutzen). Dass der Teacher (= Lernalgorithmus) auch sogenannte 'Loopbacks' im Netz unterstützt (= Rückkopplungslinks), ist eine andere Sache. Der Teacher unterstützt diese Links zwar, das Netz muss aber keine solchen enthalten.
Im Übrigen würde ich Ihnen den Teacher 'RPROP' mit Default-Einstellungen empfehlen, dieser liefert in aller Regel die besten Ergebnisse. RPROP sollte bei einer MemBrain Neuinstallation eigentlich als Default eingestellt sein, ich vermute, Sie haben bewusst etwas anderes eingestellt. Darf ich fragen, warum? Ich frage deshalb, weil das häufig vorkommt, und ich noch nicht herausgefunden habe, warum das so viele Benutzer tun...
Blu3Scr33n wrote:- Mit "Start Teacher" kann ich das Netz trainieren lassen. Was passiert allerdings, wenn ich auf "Start Thinking" klicke?
MemBrain beginnt dann, selbsttätig und permanent, sogenannte 'Think Steps' ablaufen zu lassen. Ein Think Step ist ein Rechenschritt des Netzes, d.h., eine einmalige Berechnung des Outputs aus den Inputs.
Bei Ihrem zeitunabhängigen Netz hat diese Funktion keine Bedeutung: Ihre Outputs ändern sich nach dem ersten Think Step nicht mehr, da sie ausschließlich von den (konstanten) inputs abhängen.
Das ist bei Netzen mit Rückkopplungslinks und anderen zeitanhängigen Elementen anders. Wenn Sie die Sache interessiert, dann schlage ich vor sich die Netzbeispiele von der MemBrain Homepage herunterzuladen und der Hilfe-Datei darin zu folgen: Eines dieser Beispiele zeigt die Funktion sehr schön an einem chaotischen Netz.
Blu3Scr33n wrote:- Würde es Sinn machen, wenn ich die Daten der Tageshöchst- und -tiefstpreise des Vortages als Inputneuronen definiere oder besteht dann die Gefahr, dass das Netz zu stark auswendig lernt?
Das könnte sehr viel Sinn machen, ja. Ich würde sogar sagen, dass die Daten mehrerer Vortage Sinn machen könnten. Der Ansatz, diese als weitere Inputs hinzuzunehmen, ist zwar der aufwändigste, was die Datenaufbereitung angeht, ist aber der einfachste, was das Handling des Netzes angeht. Eine Alternative wäre ein zeitabhängiges Netz. Die Netzbeispiele der MemBrain Homepage zeigen ein zeitabhängiges Netz am Beispiel der Mackey-Glass Zeitreihe. Zeitabhängige Netze haben es allerdings 'in sich', was das Handling und das Training angeht, da kann man viel falsch machen. Für erste Versuche würde ich wie gesagt empfehlen, die Daten einiger Vortage als zusätzliche Netz-Inputs aufzunehmen.
Blu3Scr33n wrote:- Ich wollte das Netz im Nachhinein in sofern verändern, dass ich überprüfe, ob die Ergebnisse noch besser werden, wenn ich Hidden Neuronen hinzufüge (Ich hatte an 5-9 HN gedacht). Macht das Sinn und macht es evtl. auch Sinn weniger HN zu benutzen?
Solche Versuche machen absolut Sinn, ja. Allerdings erst, wenn die Sache grob funktioniert, also quasi als 'Feintuning'. Meine Erfahrungen aus mittlerweile sehr vielen Prohejten zeigen, dass die Architektur des Netzes bzgl. der Anzahl der Hidden-Neuronen um ein Vielfaches unwichtiger ist, als die Qualität der Daten selbst (und ihre Auswahl).
Also erst schauen, welche Daten die besten Ergebnisse bringen, dann am Netz optimieren.

Viele Grüße und viel Erfolg!
Thomas Jetter
Blu3Scr33n
Posts: 7
Joined: Fri 5. Oct 2012, 16:27

Re: Problem bei Aktienkursprognose

Post by Blu3Scr33n »

Hallo Herr Jetter,

danke für Ihre umfangreichen Erläuterungen, die es einem Anfänger wie mir unheimlich erleichtern ;-)
Admin wrote:Versuchen Sie doch auch einmal 'LOGISTIC' als Aktivierungsfunktion bei den Hidden- und Outputneuronen. Ich mache damit meist bessere Erfahrungen als mit TAN-HYP, insbesondere, wenn die Daten alle das selbe Vorzeichen haben.
Das werde ich sehr gerne tun und meine Erkenntnisse hier schildern.
Admin wrote: Ich weiß, das ist etwas mühsam, aber die Hilfe ist bewusst so gestaltet, dass sie nicht nur Alibi-Funktion hat, es steht tatsächlich sehr viel drin ;-)
Ich muss gestehen, dass ich die Hilfe in diesem Programm sehr gut finde (im Gegensatz zu den meisten anderen Programmen)
Admin wrote: Der Grund dafür liegt im Prinzip: MemBrain ermittelt keine kompakte 'Formel', sondern berechnet die Outputs aus den Inputs über die Neuronen und die Links, die Sie auf dem Bildschirm sehen.
Wenn ich das richtig verstehe, dann kann ich quasi meinen gewünschten Output vom dritten Datensatz als Validierungsdatei definiere und die vorherige Validierungsdatei an die Trainingsdatei anhänge, um das Netz zu trainieren?
Admin wrote: - Über Skripte (wie im Beispiel-Skript für Training und Validierung viewtopic.php?f=13&t=232, ich denke, das haben Sie bereits erfolgreich eingesetzt, oder?
Sehr erfolgreich sogar. Das hat unheimlich viel Zeit gespart. Mal wieder ein herzliches Danke an Sie für das Schreiben des Skripts (Super auskommentiert)
Admin wrote: Darf ich fragen, warum? Ich frage deshalb, weil das häufig vorkommt, und ich noch nicht herausgefunden habe, warum das so viele Benutzer tun...
Natürlich dürfen Sie ;-) Ich hatte ursprünglich mit dem RPROP gearbeitet. Als ich den Output des Netzes gesehen hatte, wollte ich ausprobieren, ob ich durch Veränderung der Einstellungen ein noch besseres Ergebnis erziele. Oftmals ist es auch so gekommen. Allerdings habe ich heute erneut einige Netze getestet. Diese sind mit RPROP besser gelaufen. Ich werde das nochmal gegenchecken. Allgemein (um Ihre Frage zu beantworten) habe ich aus Neugier an den Einstellungen Veränderungen vorgenommen, um zu schauen, ob es zu signifikant besseren Ergebnissen kommen würde.
Admin wrote: Wenn Sie die Sache interessiert, dann schlage ich vor sich die Netzbeispiele von der MemBrain Homepage herunterzuladen und der Hilfe-Datei darin zu folgen: Eines dieser Beispiele zeigt die Funktion sehr schön an einem chaotischen Netz.
Danke, dass werde ich tun.
Admin wrote:Eine Alternative wäre ein zeitabhängiges Netz.
Danke für die Erläuterung. Wenn ich mit Membrain noch firmer bin, werde ich mich mit den zeitabhängigen Netzen beschäftigen. Momentan, um meine Auswertung voranzutreiben, bleibe ich vorerst bei den Zeitinvariaten Netzen.
Admin wrote:Für erste Versuche würde ich wie gesagt empfehlen, die Daten einiger Vortage als zusätzliche Netz-Inputs aufzunehmen.
Diesbezüglich bereite ich grade die Daten auf. Danke für den Zuspruch.
Admin wrote:Meine Erfahrungen aus mittlerweile sehr vielen Prohejten zeigen, dass die Architektur des Netzes bzgl. der Anzahl der Hidden-Neuronen um ein Vielfaches unwichtiger ist, als die Qualität der Daten selbst (und ihre Auswahl).
Das kann ich jetzt schon nach kurzer Zeit bestätigen. Gemessen am Net Error gibt es keine signifikanten Unterschiede (von 1 HN bis hoch zu 9HN)
Admin wrote:Viele Grüße und viel Erfolg!
Danke und beste Grüße zurück,

Blu3Scr33n
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Problem bei Aktienkursprognose

Post by Admin »

Blu3Scr33n wrote:Wenn ich das richtig verstehe, dann kann ich quasi meinen gewünschten Output vom dritten Datensatz als Validierungsdatei definiere und die vorherige Validierungsdatei an die Trainingsdatei anhänge, um das Netz zu trainieren?
Genau so würde ich es machen, ja. Das vergrößert die Anzahl an Trainingsmustern und verbessert dadurch die Basis für das Training.

Viele Grüße
Thomas Jetter
lightning
Posts: 5
Joined: Sat 18. Aug 2012, 00:24

Re: Problem bei Aktienkursprognose

Post by lightning »

Ich habe das hier kurz überflogen und den letzten Punkt finde ich sehr interessant. Ist es wirklich der Fall, dass eine größere Anzahl an Trainingsmustern die Basis für das Training verbessert? Gibt es nicht irgendwann einen Punkt an dem man das Netz auch (ich entschuldige mich für den vielleicht nicht fachmännischen Ausdruck) „überstrapaziert“? Hängt möglicherweise auch die Netzstruktur von der zur Verfügung stehen Datenmenge ab? Ich meine damit speziell bei einem Feedforward-Netz z.B. die Hidden-Layer Schicht bzw. deren Neuronen-Anzahl.

Ich habe bisher die Erfahrung gemacht, dass bei größerer Anzahl an Hidden-Layer-Neuronen zwar der Fehler im Trainingsdatensatz verkleinert wird, aber die Prognose für den Validierungsdatensatz verschlechtert sich. Ich gehe davon aus, dass bei größerer Anzahl Hidden-Layer-Neuronen die Generalisierung der Zusammenhänge abnimmt und das „Auswendiglernen“ der Trainingsmuster zunimmt. Als ich dann die Trainingsdatenbasis aufgestockt habe, ist zwar der Trainingsfehler wieder angestiegen, jedoch hat sich die Prognose für die Validierungsdaten wieder deutlich verbessert.

Teilt diese Beobachtung jemand, oder gibt es „Faustregeln“ für die nötige Anzahl von Trainingsdatensätzen bei entsprechender Hidden-Layer Schicht?

Zudem wurde ja bereits angesprochen, dass die Gefahr des „Auswendiglernens“ besteht, wenn man Daten im Input verwendet, die nahe an den Outputs liegen. Mich würde interessieren, ob die Anzahl der Trainingsläufe ebenfalls ausschlaggebend sein kann für ein übermäßiges Auswendiglernen des Netzes? D.h. wann ist es sinnvoll den Trainingsvorgang abzubrechen? Ich frage deshalb, da ich mit der DLL für Java ein Script erstellt habe, das mehrere Netze der selben Struktur erstellt, dann aber unterschiedlich weit trainiert und das endgültige Ergebnis dann als Mittelwert der unterschiedlich trainierten Netze ausgibt. Ist so etwas generell sinnvoll?
(Btw. Die 64-Bit DLL funktioniert hervorragend! Vielen Dank noch mal! :) )

@Blu3Scr33n
Ich verfolge das selbe Ziel, also die Prognose von Tageshöchst- und Tiefstkursen. Haben Sie mal versucht mit verschiedenen technischen Indikatoren als zusätzliche Inputs zu arbeiten, die sich auf Vergangenheitswerte beziehen? Beispielsweise einen Moving Average? Mich würde es nämlich sehr wundern wenn Sie allein auf der Grundlage der historischen Daten ein aussagekräftiges Ergebnis erzielen. Haben Sie schon Erfolge erzielt?
Blu3Scr33n
Posts: 7
Joined: Fri 5. Oct 2012, 16:27

Re: Problem bei Aktienkursprognose

Post by Blu3Scr33n »

Hallo Lightning,
lightning wrote:Gibt es nicht irgendwann einen Punkt an dem man das Netz auch (ich entschuldige mich für den vielleicht nicht fachmännischen Ausdruck) „überstrapaziert“? Hängt möglicherweise auch die Netzstruktur von der zur Verfügung stehen Datenmenge ab?
Ich würde sagen, dass die "Überstrapazierung" mit der Gefahr des Overfittings also des Auswendigslernens zusammenhängt. Ich bin der Meinung mal gelesen zu haben dass wenn der Net Error in der Validierungsdatei wieder permanent ansteigt, während der Validierung, dann hat das Netz den Trainingsdatensatz auswendig gelernt und generalisiert schlecht. (Berichtigt mich bitte jemand, falls ich doch was Falsches von mir gebe?)
lightning wrote:Teilt diese Beobachtung jemand, oder gibt es „Faustregeln“ für die nötige Anzahl von Trainingsdatensätzen bei entsprechender Hidden-Layer Schicht?
Meines Wissens gibt es solche Regeln nicht (zumindest sind sie mir nicht untergekommen). In meinem Projekt haben die Hiddenneuronen teils eine sehr geringe Auswirkung auf die Verbesserung/Verschlechterung des Ergebnisses. Da kann ich Ihre Aussage nicht bestätigen, möchte sie aber nicht zu 100% widerlegen.
lightning wrote:Ich frage deshalb, da ich mit der DLL für Java ein Script erstellt habe, das mehrere Netze der selben Struktur erstellt, dann aber unterschiedlich weit trainiert und das endgültige Ergebnis dann als Mittelwert der unterschiedlich trainierten Netze ausgibt. Ist so etwas generell sinnvoll?

Ich würde vorher einen anderen Weg wählen. Schauen Sie sich mal das Skript von Seppy an:
viewtopic.php?f=13&t=28
Das misst die Zeit, die das Netz braucht, um den minimalen Net Error zu erreichen. Dieses Skript sollte man mehrfach für ein Netz durchlaufen lassen. Wenn Sie das getan haben, dann können Sie die Laufzeit in Ihr Skript einbauen und dieses mehrfach durchlaufen lassen und daraus einen Durchschnitt bilden.

lightning wrote:Mich würde es nämlich sehr wundern wenn Sie allein auf der Grundlage der historischen Daten ein aussagekräftiges Ergebnis erzielen. Haben Sie schon Erfolge erzielt?
Hatte ich auch kurzzeitig überlegt und erstmal wieder verworfen, da ich die reine Wirkung der Basisdaten auf die Hoch- und Tiefkurse analysieren wollte.
Zu meinen Ergebnissen: Bisher kann ich mich nicht beschweren. Eins meiner besten Netze produziert einen Neterror von 0,00006. Mein Mean Percentage Error liegt bei knapp 1%.
Falls Sie noch bessere Ergebnisse erzielt haben, würde ich mich freuen, wenn wir uns austauschen könnten. Mich würde dann im Speziellen interessieren, welche Indikatoren Sie benutzt haben (Bollinger Band, TMA, etc)

Beste Grüße,

Blu3Scr33n
lightning
Posts: 5
Joined: Sat 18. Aug 2012, 00:24

Re: Problem bei Aktienkursprognose

Post by lightning »

Ich danke Ihnen für Ihre Antwort.
Ihre Ergebnisse sind in der Tat sehr gut. Ich komme etwa in einen ähnlichen Bereich je nach Struktur und Daten die ich verwende. Z.Z. experimentiere ich mit verschiedensten Indikatoren, die meiner Ansicht nach Sinn ergeben. Einen Oscillator z.B. halte ich für unsere Zwecke eher nicht für angebracht. Daher sammle ich primär Daten über EMA und BollingerBands die ich je nach belieben etwas anpasse und neue Versuche starte. Ich werde es jetzt auch mal ganz ohne versuchen und schauen wie sich die Ergebnisse ändern. Im Moment habe ich leider nur sehr wenig Zeit, aber ich versuche den ein oder anderen Test in den nächsten Tagen und Wochen durchführen zu können.
Post Reply