Isolieren des Stromverbrauchs verschiedener Geräte

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
Toddster
Posts: 15
Joined: Thu 17. Nov 2011, 17:49

Isolieren des Stromverbrauchs verschiedener Geräte

Post by Toddster »

Hallo Zusammen, hallo Herr Jetter,

ich habe mich jetzt bereits geraume Zeit selber mit der Fehlersuche in meinem Projekt beschäftigt, komme aber nicht so recht weiter, deswegen frage ich mal hier.
Zu meinem Projekt:
Ich habe die gemessenen Gesamtstromverbräuche verschiedener Haushalte (über 1000 Stück) im stündlichen Abstand für mehrere Tage und ich habe in einer Umfrage insgesamt 18 verschiedene Haushaltsgeräte erfasst für jeden Haushalt, sowie die ungefähre Nutzungsdauer der Geräte pro Tag. Mein Ziel ist es den Stromverbrauch der einzelnen Geräte zu jeder Tagesstunde (1-24 Uhr) herauszufinden.

Bisher habe ich einige verschiedene Netzarchitekturen ausprobiert. Hier mal eine Variante:

Für jedes Gerät ein Inputneuron und zusätzlich zu jedem Gerät ein Inputneuron für die täglich genutzte Zeit des Gerätes. Hinzu kommen noch Input Neuronen, welche die Haushaltsfläche, die Anzahl der Hausbewohner und weitere bauliche Merkmale des Hauses enthalten. Die ganzen Input Neuronen (ca. 40 Stück) habe ich komplett mit ca. 15 Hidden Neuronen Verbunden (eine Schicht) und diese wiederum mit dem Output Neuron, welches den gemessenen Stromverbrauch des Haushaltes enthält. Die Aktivierungsfunktionen sind Identity (0-1)-logistic-Identity (0-1).

Ich gebe den Netz nun die jeweiligen Inputs (Gerätekonstellationen) für alle Haushalte und den gemessenen Gesamtstromverbrauch zu jeder Tagesstunde einzeln vor und lasse es für jede Stunde einzeln trainieren. Mein Ziel ist es ja nun den Stromverbrauch der einzelnen Geräte heraus zu finden. Dafür gebe ich dem Netz dann Muster von Haushalten vor, die das Gerät, für welches ich den Stromverbrauch isolieren möchte, auch wirklich besitzen und lasse mir die Antwort des Netzes auf diese Muster geben. Anschließend nehme ich dieselben Muster noch einmal, nur das ich diesmal das Gerät von 1 (vorhanden) auf 0 (nicht vorhanden) setze und lasse mir wieder die Antworten des Netzes auf die Muster geben. Die Differenz in den Antworten des Netzes, also der Gesamtstromverbrauch mit vorhandenen Gerät und ohne dieses Gerät, schreibe ich dem entsprechenden Gerät zu. Dies ist bis jetzt meine Idee den Stromverbrauch eines Gerätes zu isolieren. Das ganze Spiel mache ich dann natürlich noch für jedes andere Gerät und jede Stunde.

Mein Problem ist, dass das bisher nicht so gut klappt. Dadurch dass ich jede Stunde einzeln betrachte und das Netz für jede Stunde einzeln trainiere, kommt es zu sehr krassen Schwankungen des Stromverbrauchs, die so nicht realistisch sind. So Verbraucht z.B. der Geschirrspüler um 12 Uhr 200 Watt, sinkt um 13 Uhr auf -30 Watt und steigt um 14 Uhr wieder auf 300 Watt.
Ich habe auch schon probiert ein Netz zu konstruieren, welches ein Inputneuron für die jeweilige Stunde enthält und den Verbrauch der vorhergehenden Stunde an die nächste Stunde weiter gibt. Dies führte allerdings dazu, dass die Stunde von dem Netz übermäßig stark bewertet wurden, sodass der Stromverbrauch eines Gerätes kontinuierlich von 1-24 Uhr stieg, was auch so nicht sein kann.

