Datenanalyse und Machine Learning anhand eines Use Cases – I/III

Der Umfang von generierten Daten steigt ständig durch die zunehmende Digitalisierung nahezu aller Lebensbereiche – von Industrie 4.0 über den öffentlichen Sektor bis hin zu SmartHome. Dabei verbergen sich in den Daten enorme Informationsmengen, welche zur Erfüllung vielerlei Ziele genutzt werden können, etwa zur Effizienzsteigerung in der Wirtschaft, beispielsweise in Form von kundenorientierten Kaufempfehlungen von Amazon. 

Dabei ist die schiere Menge an Daten gleichermaßen Fluch und Segen. Denn während ein zunehmender Umfang an Messpunkten eine offensichtliche Informationszunahme bedeutet, droht die Flut an beobachteten Attributen die tatsächlich für die Zielerreichung relevanten Informationen zu verwässern. Um schließlich die Informationen aus den Daten zu extrahieren und nutzbar zu machen, ist zudem ein geeigneter Algorithmus zu wählen, welcher die enorme Datenmenge auch effizient verarbeiten kann. 

In dieser dreiteiligen Blogbeitragserie soll anhand eines Beispiels skizziert werden, wie sich große Datenbestände nutzbar machen lassen. Dabei behandelt der erste Teil die thematische Einführung in das Beispiel sowie die Datenexploration, im zweiten Teil werden die Daten bereinigt und aufbereitet und im dritten Teil zum Training eines Machine-Learning-Modells genutzt, nachdem dieses vorgestellt wurde.

Die Problemstellung 

Als Beispiel nutzen wir eine Challenge von Kaggle, welche hier verlinkt ist. Dort können die Informationen auch nachgelesen und heruntergeladen werden. 

Die US-amerikanische Organisation ASHRAE (American Society of Heating, Refrigerating and Air-Conditioning Engineers) vertritt als Berufsverband die Tätigen aus den Bereichen Heizungs-, Lüftungs-, Klima- und Kühlanlagenbau. Es gilt eine Vorhersage über den Energieverbrauch von Gebäuden zu treffen, um unter dem Aspekt der Pay-for-Performance-Finanzierung ermitteln zu können, wie groß die Einsparung von energetischen Optimierungen eines Gebäudes ist. Bei dieser Finanzierung zahlt der Eigentümer des Gebäudes einen Teil der tatsächlich erreichten Einsparungen an denjenigen, der die Baumaßnahme zur Energieverbrauchssenkung durchgeführt hat und finanziert diese damit. Doch während der tatsächliche Energieverbrauch nach einer energetischen Optimierungsmaßnahme messbar ist, muss der theoretische Energieverbrauch ohne Maßnahme für die Zeit nach der Optimierung mit einem Modell berechnet werden.

 

Die Daten 

Der erste Schritt einer Analyse ist stets die Betrachtung der Rohdaten. In diesem Fall liegen Daten zum historische Energieverbauch von Gebäuden für ein Jahr vor, welche mit einer Granularität von einer Stunde gemessen wurden. Gegeben ist in diesem Fall der historische Energieverbauch von Gebäuden in einem Jahr in einer Granularität von einer Stunde. Es gibt vier verschiedene Energieformen, welche betrachtet werden: Electricity, Hot WaterChilled Water und Steam, sowie deren abgelesener Verbrauch in kWh. Zusätzlich gibt es Wetterinformationen von diversen Wetterstationen in dessen Einzugsgebieten die Gebäude liegen. Es gibt einen Trainings- und einen Testdatensatz, wobei der Testdatensatz keine Werte für den Verbrauch beinhaltet. Im Detail gliedern sich die Daten wie folgt: 

train.csv: 

FeldBedeutung
building_id  Fremdschlüssel für den Join mit den Gebäudedaten
meterEnergieform {0:Electricity, 1:chilledwater, 2:hotwater, 3:steam} 
timestamp  Zeitstempel der Messung  
meter_readingVerbrauch in kWh

building_metadata.csv:

FeldBedeutung
site_idFremdschlüssel für den Join mit den Wetterdaten 
building_idPrimärschlüssel
primary_useIndikator der primären Nutzung des Gebäudes
square_feetGebäudefläche in ft² 
year_builtBaujahr
floor_countAnzahl der Stockwerke

weather_train.csv:

FeldBedeutung
site_idPrimärschlüssel
timestampZeitstempel der Messung
air_temperatureLufttemperatur in °C
cloud_coverageAnteil des durch Wolken bedeckten Himmels
dew_temperatureTautemperatur in °C
precip_depth_1_hrNiederschlag in mm/m²
sea_level_pressureLuftdruck in mbar
wind_directionWindrichtung in Kompassrichtung (0°-360°)
wind_speedWindgeschwindigkeit in m/s

Die Exploration

Damit sind die Metainformationen der Daten bereits vorhanden. Um sich ein besseres Bild der Daten machen zu können, bietet sich eine Visualisierung an. Diese werden wir wie alle weiteren folgenden Schritte mit Python 3 vornehmen. Dazu ist zunächst der Import der Daten (hier als pandas Dataframe) notwendig. Anschließend werden die Datensätze anhand der Fremdschlüssel zusammengeführt: 

