Preisprognose Base an der EEX

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
Mijao
Posts: 4
Joined: Thu 5. Jul 2012, 15:15

Preisprognose Base an der EEX

Post by Mijao »

Guten Tag,
ich beschäftige mich erst seit kurzem mit KNN. Dennoch möchte ich im Rahmen einer Bachelorarbeit neben den konventionellen Prognoseverfahren ein KNN testen. Auf meiner Suche nach potentieller Software bin ich auf Membrain gestoßen und habe mich wegen der hohen Flexibilität für mein weiteres Vorgehen für Membrain entschieden.
Mein Ziel ist es ein KNN aufzubauen mit dem ich durch zahlreiche Input-Daten den Strompreis am deutschen Spotmarkt des nächsten Tages prognostizieren kann oder zumindest einen Beurteilungsspielraum schaffen kann. Jedoch merke ich leider, dass eine stündliche vorhersage sich schwierig gestaltet, da ein Output-Neuron nicht gleichzeitig als Input-Neuron verwendet werden kann.
Nach einigen Tutorien habe ich mich für das Mackey-Glass- Netz entschieden und trotzdem gestaltet sich die Trainingsphase als ernüchternd. Ich erreiche leider nicht die genauen Output Werte, wie im Anhang zu sehen. Aus diesem Grund würde ich gerne einige Vorschläge zum weiteren Vorgehen haben.

Ich möchte folgendes erreichen: Aufgabe

1. KNN zur Preisvorhersage des Strompreises am deutschen Spotmarkt EEX.
a. Vorhersage des täglichen Durchschnittspreises Base. (1-24 Uhr)
b. Vorhersage des täglichen Durchschnittspreises Peak. (8-20 Uhr)

c. Vorhersage des stündlichen Preises. Somit sollte jeder weiterer Stundenpreis auf den vorherigen aufbauen, so auch im KNN.

Ich habe folgende Anleitungen genutzt.

1. Einstiegshilfe, welches Herr Dr. Günter Daniel Rey (Universität Würzburg) freundlicherweise erstellt hat.
2. Short Beginner's Tutorial
3. Mackey-Glass Zeitreihe
4. Forum Zeitreihenprognose für den DAX-Index

Habe ich folgende Dinge richtig verstangen:
1. Über "Lesson Editor"; "Think on Input" kann man Vorhersagen treffen?

Ich habe folgende Fragen:

1. Wie kommt es zu den Abweichungen in den angehängten .png?
2. Wofür werden Validation Data benötigt?
3. Würde es beim meinen KNN helfen, wenn ich einige Input Daten entferne?
4. Eignet sich das „MackeyGlass“ Netz für mein Vorhaben?
5. Gibt es noch weitere Tutorien zum Thema MemBrain? zB. über Youtube usw. ?
6. Wie könnte ein Netz aussehen, welches in der Lage wäre jeden Stundenpreis, also 24 Stundenpreise, eines Tages zu Erzeugung? Das NN müsste den Output eines Stundenpreises als Input für die weitere Stunden verwenden.

Vielen Dank im Voraus!
Attachments
Validaten DATA.PNG
(36.96 KiB) Not downloaded yet
Training DATA.PNG
(35.61 KiB) Not downloaded yet
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Preisprognose Base an der EEX

Post by Admin »