Meine Frage ist, ob ich an dem Netzaufbau etwas falsch gemacht habe, oder wie ich es besser machen könnte. Und gibt es einen besseren Weg den Verbrauch eines einzelnen Gerätes zu isolieren?

Es besteht natürlich auch die Möglichkeit, dass es garnicht an der Netzarchitektur liegt, sondern meine Datenbasis nicht ausreichend ist, dessen bin ich mir auch im Klaren.
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Isolieren des Stromverbrauchs verschiedener Geräte

Post by TJetter »

Hallo,

leider habe ich diesen Thread gerade erst bemerkt, deshalb gab es bis jetzt noch keine Antwort - Manchmal funktioniert die Benachrichtigung über neue Threads durch das Forum leider nicht, was natürlich ärgerlich ist.

Ich werde mich mit der Fragestellung auseinandersetzen und demnächst hier antworten. Eine erste Sache, die ich bereits gesehen habe, betrifft die Aktivierungsfunktionen: Das Output-Neuron sollte auf jeden Fall auch LOGISTIC verwenden.

Viele Grüße
Thomas Jetter
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Isolieren des Stromverbrauchs verschiedener Geräte

Post by TJetter »

Toddster wrote:Für jedes Gerät ein Inputneuron und zusätzlich zu jedem Gerät ein Inputneuron für die täglich genutzte Zeit des Gerätes.
Erster Vereinfachungsvorschlag: Nur ein Neuron pro Gerät:
Aktivität 0 = Gerät nicht vorhanden. Wenn Gerät vorhanden, dann wird das Neuron auf die Nutzungsdauer gesetzt.
Das erspart schon einmal 18 Input-Neuron und verringert damit die Eingangsdimensionalität sowie die Speicherkapazität des Netzes.
Toddster wrote:Hinzu kommen noch Input Neuronen, welche die Haushaltsfläche, die Anzahl der Hausbewohner und weitere bauliche Merkmale des Hauses enthalten.
Wird die Tageszeit (1 - 24) auch mit angegeben? Ich nehme an, oder?
Toddster wrote:Die Aktivierungsfunktionen sind Identity (0-1)-logistic-Identity (0-1).
Wie in der vorherigen Antwort schon geschrieben: Für den Ausgang auf jeden Fall auch logistic wählen.
Toddster wrote:Mein Problem ist, dass das bisher nicht so gut klappt. Dadurch dass ich jede Stunde einzeln betrachte und das Netz für jede Stunde einzeln trainiere, kommt es zu sehr krassen Schwankungen des Stromverbrauchs, die so nicht realistisch sind. So Verbraucht z.B. der Geschirrspüler um 12 Uhr 200 Watt, sinkt um 13 Uhr auf -30 Watt und steigt um 14 Uhr wieder auf 300 Watt.
Wie viele Datensätze sind denn pro Haushalt verfügbar? Ich denke, dass der Einsatz der diversen Geräte selbst innnerhalb eines Haushalts nicht so gleichmäßig ist, dass man aus wenigen Tagen gute Ergebnisse ziehen kann: Das bedeutet ja für jede Tageszeit nur wenige Trainingsmuster pro Haushalt. Gedanklich bin ich hier aber auch noch nicht ganz durch, muss ich zugeben.
Toddster wrote:Ich habe auch schon probiert ein Netz zu konstruieren, welches ein Inputneuron für die jeweilige Stunde enthält und den Verbrauch der vorhergehenden Stunde an die nächste Stunde weiter gibt.
Wenn überhaupt, dann würde ich das Netz so wählen, dass es Eingabeneuronen für den Verbrauch einer gewissen Anzahl Vorgänger-Stunden hat. Vielleicht ist das ja aber auch gemeint. Ich bezweifle aber, dass das viel bringt.
Toddster wrote:Meine Frage ist, ob ich an dem Netzaufbau etwas falsch gemacht habe, oder wie ich es besser machen könnte.
Das einzige prinzipielle Problem am Netzaufbau sehe ich in der Aktivierungsfunktion (s.o.). Evtl. würde ich es mit weniger Neuronen in der Hidden-Schicht versuchen, v.a., wenn pro Gerät nur noch ein Neuron verwendet wird (s.o.). Vielleicht erst einmal 5 Hidden-Neuronen?
Als Teacher würde ich in jedem Fall RPROP nehmen, bringt meist die besten Ergebnisse.

