Zeitreihen

Sie sind sich nicht sicher, in welches Forum Ihre Frage oder Ihr Anliegen passt?
Möchten Sie ein neues Forum vorschlagen? Möchten Sie Kritik am Forum selbst üben?

Dann posten Sie bitte hier.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Zeitreihen

Post by Admin »

Seppy wrote:Was bewirken überhaupt die DECAYS ?
Die Decay-Neuronen wirken wie Tiefpässe. Sagt Dir das was? D.h., sie folgen Änderungen des Eingangssignals nicht ruckartig, sondern mit Verzögerung, sie 'verschleifen' das Signal. Damit tun sie zwei Dinge:
1.) Sie lassen nur tiefere Frequenzen des Eingangssignals durch. Damit erhält man am Ausgang des Neurons ein Signal, dass nicht so startk 'flattert'. Das Ausgangssignal repräsentiert damit langsamere/längerfristige Änderungen des Eingangssignals. Ich könnte mir denken, dass das bei Börsenkursen auch wichtig sein kann.
2.) Die Aktivität des Decay-Neurons bzw. sein Ausgangssignal repräsentiert durch dieses 'Hinterherhinken' ein Stück Vergangenheit seines Eingangssignals. Stell Dir z.B. ein Sinussignal am Eingang des Neurons vor: Y = sin (x). Am Ausgang des Decay-Neurons erscheint das Signal abgeschwächt und vor allem phasenverschoben, also als Y' = K * sin (x - Phi). K (immer < 1) und Phi sind dabei abhängig von der Frequenz des EIngangssignals: Je höher die Frequenz, umso kleiner ist K, das ist die Amplitudenabschwächung des Tiefpasses. Außerdem steigt Phi mit steigender Frequenz, das ist die Phasenverschiebung des Signals. Gleiche Wirkung hat eine Erhöhung des 'Activation Sustain Factors' des Neurons, wobei das Gewicht des eingangsseitigen Links immer (1 - Activation Sustain Factor sein muss).

Stell Dir vor, ein Netz soll immer den nächsten Wert der Sinusfunktion vorhersagen. Mit einem zeitinvarianten Netz geht das nicht. Soll heißen, aus einem einzigen Momentanwert des Sinus kann man den nächsten Wert nicht bestimmen, da man nie weiß, ob man sich gerade auf dem aufsteigenden 'Ast' des Sinus befindet oder auf dem absteigenden. Ein Decay-Neuron fügt dem Momentanwert jetzt noch einen phasenverschobenen Wert hinzu. Aus diesen beiden Informationen kann man erkennen, ob das Signal gerade steigt oder nicht. So kann ein Netz z.B. den Sinus erlernen.

War das halbwegs verständlich?

Grüße,
Thomas
Thomas Jetter
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Zeitreihen

Post by Seppy »

Absatz 1+3 waren sehr verständlich, 2 war eine Idee zu hoch für mei Brain !?!?
Hab aber verstanden was sie macht.
Was ist besser, Delay+Decay oder nur eine davon; welche; oder selbst ausprobieren ?
Hab meinen Input jetzt auf die letzten 5 Jahre reduziert, sonst dauert das lernen vieeel zu lang, oder ich besorg mir eine von hier:
http://www.cray.com
dann müsste aber erst das Netz funktionieren um € zu machen.
Und jetzt hat sich die Katze in den Schwanz gebissen, aber ich bleib dran...
Die Ergebnissen kommen sobald ich passende habe, z.Z. probier ich mehr oder weniger PLANLOS verschiedene Netze aus.
Seppy
Wer arbeitet macht Fehler, wer wenig arbeitet macht wenig Fehler, wer nicht arbeitet macht keine Fehler, wer keine Fehler macht wird befördert.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Zeitreihen

Post by Admin »

Ich denke, Du solltest beides einbauen: Ein paar Delay-Neuronen zu jedem Eingangsneuron, die die letzten Zeitpunkte jedes Eingangs repräsentieren, um Regeln für kurzfristige Änderungen zu trainieren. Evtl. auch noch ein Differenzneuron zwischen jedem Eingang und seiner ersten Verzögerung (die mit dem Delay-Link der Länge 2). Das bringt eine Ableitung in die Daten rein, d.h., ein Maß für die Höhe der allerletzten Veränderung.
Und dann noch ein paar Decay-Neuronen mit unterschiedlicher Pareametrierung, die die langsameren Frequenzen abbilden. Diese bilden so eine Art gleitenden Mittelwert mit unterschiedlicher Mittelungsdauer. Damit kriegst Du die Repräsentation der langsamen Änderungen als Daten ins Netz.