Hallo und herzlich willkommen im Forum!
Mijao wrote:Mein Ziel ist es ein KNN aufzubauen mit dem ich durch zahlreiche Input-Daten den Strompreis am deutschen Spotmarkt des nächsten Tages prognostizieren kann oder zumindest einen Beurteilungsspielraum schaffen kann. Jedoch merke ich leider, dass eine stündliche vorhersage sich schwierig gestaltet, da ein Output-Neuron nicht gleichzeitig als Input-Neuron verwendet werden kann.
Du hast ja im Forum den Beitrag 'Forum Zeitreihenprognose für den DAX-Index' durchgearbeitet. Dort wird der Vorschlag gemacht, einige Vorgängerwerte mit in die Liste der Inputs aufzunehmen.
Hast Du das bei Deinem Netz so umgesetzt? Es ist sehr schwierig etwas zu Deinem Netz zu sagen, ohne zu wissen, wie es aussieht. Kannst Du es hier posten?
Mijao wrote:und trotzdem gestaltet sich die Trainingsphase als ernüchternd. Ich erreiche leider nicht die genauen Output Werte, wie im Anhang zu sehen.
Da ich nicht weiß, was Deine Input-Daten sind und auch Deine Erwartungen nicht kenne, ist es für mich schwierig, dazu etwas zu sagen. Grundsätzlich sieht das aber doch gar nicht schlecht aus. Hast Du dazu das Trainings-/Validierungsskript aus dem Dorum hier benutzt?
Mijao wrote:Habe ich folgende Dinge richtig verstangen:
1. Über "Lesson Editor"; "Think on Input" kann man Vorhersagen treffen?
Das ist prinzipiell richtig: Der Button bewirkt, dass die Inputs des gerade aktiven (also angezeigten) Patterns an das Netz angelegt werden und das Netz an seinen Ausgängen die daraus berechneten Ausgangswerte anzeigt.
Mijao wrote:1. Wie kommt es zu den Abweichungen in den angehängten .png?
Beim Trainingsdatensatz handelt es sich um Widersprüche in den Trainingsdaten. D.h., aus den Inputs lässt sich Dein Output nicht besser vorhersagen. Aus Sicht des Netzes fehlen weitere Inputqualitäten, um die Muster voneinander trennen zu können.
Beim Validierungsdatensatz kann das verschiedene Ursachen haben:
1.) Folgefehler aus den Problemen beim Training
2.) Mangelnde echte Regeln hinter den Daten. Das Netz hat die Trainingsdaten also auswendig gelernt, ohne sinnvolle Regeln daraus abzuleiten. Das kann beim Übertrainieren passieren, meist liegt es aber an den wirklich fehlenden Abbildungsregeln zwischen Input und Output.
3.) Die zum Training verwendeten Daten waren nicht repräsentativ, d.h., die Validierungsdaten decken z.B. Datenbereiche ab, die während des Trainings nie erreicht wurden.
Mijao wrote: Wofür werden Validation Data benötigt?
Diese dienen zur Überprüfung der Netzqualität: Das Netz wird daran gemessen, wie gut es auf Daten reagiert, die es während des Trainings nicht gesehen hat. Das nennt man die Fähigkeit zur Generalisierung.
Mijao wrote:3. Würde es beim meinen KNN helfen, wenn ich einige Input Daten entferne?
Das glaube ich nicht, nein. Wenn das Training spitze wäre, die Validierung aber schlecht, dann würde ich darüber nachdenken. So sieht das aber bei Dir nicht aus.
Mijao wrote:4. Eignet sich das „MackeyGlass“ Netz für mein Vorhaben?
Da es sich um ein zeitvariantes Netz handelt, ist es schwer zu handhaben. Meist ist es besser, einige letzte Werte aus der Vergangenheit als explizite Inputneuronen hinzuzunehmen und dafür ein zeitinvariantes Netz zu benutzen. Das funktioniert im übrigen auch fantastisch für die Mackey-Glass Zeitreihe, sobald man vier oder mehr Werte aus der Vergangenheit als Inputs nimmt.
Mijao wrote:5. Gibt es noch weitere Tutorien zum Thema MemBrain? zB. über Youtube usw. ?
Nein, nicht dass ich wüsste.
Mijao wrote:Wie könnte ein Netz aussehen, welches in der Lage wäre jeden Stundenpreis, also 24 Stundenpreise, eines Tages zu Erzeugung? Das NN müsste den Output eines Stundenpreises als Input für die weitere Stunden verwenden.
Exakt so wie erwähnt: Die Stundenpreise mehrerer vergangener Stunden zu den anderen Inputs hinzunehmen. Bzgl. der Datenaufbereitung so vorgehen wie im erwähnten DAX-Indes-Thread.

Viele Grüße
Thomas Jetter
Mijao
Posts: 4
Joined: Thu 5. Jul 2012, 15:15

Re: Preisprognose Base an der EEX

Post by Mijao »

Guten Morgen und danke für die schnelle Antwort!

Im Anhang befindet sich das bisherige Netz.
Hast Du dazu das Trainings-/Validierungsskript aus dem Dorum hier benutzt?
Nein, alles ist manuell geschehen.

Mir ist noch eine Frage zu den HIDDEN-Neuronen eingefallen:
-Wovon hängt die Anzahl der Hidden-Neuronen ab?
-Kann man ein Output-Neuron gleichzeitig zu einem Input-Neuron deklarierer?

Bis vor einigen Tagen dachte ich, dass ein KNN eine Blackbox ist. In die man solange Daten einspeist und das Ergebnis korriegiert bis die Prognosen stimmt. :D