Wie sehen denn die Ergebnisse von Training und Validierung aus? Ist es möglich, ein paar Screenshots zu posten oder Dateien anzuhängen? Bei vertraulichen Daten gerne auch direkt per Mail.
Toddster wrote:Und gibt es einen besseren Weg den Verbrauch eines einzelnen Gerätes zu isolieren?
Ich werde weiter drüber nachdenken und mit hier wieder melden, wenn ich eine Idee habe.

Viele Grüße und viel Erfolg.
Thomas Jetter
Toddster
Posts: 15
Joined: Thu 17. Nov 2011, 17:49

Re: Isolieren des Stromverbrauchs verschiedener Geräte

Post by Toddster »

Hallo,
vielen Dank für die Tipps.
Wird die Tageszeit (1 - 24) auch mit angegeben? Ich nehme an, oder?
Nein, die Tageszeit wird nicht mit angegeben, ich habe im Moment für jede Uhrzeit ein eigenes Netz, so fließen in das "1Uhr Netz" auch nur die Messwerte um 1 Uhr ein. Anschließend füge ich dann alle Ergebnisse zusammen. Das habe ich so gelöst, weil es zu jedem der über 1000 Haushalte mehrere Messwerte zu jeder Uhrzeit gibt (das ganze lief ja über viele Tage). Dadurch kommen pro Stunde locker 100000 Muster zusammen. Würde ich jetzt alle 24 Stunden auf einmal in das Netz einspeisen, wären das 2,4 Mio Muster. Ich importiere im Moment immer im raw csv Format, da ich die Daten vorher mit MYSQL aufbereitet habe und als csv. exportiert habe. Ab ca. 1 Mio Muster kam es allerdings vermehrt zu abstürzen beim importieren der Daten, weil der Speicher anscheinend vollgelaufen ist und der Import der Daten selbst dauerte auch sehr lange. Aus diesem Grund habe ich mich entschieden das ganze aufzusplitten nach Stunden.