Dann musst Du natürlich wissen, dass Du Dir generell mit Börsenkursen das schwiergste Problem überhaupt herausgesucht hast. Es gibt so viele Dinge, von denen die Kurse abhängen, die kriegst Du niemals alle als Eingangdaten ins Netz. Das bedeutet, dass wenn Dein Netz überhaupt Regeln finden kann, dann werden diese immer nur zeitweilig von Gültigkeit sein. Immer wieder wird der Kurs aber von ganz anderen Dingen abhängen. Ich bin alles andere als ein Finanzexperte, deshalb entbehrt meine Einschätzung hier jeder fachlichen Grundlage. Ich bin mir aber trotzdem sehr sicher... ;)

Du wirst also ungeheuer viel Geduld aufbringen müssen und probieren, probieren, probieren... Und selbst dann ist der Ausgang völlig ungewiss. Es ist schlicht und einfach eine Frage, wie viele Regeln in Deinen Daten tatsächlich stecken bzw. wie viele andere, unbekannte EInflüsse noch da mit reinspielen.

Grüße,
Thomas
Thomas Jetter
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Zeitreihen

Post by Admin »

Hallo Seppy,

noch was: Nimm erst kleinere Zeitreihen und versuche, ein Netz aufzubauen, das damit halbwegs klarkommt. Sonst dauert Dein Training viel zu lange. Du musst später ja auch Dein Netz auf immer wieder weitere Daten umtrainieren, weil sich Kurse ja permanent verändern und mit Ihrnen die Regeln, die dahinterstecken. Ich würde mich also eher auf etwas kürzere Datensätze konzentrieren, um damit schneller Ergebnisse während Deiner Testphasen zu erhalten.
So kannst Du schneller mehrere Netzvarianten testen.
Thomas Jetter
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Zeitreihen

Post by Seppy »

Hallo Thomas,
Ich bin auch kein Finanzexperte, mir ist auch klar, daß Kurse nur sehr schlecht, wenn überhaupt, vorherzusagen sind.
Aber wer weiß schon was in einem NN so abgeht, vielleicht funktioniert's ja doch irgendwann.
Und man möchte doch SOOOOO gerne Reich werden....
Danke für Deine Tips, ich werd's damit und mit Varianten davon mal weiter probieren.
Input hab ich jetzt auf 1 Jahr gekürzt, damit läuft's ganz zügig.
Seppy
Wer arbeitet macht Fehler, wer wenig arbeitet macht wenig Fehler, wer nicht arbeitet macht keine Fehler, wer keine Fehler macht wird befördert.
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Zeitreihen

Post by Seppy »

Hallo,
habe folgendes Problem:

Der nachfolgende Chart wurde mit den DAX Montags-Schlusskursen von 1990-2006 gelernt (Jordan-Netz).
Input=Dax, aktuelle Woche
Output=Dax, nächste Woche (t+1)

Die Validierungsdaten waren die DAX Montags-Schlusskursen von 2007-2008.
Der Output war zum Input um 1 Woche nach vorne, in die Zukunft versetzt (t+1;Wochen-Schlusskurse wie bei den Lerndaten).

Wie man sieht, ist der ganze Chart der Netz-Prognose nach vorne verschoben.
(Bei steigendem Dax darunter, bei fallendem Dax darüber).

Frage: Woran liegt's ???

Die Netz-Struktur kann's nicht sein.
Habe sehr änliche Ergebnisse mit:

Feed Forward 1 x Hidden.
Feed Forward 2 x Hidden.
Elman
Jordan
Time Delay
und SEEEHR viele Varianten davon...