Mit diesen vereinten Datensätzen können nun erste einfache Analysen der Datenstrukturen vorgenommen werden. Zunächst ist es interessant zu betrachten, ob es fehlende Werte (NAs) in einzelnen Datenreihen bzw. Attributen gibt. Dazu lässt sich beispielsweise ein einfaches Diagramm erstellen:

Wir erhalten bei Ausführung obigen Codes folgende Grafik:

Es ist ersichtlich, dass die Datenverfügbarkeit der Attribute floor_count, year_built und cloud_coverage sehr gering ist. Auch die Attribute precip_depth_1_hr, wind_direction und sea_level_pressure sind nicht für jeden Datenpunkt verfügbar. Die übrigen Attribute sind für nahezu jeden Datenpunkt vorhanden.  

Ein hoher Anteil fehlender Werte eines Attributs disqualifiziert dieses Attribut oftmals für weitere Analysen. Zusammenhänge zwischen diesem Attribut und der vorherzusagenden Größe, in unserem Fall der Energieverbrauch, lassen sich dann nur für einen kleinen Teil der Daten untersuchen. Dies führt dann beim späteren Training des Machine-Learning-Modells zu Problemen.

Auch eine Betrachtung des Energieverbrauchs im Laufe der Zeit erscheint sinnvoll. Dazu erstellen wir eine weitere Grafik: 

Es sind gleich mehrere interessante Dinge zu beobachten. Zunächst ist der Energieverbrauch über das Jahr verteilt sehr unterschiedlich. Diese enormen Unterschiede lassen sich nicht mit den unterschiedlichen Wetterbedingungen während des Jahres erklären.  

Darüber hinaus lässt sich erkennen, dass die stündlichen Werte sehr viel stärker schwanken, als die täglichen Werte. Die stündlichen Werte beinhalten demnach einzelne größere Ausreißer, welche weitere Analysen stark verfälschen können. 

Was kann man nun tun, um den Datensatz genauer zu analysieren? Anhand der bekannten Attribute wirkt es plausibel, den Datensatz anhand der kategorischen Attribute aufzuteilen, also beispielsweise anhand von meter_type, primary_use oder site_id. 

Im Folgenden betrachten wir den Datensatz für den meter_type chilled water. Für die übrigen Werte des Attributs meter_type kann analog vorgegangen werden.  

Eingeschränkt auf den meter_type chilled water ergibt sich folgender Graph:

Der Verlauf des Energieverbrauchs über das Jahr wirkt nun schon homogener als zuvor. Eine weitere Aufteilung anhand des site_id Attributs ist denkbar. Dabei fällt auf, dass nicht zu jeder site_id Einträge mit dem meter_type chilled_water vorhanden sind.  

site_idAnzahl Einträge
0168253
10
2863845
30
40
50
6164107
7130956
80
9833113

Es gibt also nur Einträge zu den site_ids 0, 2, 6, 7 und 9Plottet man nun die Datensätze für diese site_ids erhält man folgendes Bild: 

Es ist ersichtlich, dass die Unterscheidung nach der site_id weitere Inhomogenitäten offenbart. Man könnte nun noch weitere Unterscheidungen vornehmen: nach meter_type und site_id und primary_use etwa. Und selbst dann ließe sich noch weiter differenzieren, etwa nach der building_id. Man sieht: oft ist eine beliebig feine Granularität möglich.  

Correlation-Heat-Maps

Eine weitere Möglichkeit zur Visualisierung von Zusammenhängen bietet die Correlation-Heat-Map. In dieser werden die Korrelationen der ausgewählten Attribute visuell dargestellt. Beispielhaft für unseren Datensatz könnte das so aussehen: 

Dabei wurden die Attribute building_id, meter und site_id aussortiert, da diese als kategorische Attribute keine sinnvolle Korrelation mit anderen Attributen aufweisen können. 

Boxplots

Zuletzt sei die Möglichkeit von BoxPlots erwähnt. Diese ermöglichen die Visualisierung der Verteilung der einzelnen Datenpunkte und kann so dabei unterstützen Ausreißer zu erkennen. Hier am Beispiel von den Einträgen mit primary_use Education, wobei die Werte der Attribute allesamt auf den Wertebereich von 0 bis 1 normalisiert wurden. 

Die „Box“ der Boxplots wird durch die unteren und oberen Quartile begrenzt, die Linie im Innern einer Box markiert den Median. Die „Fühler“ an der Box reichen maximal bis zum 1,5-fachen des Interquartilsabstands. Alle Punkte außerhalb dieser Fühler werden als „Ausreißer“ bezeichnet. Nähere Infos dazu gibt es u.A. hier: https://de.wikipedia.org/wiki/Box-Plot

Ausblick

Wir haben nun diverse Möglichkeiten gesehen, um die Daten zu visualisieren und sich einen besseren Überblick zu verschaffen. Dieser Überblick ist nötig, da die Daten oftmals Inhomogenitäten aufweisen, verursacht zum Beispiel durch Messfehler. Auch kategorische Unterschiede in den Daten können so erkannt und berücksichtigt werden, genauso wie saisonale Komponenten. 

Wie mit Inhomogenitäten umgegangen werden kann, welche in diesem Beispiel deutlich zu erkennen waren, wird im nächsten Teil dieser Blogbeitragserie beschrieben.