Ich habe allerdings auch schon Netzvarianten genutzt, welche alle 24 h enthalten. Dafür habe ich einfach den Mittleren Messwert pro Stunde und Haushalt gebildet und beim Netz ein "Stunden Neuron" hinzugefügt. Bei 1000 Haushalte waren das über 24 h dann entsprechend bloß noch 24000 Muster. Der Nachteil dieser Variante war, dass ich den Einfluss der Temperatur auf den Stromverbrauch (z.B. Kühlgeräte oder Nachtspeicherheizungen) weglassen musste. Ich habe nur einen landesweiten mittleren Temperaturmesswert für jede Stunde und Tag vorliegen, den ich für alle Haushalte heranziehen musste. Wenn ich nun die Strommesswerte der Haushalte pro Stunde Mittel und nicht mehr für jede Stunde (an mehreren Tagen) mehrere Messwerte habe, dann müsste ich auch den Temperaturwert mitteln und er wäre immer gleich. Damit wäre der Temperaturwert pro Stunde nicht mehr heterogen und ohnehin nutzlos denke ich.
Wie viele Datensätze sind denn pro Haushalt verfügbar? Ich denke, dass der Einsatz der diversen Geräte selbst innnerhalb eines Haushalts nicht so gleichmäßig ist, dass man aus wenigen Tagen gute Ergebnisse ziehen kann: Das bedeutet ja für jede Tageszeit nur wenige Trainingsmuster pro Haushalt. Gedanklich bin ich hier aber auch noch nicht ganz durch, muss ich zugeben.
Zunächst einmal untergliedere ich die Stromverbräuche in Typtage, d.h. Winter, Sommer, Übergangszeit und jeweils Werktag, Samstag, Sonntag.
Die Datenbasis ist enorm umfangreich. Pro Haushalt und Stunde habe ich so z.B. für einen Sommer Werktag z.B. 1 Uhr gut 80 Messwerte. Allerdings denke ich, ist die Anzahl der Messwerte pro Haushalt, wenn überhaupt, nur relevant um die Temperaturabhängigkeit einzelner Geräte zu erfassen. Die Gerätekonstellation innerhalb eines Haushaltes ist ja schließlich immer dieselbe, auch wenn ich dem Netz dieses Gerätemuster für den einen Haushalt 80 mal vorgebe (und jedes mal etwas andere Strommesswerte) so ändert sich nur der Temperaturwert. Mir ist es ja Schlussendlich wichtig den Stromverbrauch eines einzelnen Gerätes zu isolieren. Dafür ist die Gesamtanzahl an Haushalten und damit verschiedenen Gerätekonstellationen entscheidender denke ich. Und das sind wiegesagt um die 1000 verschiedene Haushalte, also auch 1000 verschiedene Gerätekonstellationen. So besitzen manche Haushalte z.B. einen Geschirrspüler und manche nicht. Ich hoffe das das Netz einen systematischen Unterschied zwischen Haushalten mit und ohne Geschirrspüler im Stromverbrauch zu einer Stunde erkennt und den Einfluss des Geschirrspülers bewertet.

Natürlich spielt das Nutzerverhalten auch eine enorme Rolle beim Stromverbrauch und nicht nur das vorhandensein eines Gerätes. Diese Informationen zum Verhalten liegen mir allerdings nicht vor. Ich kenne jedoch Studien, welche es mit ähnlichen Daten und mittels einer Regressionsanalyse halbwegs plausibel geschafft haben den Stromverbrauch einzelner Geräte zu errechnen, auch ohne Verhaltensinformationen. Selbiges möchte ich nun mit einem Neuronalen Netz versuchen.
Wie sehen denn die Ergebnisse von Training und Validierung aus? Ist es möglich, ein paar Screenshots zu posten oder Dateien anzuhängen? Bei vertraulichen Daten gerne auch direkt per Mail.
Also der Net Error von Trainings und Validierungsdaten ist relativ ähnlich und in beiden Fällen sehr hoch. Der Net Error bezieht sich dabei natürlich auf die Messwerte zum Stromverbrauch der Haushalte pro Stunde. Leider sind die Ausgangsdaten vertraulich und zum senden per mail auch viel zu umfangreich. Ich könnte höchstens die Variante schicken, bei der ich aus allen Messwerten pro Haushalt einen Mittelwert zu jeder Stunde gebildet habe, da das einfach weniger Daten sind dann. Ich werde das mal vorbereiten.


Viele Grüße
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Isolieren des Stromverbrauchs verschiedener Geräte

Post by TJetter »

Hallo,

ich habe die Daten und das Netz aus der Mail durchgesehen und folgende Verbesserungen eingefügt (die Dateien werde ich wieder per Mail senden):

1.) Output-Neuron hat nun Aktivitätsfunktion 'LOGISTIC'
2.) Die Zeitinformation ist nicht mehr als Anzahl Stunden repräsentiert, sondern als deren Cosinus und (-)Sinus.
Also: Tageszeit = COS(2 * PI * Stunde) / 23)
Dazu ein neues Neuron 'PM' = -SIN(2 * PI * Stunde) / 23)
Das hat foldende Bewandtnis:
Gibt man die Tageszeit in 0 bis 23 Stunden an, dann springt der Wert des Neurons von 23 auf Null beim Durchgang durch Mitternacht. Das ist ein maximaler Unterschied in der Aktivität des Neurons, dem keine physikalische Entsprechung gegenübersteht: 23 und 0 Uhr sind ja tatsächlich 'physikalisch' sehr dicht beieinander. Es ist sehr von Vorteil, das auch in den Eingangsgrößen abzubilden.
Das geht sehr gut mit Sinus/Cosinusförmigen Verläufen, in der Natur ist ja alles eine Schwingung. Der Cosinus alleine genügt jedoch nicht, denn damit lassen sich AM/PM nicht unterscheiden. Deshalb benötigt man noch die momentane Steigung der Zeit und das ist der -SIN. (+SIN hätte es genauso getan, dem Netz wäre das Vorzeichen hier egal, aber so ist es mathematisch korrekt und anschaulich).

