Künstliche Intelligenz hat stark Fahrt aufgenommen und revolutioniert unseren Umgang mit Technik. Als Softwareentwickler bei Fusonic konzentriere ich mich darauf, unseren Kund:innen mit KI und Machine Learning innovative Lösungen zu bieten. In diesem Blogartikel gebe ich Einblick, wie Machine Learning für das Energiemonitoring bei unserem Kunden NeoVac genutzt werden kann.
- Autor
- Johannes Hartmann
- Datum
- 24. Januar 2024
- Lesedauer
- 5 Minuten
Machine Learning für Gebäudemonitoring nutzen
Wir haben Machine Learning eingesetzt, um den Energieverbrauch in Gebäuden für unseren Kunden NeoVac vorherzusagen und in deren Gebäudemonitoring-Produkt zu integrieren. Zusätzlich wollen wir testen, ob mit maschinellem Lernen auch Ausreißer (Spikes) erkannt werden können. Alarmierungssysteme könnten dadurch so entwickelt werden, dass Anomalien wie Wasserlecks oder PV-Anlagenstörungen automatisch erkannt werden und somit über die aktuell noch manuellen Einstellungen hinausgehen.
Datengrundlage
Uns stehen dank NeoVac Verbräuche aus der ganzen Schweiz zur Verfügung. Für meine Testzwecke habe ich aus Datenschutzgründen anonymisierte, aber hochwertige Daten herangezogen. Diese Testdaten enthalten über Jahre hinweg gesammelte Werte für für Stromverbrauch, Stromproduktion (PV), Wasserverbrauch, Heizung, Klima und Werte aus Wärmepumpen.
Das Werkzeug
Um unsere Vorhersagen mit Machine Learning zu erstellen, habe ich mich für eine Microsoft-Plattform namens ML.NET entschieden. Diese bietet Bibliotheken für verschiedene Bereiche des Machine Learnings. Einige Beispiele: Objekterkennung in Bildern, Produktempfehlungen, Stimmungsanalysen in Texten, Vorhersagen von Preisen oder Umsätzen, etc.
Die Erfahrungen
Die ersten Schritte waren schnell getan: Die Bibliotheken sind ausführlich dokumentiert und mit Beispielen gefüllt. Als Grundlage diente mir ein Beispiel für den Sales Forecast.
Die Implementierung war überraschend einfach. Es wird ein MLContext
(Machine Learning Context) erstellt. Dieser wird mit Informationen über das Vorhaben und den Aufbau der vorliegenden Daten gefüttert, also grob zusammengefasst:
- Ich will eine Vorhersage
- Aufbau des Datenmodells (Feldnamen)
- Verschiedene Trainingsparameter (Betrachtungsgröße, Gesamtzahl der Datensätze, Konfidenz, ...)
Dann werden schon die vorhandenen Daten in den Kontext geladen. Die Datenquelle an sich ist nicht relevant. Ob die Daten aus einer CSV-Datei, einer Datenbank oder einem anderen Dienst geladen werden, spielt keine Rolle.
Jetzt kann mit dem Kontext die TimeSeriesEngine
aus der Bibliothek erstellt und bereits eine Vorhersage getroffen werden. Alles in allem sind es also nur wenige Schritte, um eine Vorhersage zu bekommen. Auch die Ausführungsdauer liegt bei Millisekunden. Ich hatte wie bei der Bilderkennung lange Trainingszeiten erwartet, aber das war absolut nicht der Fall. Die Daten können sogar live berechnet werden.
Der Aufbau zur Erkennung von Ausreißern ist im Prinzip der gleiche, mit einem kleinen Unterschied: Der Kontext wird natürlich nicht zur Vorhersage, sondern zur Erkennung der Ausreißer benötigt. Der Prozess sieht also folgendermaßen aus: Modell- und Trainingsparameter setzen, Daten laden, Ausreißer erkennen.
Aber sind diese Vorhersagen jetzt brauchbar?
Der erste Versuch zeigt ganz klar: Das Test-Gebäude muss im Jahr 2024 mit drei Atomkraftwerken versorgt werden und hat im besten Fall den Wasserbedarf von Mitteleuropa.
Gut. Da ist was faul. Ich habe leicht an den Trainingsparametern geschraubt, schon war die Abweichung deutlich geringer:
Das Gebäude braucht im Jahr 2024 den Strom einer AAA-Batterie und ein Glas Wasser. Also immer noch nicht ganz richtig.
Erneutes Rumschrauben brachte keine Besserung, nur weitere Extremwerte. Die Dokumentation war damals (!) auch nicht hilfreich, da rekursiv. Beispielsweise wurde zum Parameter horizon
erklärt, dass es sich um den Trainingshorizont handelt. Ja, schön. Aber welche Auswirkungen hat dieser auf mein Ergebnis?
Die Dokumentation hat sich inzwischen jedoch deutlich verbessert. Jeder Parameter wird ausführlich erklärt und die Auswirkungen werden aufgezeigt.
Eine solch ausführliche Dokumentation hatte ich für meine ersten Schritte mit Machine Learning leider nicht, also hilft nur ausprobieren. Oder KI zu nutzen, um mir KI zu erklären. Fünf Minuten später spuckte mir ChatGPT immerhin brauchbare Parameter aus. Leider nicht mit besseren Erklärungen. Den Parameter horizon
erklärte mir ChatGPT auch als Horizont. Aber es kann ja auch nur auf vorhandene Informationen zugreifen.
Also, gabs mit den ChatGPT-Parametern nun gute Vorhersagen? Ja! Das, was mir als Grafik für 2024 angezeigt wird, schaut gut und richtig aus!
Validierung der Vorhersage
Wie gut sind die Vorhersagen, die der Algorithmus ausgibt, wirklich? Schauen sie nur gut aus, oder entsprechen sie auch der Realität? Das herauszufinden ist einfach:
Angenommen wir nutzen Daten von 2017 bis inkl. 2023.
- Der Vorhersage-Kontext wird mit Daten bis 2022 befüllt.
- Es wird eine Vorhersage für 2023 erstellt.
- Die vorhergesagten Daten werden mit den echten Daten von 2023 verglichen.
So können Aussagen über die Abweichung von Vorhersage und Realität getroffen und bei Bedarf die Parameter für die Vorhersage angepasst werden.
Gibt's da auch was zum Anschauen?
Natürlich.
Hier sehen wir vorhandene Daten von 2021 bis Oktober 2023, danach die Vorhersage für die nächsten 12 Monate. Es werden vergangene Trends erkannt und die Vorhersage entsprechend getroffen (genereller Anstieg über die letzten Jahre, auch wenn im Vorjahr weniger verbraucht wurde). Auch die Validierung, wie oben beschrieben, brachte gute Ergebnisse.
Auch ungleichmäßige Kurven werden gut vorhergesagt. Hier besser ersichtlich: das Konfidenzintervall. Der vorhergesagte Wert soll sich zwischen der unteren und der oberen Kurve bewegen.
Es hat sich generell gezeigt, dass es mit meinen Einstellungen die Monatsdaten von circa drei Jahren braucht, bevor brauchbare Vorhersagen getroffen werden können.
Verbesserungen
Hier enden meine ersten Schritte mit »Machine Learning«, aber da geht natürlich noch mehr. Weitere Prototypen sind in der Pipeline.
Ein Ziel ist natürlich die Verbesserung der Genauigkeit, denn eine Vorhersage bringt nichts, wenn sie falsch ist.
Ein weiteres Ziel ist, dass gute Vorhersagen früher getroffen werden können. Wenn diese erst über drei Jahre nach Errichtung eines Gebäudes funktionieren, ist das Feature unnütz.
Fragen, die zukünftig geklärt werden, sind unter anderem:
- Hilft es, wenn der Kontext mit Daten höherer Auflösungen gefüttert wird? Bringt es etwas, ihm tägliche Messwerte zu geben, um schneller und besser Vorhersagen für Monatswerte treffen zu können?
- Können Daten von anderen Gebäuden verwendet werden, um Vorhersagen zu treffen? Insbesondere interessant für Trends und Vorhersagen quasi ab Tag eins. Hier wird aber wohl eine Kategorisierung der Gebäude nötig sein. Ein Bürogebäude zeigt ein ganz anderes Nutzungsverhalten (Uhrzeiten, Tage, Peaks) als z.B. ein Wohngebäude, ein Kino, ein Freibad oder ein Skilift.
Konklusio
Mein Fazit zu »Machine Learning«: Zwar habe ich bei Weitem kein perfektes Ergebnis erzielt, aber es handelte sich auch um erste Experimente. Die Anwendung aktueller Bibliotheken, wie die in Microsofts ML.NET, ist sehr einfach, die Dokumentation ist mittlerweile auch besser. In kürzester Zeit – in meinem Fall in weniger als zwei Tagen – können gute Ergebnisse erzielt werden. Ich bleibe am Ball und bin gespannt, wie es weitergeht.