Hat das Netz eine TRÄGHEIT, wie gleicht man diese aus ???
Habe auch schon versucht, in den Lerndaten den Output um 1-3 Wochen nach Vorne b.z.w. nach Hinten zu Verschieben.
(Bei den Vali-Daten macht's wohl keinen Sinn) !!!
Alles ohne Erfolg, der VERSATZ bleibt.

Der Chart selbst sieht ja nicht schlecht aus, wenn dieser VERSATZ nicht wäre.
Beim Online-Tutorial (Zeitreihen) liegen die Charts ja auch ziemlich genau übereinander, obwohl diese um t+3 versetzt sind.
Also woher kommt bei mir dieser VERSATZ ???

bitte um Hilfe, Seppy
Attachments
Chart.jpg
Chart
(159.04 KiB) Downloaded 107 times
Wer arbeitet macht Fehler, wer wenig arbeitet macht wenig Fehler, wer nicht arbeitet macht keine Fehler, wer keine Fehler macht wird befördert.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Zeitreihen

Post by Admin »

Der Chart selbst sieht ja nicht schlecht aus, wenn dieser VERSATZ nicht wäre.
Beim Online-Tutorial (Zeitreihen) liegen die Charts ja auch ziemlich genau übereinander, obwohl diese um t+3 versetzt sind.
Also woher kommt bei mir dieser VERSATZ ???
Hallo Seppy,

ich muss Dir hier leider eine (zunächst) schlechte Nachricht überbringen:
Dein Netz erlernt momentan nicht wirklich, die 'zukünftigen' Daten vorherzusagen. Das beste, was es hinbekommt, ist, den Ausgang ungefähr am Eingang zu reproduzieren. Der "Versatz" den Du erwähnst, ist gerade die Verschiebung in die Zukunft, die Dein Netz nicht in der Lage ist, zu erlernen. Das ist aber genau das, worauf es Dir ankommt. Das rührt daher, dass Dein momentanes Eingangsdatum zum Zeitpunkt t, zusammen mit den historischen Werten durch Jordan, Elman, Time Delay etc die notwendigen Regeln zur Vorhersage des jeweils nächsten Wertes f(t+1) schlicht nicht enthalten. Es sind aus Sicht des Netzes chaotische Daten. Die Regeln, die es für ein Pattern ableitet, gelten für das nächste schon nicht mehr. So tendiert das Netz letztendlich in Richtung der 'optimalen Lösung', die Übertragungsfunktion 1 nachzubilden.

Ich hab Dir mal hier ein simples 'Repeater'-Netz gepostet. Dieses Netz gibt einfach den Eingabewert am Ausgang wieder aus (normalisiert habe ich zwischen 3000 und 10000, weiß nicht, ob das auf Deine Daten passt). Die beiden Neuronen des Netzes sind mit dem fixierten Gewicht '1' verbunden, die Aktivierungsschwelle des Ausgangsneurons ist ebenfalls mit '0' fixiert. Es gibt also nichts zu trainieren an diesem Netz. Wenn Du dieses Netz einmal zum 'Training' heranziehst, dann wirst Du feststellen, dass die Ergebniskurve 'wunderschön aussieht' nur 'leider ein Versatz existiert'. Das ist der Extremfall, gegen den Dein Netz strebt, wenn Du ihm völlig chaotische EIngangsdaten präsentierst. Dadurch, dass der momentane Eingangswert immer eine 'Gute Näherung' des zukünftigen Werts darstellt, sieht alles erst einmal gar nicht so schlecht aus. Ein wirklich funktionierendes Vorhersagenetz hast Du aber erst, wenn Du eben diese Phasenverschiebung zumindest stellenweise wegbekommst. Dazu fehlen Deinem Netz offensichtlich Informationen. Diese können entweder aus der Vergangenheit der Eingangsdaten gewonnen werden (also mehr Time-Delay, mehrere Delay/Decay Neuronen mit unterschiedlichen Parameteren) oder (und das vermute ich!) müssen neue, unabhängige Eingangsparameter sein, also z.B. Kurse anderer Objekte am Markt, Tageszeit/Jahreszeit/Monatstag usw.

Was Du wahrscheinlich brauchst, sind also zusätzliche Eingangsparameter, die den Kurs beeinflussen. Evtl. solltest Du Dich auch mehr darauf konzentrieren, Konsequenzen aus den Daten zu bestimmen (z.B. kaufen, verkaufen, halten) anstatt den zukünftigen Kurs versuchen vorherzusagen.

Sorry für die schlechten Nachrichten, aber Börsenkurse sind nun mal wirklich die am schwierigsten in den Griff zu bekommenden Daten. Ich weiß bis heute nicht, ob sie wirklich nur chaotisch sind oder ob eine begrenzte Vorhersage möglich ist. Wenn ja, dann liegt der Kunstgriff in der Auswahl und Codierung der richtigen Eingangsparameter und der Wahl der richtigen 'Vergangenheitstiefe' im Netz.

Viele Grüße und lass' Dich nicht entmutigen! Du bist hier definitiv als Pionier unterewegs, soweit ich weiß, hat's mit Börsenkursen noch keiner wirklich geschafft!
Attachments
Repeater.zip
Einfaches "Output = Input"-Netz
(243 Bytes) Downloaded 872 times
Thomas Jetter
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Zeitreihen

Post by Seppy »

Hallo Thomas,
jetzt hast Du mich aber auf den Boden der Tatsachen zurückgeholt, aber ich dachte mir schon, dass hier irgendetwas nicht stimmen kann.
Vielen Dank für die ausführliche Erklärung, ich meine, ich hab jetzt kapiert worauf es ankommt.
Mit dem Repeaternetz kommt ein ziemlich gleicher Chart heraus, also KEINE Vorhersage.

Ich hatte auch vor als Input andere Daten zu verwenden, aber woher nehmen, diese sollten ja möglichst immer vom selben ZEITPUNKT stammen
(alle vom Montag oder alle vom Freitag, und dann wird's echt schwierig).

Versuche jetzt mal nur herauszufinden ob es t+1 steigt oder fällt.
Output= 0 oder 1

0 = fallender Kurs
1 = steigender Kurs

Vielleicht hab ich damit mehr Glück.

Seppy
Wer arbeitet macht Fehler, wer wenig arbeitet macht wenig Fehler, wer nicht arbeitet macht keine Fehler, wer keine Fehler macht wird befördert.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Zeitreihen

Post by Admin »

Hallo Seppy,

hast Du eigentlich schon mal über Reinforcement Learning (RL) für Dein Problem nachgedacht?

Ich bin durch diesen Thread:

viewtopic.php?f=5&t=33

mal wieder auf das Thema gestossen und habe beschlossen, mich da jetzt einmal durchzuarbeiten. Bin am Lesen und verstehe auch schon so manches... fehlt aber noch einiges, um aktiv zu werden, sprich: Etwas in SW umzusetzen.

Bei RL geht es im Kern darum, dass ein 'Agent' (agent) abhängig von seiner momentanen 'Situation' (state) eine Aktion (action) ausführt, um langfristigen Gewinn (return) zu maximieren. Dazu bekommt der Agent nach jeder Aktion einen Zwischengewinn (reward), der auch Null oder kleiner Null ('Bestrafung') sein kann. Das Prinzip passt auf eine große Zahl realer Probleme, bestimmt auch auf ein Börsen-Handels-Problem.
Der Kern des Lernprozesses dreht sich nun darum, eine Funktion zu erlernen, die den 'Wert' einer jeden Aktion in einer bestimmten Situation annähert, um so die optimale Aktion im Hinblick auf das langfristige Ziel zu wählen. Der Agent lernt dabei direkt durch Interaktion mit seiner Umgebung, man muss also nicht Unmengen von Lernbeispielen bereit halten, um den Agent lernen zu lassen. Außerdem kann ein solcher Agent auch einem veränderlichen Problem folgen (solange die Änderungen nicht zu massiv sind), da der Lernvorgang immer aktiv bleibt, wenn auch die Balance zwischen Ausprobieren (Exploration) und erlerntes Wissen nutzen (Exploitation) während des Lernvorgangs verschoben wird. Damit ist der Agent am Anfang sehr 'experiementierfreudig', um seine Umwelt kennen zu lernen. Später wählt er meist die Aktionen, von denen er vermutet, dass sie die besten sind. Ab und an wählt er aber auch noch andere Aktionen, um evtl. neues, besseres Vorgehen zu erlernen.

Neuronale Netze können dabei verwendet werden, um die erwähnte Aktions-Wertefunktion ('Action Value Function', oder auch 'Q-Function') anzunähern.

Wer weiß, vielleicht ließe sich ja so etwas über ein Skript implementieren?

Viele Grüße,
Thomas
Thomas Jetter
User avatar
Seppy
Posts: 47
Joined: Fri 5. Dec 2008, 04:48
Location: 90537 Feucht

Re: Zeitreihen

Post by Seppy »

Hallo Thomas,

das ganze sieht ja sehr interessant aus, ich würde das gerne mal ausprobieren, aber wie ?
Wie wird die SW-Lösung aussehen ?
Wird das ein eigener Teacher (Wäre super) ?
Muß man alles selbst als Script schreiben, wenn ja, wie ?

Ich analysiere z.Z. immer noch meine Inputs:
Versuche Werte zu finden, die sich bei t entweder gleich dem Output bei t+1 oder genau entgegengesetzt verhalten.

z.B.
Output bei t+1 = +0.75 %
Jetzt such ich Inputs die bei t entweder auch +0,75 % oder genau das Gegenteil -0,75 % machen.
Ist aber gar nicht so einfach, da sich die Werte ziemlich chaotisch verhalten.
Ich schraub mir da gerade eine Tabelle zusammen, die mir das ausfiltern soll.

Das mit der Datenaufbereitung hab ich erstmal auf Eis gelegt, das bringt z.Z. noch nichts.

Gruß Seppy
Wer arbeitet macht Fehler, wer wenig arbeitet macht wenig Fehler, wer nicht arbeitet macht keine Fehler, wer keine Fehler macht wird befördert.
Post Reply