Mit RPROP trainiert komme ich damit auf einen Fehlerwert von ca. 0,04 mit folgenden Einstellungen im Bereich <Teach><Configure Net Error Function>:
- Per Pattern Summands = Squared Deviation
- Net Error Calculation = Root Mean of Sum

In weiten Bereichen folgt der Netzoutput der Vorgabe nicht schlecht, wie ich finde. Allerdings gibt es immer noch viele massive Ausreißer, vor allem bei extrem hohen Stromverbräuchen.
Hier denke ich, dass Eingangsdaten fehlen: Da scheinen mir Verbraucher zu Gange zu sein, die nicht erfasst wurden, aber massiv sind oder alleine durch Temperaturangaben nicht ausreichend erfasst werden können (Beispiel: elektr. Heizungen).
Es könnte aber gut sein, dass das Netz diese ausreichend wegmittelt, die Datenbasis ist ja durchaus gewaltig. Ansonsten würde ich vorschlagen, die Datensätze, die Extremwerte für den Stromverbrauch aufweisen, aus der Datenbasis zu entfernen. Ob sie viel Nutzen bringen ist ohnehin fraglich.

Als Lernalgorithmus schlage ich in jedem Fall zunächst RPROP vor, hier muss nichts konfiguriert werden, er passt sich automatisch an Netz und Daten an.
Wenn man damit zufriedenstellende Erfolge erzielt kann man versuchen, mit Backprop noch etwas händisch zu tunen, aber erst dann.

Außerdem empfielt es sich, die Datenmenge für die Ermittlung der besten Netzachitektur signifikant zu reduzieren. Ich habe meine Experimente mit einem Zehntel der von Ihnen zur Verfügung gestellten Trainingsdaten durchgeführt (im Lesson-Editor per Zufall abgespalten). Am Ende habe ich geprüft, dass die Ergebnisse auch mit dem ganzen Datensatz immer noch genauso ausfallen, was der Fall war. Auch die Validierung ergibt übrigens sehr identische Net-Error-Werte, was ein gutes Zeichen ist.

Noch ein Sätzchen zum CSV-Import bzw. Lesson-Datei Handling: Wenn man das MemBrain interne Datenformat (.mbl) verwendet, dann geht das Laden und Speichern von Dateien um Größenordnungen schneller und ohne Speicherproleme. Deshalb empfehle ich - gerade bei großen Datenmengen - immer das mbl-Format.
Beim Import kann man sich behelfen: Hat man einen Teil der Daten aus CSV importiert, dann kann man diese als mbl-Datei abspeichern. Dann kann man über den Menüpunkt 'Lesson Files - Append Lesson...' im Lesson Editor mbl.-files aneinanderfügen und wieder als eine Lesson abspeichern. So kann man die Probleme beim Massenimport von CSV-Dateien umgehen.
Das lässt sich überigens auch per Script automatisieren, den Befehl AppendLesson(...) gibt es auch in der Scriptsprache.

Ich hoffe, das hilft Ihnen weiter und führt zum Erfolg!

Viele Grüße
Thomas Jetter
Toddster
Posts: 15
Joined: Thu 17. Nov 2011, 17:49

Re: Isolieren des Stromverbrauchs verschiedener Geräte

Post by Toddster »

Vielen Dank für die Antwort :)
Post Reply