Tut mir leid, wenn ich solche Fragen stelle, aber ich beschäftige mich erst seit 3 Tage mit dem Thema KNN und habe noch einige Dinge nicht verinnerlicht.

Vielen Dank für deinen Support!
Last edited by Mijao on Sat 14. Jul 2012, 10:04, edited 1 time in total.
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Preisprognose Base an der EEX

Post by Admin »

Mir ist zunächst einmal aufgefallen, dass das Input-Neuron 'e' einen Normalisierungsbereich von 20000 hat, die Trainingslesson aber für 'e' fast bis 100000 geht.
Diese Anpassung solltest Du also auf jeden Fall vornehmen.

Ansonsten ist meine Einschätzung, dass das Netz sehr gut generalisiert, der Output auf die Validierungsdaten sieht für eine Kursprognose exzellent aus.
Es gibt dafür 3 mögliche Erklärungen:
1.) Du hast wirklich die richtigen Inputs und kannst mit Erfolg den Kurs voraussagen (in diesem Fall herzlichen Glückwunsch!)
2.) In den Inputs versteckt sich ein Wert, der immer schon sehr nahe am gewünschten Output liegt (z.B. der Output vom Vortag). In diesem Fall muss man sehr genau schauen, wie gut der vorhergesagte Output wirklich ist. Denn auch ohne viel Vorhersagekunst liegt man gewöhnlicherweise mit einer Prognose nicht schlecht, wenn man einfach den Wert von Vortag reproduziert... Vielleicht mach Dein Netz ja genau das.
3.) Die Validierungsdaten sind nicht tatsächlich unabhängig von den Trainingsdaten. Wenn Sie z.B. nur eine Kopie von einigen Werten aus dem Trainingsdatensatz sind, dann ist es kein Wunder, dass das Netz sie gut verarbeiten kann, weil sie dann ja tatsächlich traininert wurden.

Deshalb meine nächsten Fragen:
1.) Wie sind die Validierungsdaten entstanden? Kannst Du den genauen Herkunftsablauf für Trainings- und Validierungsdaten einmal beschreiben?
2.) Versteckt sich in den Inputs bereits schon so etwas wie der Wert vom Vortag?
3.) Was sind genau Deine Akzeptanzkriterien bei der Valisierung? Du scheinst ja mit den momentan erzielten Werten nicht sehr glücklich zu sein. Wo willst Du also hin bzw. ab wann würdest Du sagen, dass das Netz Deinen Ansprüchen genügt?

Viele Grüße
Thomas Jetter
Mijao
Posts: 4
Joined: Thu 5. Jul 2012, 15:15

Re: Preisprognose Base an der EEX

Post by Mijao »

Mir ist zunächst einmal aufgefallen, dass das Input-Neuron 'e' einen Normalisierungsbereich von 20000 hat, die Trainingslesson aber für 'e' fast bis 100000 geht.
Diese Anpassung solltest Du also auf jeden Fall vornehmen
Die Normalisierung stimmte. Ein Input-Wert hatte nur eine 10er Potenz zu viel. Fehler wurde korrigiert.
1.) Du hast wirklich die richtigen Inputs und kannst mit Erfolg den Kurs voraussagen (in diesem Fall herzlichen Glückwunsch!)
Das erleichtert mich vielen Dank!!!
2.) In den Inputs versteckt sich ein Wert, der immer schon sehr nahe am gewünschten Output liegt (z.B. der Output vom Vortag). In diesem Fall muss man sehr genau schauen, wie gut der vorhergesagte Output wirklich ist. Denn auch ohne viel Vorhersagekunst liegt man gewöhnlicherweise mit einer Prognose nicht schlecht, wenn man einfach den Wert von Vortag reproduziert... Vielleicht mach Dein Netz ja genau das.
2.) Versteckt sich in den Inputs bereits schon so etwas wie der Wert vom Vortag?
Keines der Input-Werte ist der Output-Wert des vorherigen Tages. Sollte ich den Wert des vorherigen Tags als Input-Faktor ausprobieren?
3.) Die Validierungsdaten sind nicht tatsächlich unabhängig von den Trainingsdaten. Wenn Sie z.B. nur eine Kopie von einigen Werten aus dem Trainingsdatensatz sind, dann ist es kein Wunder, dass das Netz sie gut verarbeiten kann, weil sie dann ja tatsächlich traininert wurden.
1.) Wie sind die Validierungsdaten entstanden? Kannst Du den genauen Herkunftsablauf für Trainings- und Validierungsdaten einmal beschreiben?
Vorgang:
1. "Teach"
2. "Lesson Editor"
3. "Extras"
4. "Split Current Lesson"
5. 25% eintragen
Zuvor wurden alle Input-Werte als csv. Datei hochgeladen und die "Number of Lessons" auf den Wert 2 gestellt.
3.) Was sind genau Deine Akzeptanzkriterien bei der Valisierung? Du scheinst ja mit den momentan erzielten Werten nicht sehr glücklich zu sein. Wo willst Du also hin bzw. ab wann würdest Du sagen, dass das Netz Deinen Ansprüchen genügt?
Dieses Netz sollte mir als Übung für Membrain dienen. Durch dein Feedback bin ich mit dem KNN sehr zufrieden.

Mein Hauptziel ist es jeden einzelnen Stundenpreis am deutschen Spotmarkt der EEX zu prognostizieren. Nach meinem derzeitigen Kenntnisstand müsste ich dafür 24 unterschiedliche Netze aufbauen, für jede einzelne Stunde. Am liebsten wäre mir aber ein Netz mit 24 Output-Neuronen.

Aus diesem Grund würde ich gerne wieder auf deine Hilfe und Feedback zurückgreifen.

Vielen Dank für deine Hilfe!
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Preisprognose Base an der EEX

Post by Admin »

Wenn Du die Sache weitertreiben willst, dann wirst Du manches mit Skripting automatisieren müssen, sonst wird Dein Vorgehen zu fehleranfällig.
Ich würde an Deiner Stelle mit dem universellen Trainings- und Validierungsskript:
viewtopic.php?f=13&t=232
einsteigen.

Keine Sorge, dazu musst Du nicht programmieren können. Das Skript ist so flexibel und gut vorbereitet, dass Du schnell merken wirst, wie der Hase läuft...
Probier's mal aus, Du wirst sehen um wie viel bequemer das damit geht!

Viele Grüße,
Thomas
Thomas Jetter
Mijao
Posts: 4
Joined: Thu 5. Jul 2012, 15:15

Re: Preisprognose Base an der EEX

Post by Mijao »

Ich hätte noch einige Fragen zur Bedienung:

- Gibt es eine Funktion in Membrain, die es mir erlaubt die Güte des Netzes zu beurteilen? (Abweichung zwischen tatsächlichen Output und errechneten "Think on Lesson" der Validierungsdaten)
- Besteht die Möglichkeit die errechneten Werte (durch "Think on lesson") automatisch als csv. Datei auszugeben?

- Wovon hängt die Anzahl der Hidden-Neuronen ab?


Dein Skript funktioniert hervorragend vielen Dank!
- Ich habe nur das Gefühl, dass es etwas zu schnell geht und das Netz nicht genug Zeit hat für das Training.
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Preisprognose Base an der EEX

Post by TJetter »

Mijao wrote:- Besteht die Möglichkeit die errechneten Werte (durch "Think on lesson") automatisch als csv. Datei auszugeben?
Das Skript macht am Ende genau das, es exportiert alle errechneten Werte bzgl. der Validierungslesson in csv. Welche zusätzliche Funktionalität würdest Du Dir wünschen?
Mijao wrote:- Gibt es eine Funktion in Membrain, die es mir erlaubt die Güte des Netzes zu beurteilen? (Abweichung zwischen tatsächlichen Output und errechneten "Think on Lesson" der Validierungsdaten)
Eine Berechnung der Abweichung selbst gibt es nicht eingebaut in MemBrain. Allerdings kann man z.B. in Excel leicht die Abweichungen selbst berechnen und auswerten, in dem man die vom Skript exportierte CSV Datei nimmt (s.o.) und zusätzlich die Original Validierungsdatei, die ja die Sollwerte beinhaltet.
Mijao wrote:- Ich habe nur das Gefühl, dass es etwas zu schnell geht und das Netz nicht genug Zeit hat für das Training.
Die Dauer des Trainings kann man oben im Skript konfigurieren.
Mijao wrote:- Wovon hängt die Anzahl der Hidden-Neuronen ab?
Diese muss experimentell ermittelt werden, so dass die Validierung bestmöglich stattfindet. Anhaltwert ist die Anzahl Inputs. Ich würde zu Anfang mal ca. ein viertel oder auch ein fünftel der Anzahl der Eingangsneuronen wählen.

Viele Grüße
Thomas Jetter
Post Reply