Demo-PY3: Clusteranalyse "Automotive in 3D"
Die vorliegende Demo zeigt, wie eine Clusteranalyse im 3-dimensionalen Raum mit Hilfe der Python-Bibliothek scikit-learn durchgeführt wird, hier am Beispiel eines Automobildatensatzes, der auch in Demo-PY4: Predictive Maintenance mit scikit-learn verwendet wird. In diesem Anwendungsfall werden die Cluster auf Basis von drei Merkmalen des Datensatzes erstellt und die Cluster-Zuordnung der Daten wird im 3 dimensionalen Raum visualisiert. Dazu wird das Toolkit mplot3d verwendet, dieses Toolkit erweitert die Bibliothek Matplotlib um Methoden zur Erstellung von 3D-Grafiken.
Motivation
Für die Automobildaten wurde in
Demo-PY4: Predictive Maintenance mit scikit-learn oder auch
Demo 4: Predictive Maintenance mit R die Merkmale mittels
eines Entscheidungsbaums, ein
Verfahren des maschinellen Lernens, ermittelt,
die am stärksten zu einem Ausfall des Motors beitragen.
Diese drei Merkmale werden nun herangezogen um eine
Clusteranalyse durchzuführen, dabei werden
durch die Verwendung eines bestimmten Ähnlichkeits- bzw.
Abstandsmaßes Gruppen/Cluster ähnlicher Merkmale gebildet.
Neue Daten können anhand ihrer Merkmale den in der Analyse gebildeten Clustern zugeordnet werden und somit
eine Kategorisierung dieser durchgeführt werden.
Die Zuordnung zu den Clustern anhand der drei Merkmale werden danach
im 3 dimensionalen Raum visualisiert und interpretiert.
Übersicht
Demo-PY3: Clusteranalyse "Automotive" ist in fünf Abschnitte gegliedert: Zunächst wird die Fragestellung geklärt und die Vorbereitungsschritte zur Verwendung von Jupyter Notebook erläutert. Danach werden Verfahren der Clusteranalyse aus der Python-Bibliothek scikit-learn auf die Automobildaten angewandt und es wird mittels des Toolkits mplot3d der Matplotlib-Bibliothek die Daten- und Clusterzugehörigkeit visualisiert, gefolgt von einer Interpretation der Cluster.
Das Tutorial ist als Google Colab Notebook online verfügbar:
1 Die Fragestellung
Aus den Ergebnissen der in Demo-PY4: Predictive Maintenance mit scikit-learn und
Demo 4: Predictive Maintenance mit R durchgeführten Analysen wurden drei Merkmale,
die am stärksten zum Ausfall des Motors beitragen, ausgewählt: der Ansaugkrümmerdruck, die Drosselklappenstellung und die Katalysatortemperatur.
Die Frage, die mit einer Clusteranalyse beantwortet werden soll, lautet: Welche Clusterzuordnung der
Motoren erfolgt bzgl. dieser drei Merkmale, die den stärksten Einfluss auf den Ausfall hatten?
2 Installation von Python, Anaconda und Jupyter Notebook
Um Python-Programme schreiben zu können, muss zunächst eine aktuelle Python-Installation von der Python-Webseite python.org heruntergeladen und installiert werden. Für die Entwicklung größerer Programme und die Durchführung von Datenanalysen sollten zusätzlich die Paketverwaltungsplattform Anaconda und die Entwicklungs- und Laufzeitumgebungen Spyder und Jupyter Notebook verwendet werden, die umfangreiche Funktionalität für Paketverwaltung, Softwareentwicklung und Präsentation bereitstellen.
Vorbereitung: Anaconda und Jupyter Notebook installieren
Die Details der Installation von Python und Anaconda sind in dem Abschnitt Vorbereitung: Installation von Python und Anaconda beschrieben.
Die Details der Verwendung von Jupyter Notebook sind in den Abschnitten Jupyter Notebook verwenden und Jupyter Notebook Widgets verwenden beschrieben, zu denen es auch YouTube-Anleitungen gibt.
Video: Jupyter Notebook
Das folgende Video zeigt, wie ein Jupyter Notebook erstellt und verwendet wird.
3 Clusteranalyse im 3 dimensionalen Raum
Über Programme öffnen wir die Jupyter Notebook-Anwendung und erstellen mit Hilfe des Menüpunkts "New" ein neues Python3-Notizbuch mit dem Namen elab2go-Demo-PY3_automotive. In dieses Notizbuch werden vier Codezellen eingefügt, die den üblichen Schritten bei der Erstellung einer Clusteranalyse entsprechen.
- 3.1 Importieren der Programmbibliotheken
- 3.2 Daten einlesen und verwalten
- 3.3 Clusteranalyse durchführen
- 3.4 Zuordnung der Daten zu den Clustern visualisieren
3.1 Importieren der Programmbibliotheken
In der ersten Codezelle des Jupyter Notebooks importieren wir die benötigten Programmbibliotheken: Die
in Demo-PY3 bereits vorgestellten Bibliotheken
scikit-learn und sciPy, die die verwendeten Clustering-Algorithmen enthalten, sowie die aus
Demo-PY2: Datenverwaltung mit Pandas
bekannten Bibliotheken Pandas, Matplotlib und NumPy werden
in Python mit Hilfe der import-Anweisung entweder komplett importiert
oder mit Hilfe der from-import-Anweisung nur einzelne Funktionen der Programmbibliothek abgerufen.
Zusätzlich wird in diesem Anwendungsfall das Toolkit
mplot3d verwendet,
das die Bibliothek Matplotlib um Methoden zur Erstellung von 3D-Grafiken erweitert.
Die erste Codezelle enthält insgesamt sieben Import-Anweisungen.
- Zeile 1: NumPy: Wird für den Umgang mit Vektoren, Matrizen oder generell Arrays benötigt.
- Zeile 2: Pandas: Wird für Datenverwaltung und Datenbereinigung benötigt
- Zeile 3: Matplotlib: Wird für die Visualisierung, Plots etc. benötigt.
- Zeile 4: scipy.cluster.hierarchy: Wird für die Anwendung der hierarchischen Verfahren benötigt.
- Zeile 5: mplot3d: Wird zur Erstellung von 3D-Grafiken benötigt.
- Zeile 6: AgglomerativeClustering: wird für die Anwendung der hierarchischen Methoden benötigt.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.cluster.hierarchy as shc
import mpl_toolkits.mplot3d.axes3d as p3
from sklearn.cluster import AgglomerativeClustering
3.2 Daten einlesen und verwalten
In der zweiten Codezelle werden Daten, die in der csv-Datei automotive_test_140.csv gespeichert sind, mit Hilfe der Funktion read_csv() der Pandas-Bibliothek eingelesen, siehe auch Demo-PY2: Datenverwaltung mit Pandas.
# Lese CSV-Datei ein
file = 'automotive_test_140.csv'
df = pd.read_csv(file, header=0, sep = ";")
# Auswahl der drei Merkmale in der Clusterananlyse
merkmale = df.iloc[:,[6,7,23]].copy() ;
X = merkmale.to_numpy()
# Zeige die ersten 5 Daten zur Kontrolle an
merkmale.head(5)
Erläuterung des Codes:
- Zeile 2: Die Datei automotive_test_140.csv wird zum Einlesen festgelegt.
- Zeile 3: Die Funktion read_csv() wird mit zum Einlesen des Datensatzes aufgerufen.
- Zeile 6: Es erfolgt eine Auswahl und Speicherung der drei Merkmale/Variablen/Spalten unter dem Namen merkmale.
- Zeile 7: Die Merkmale der Beobachtungen werden in ein Numpy-Array mit Namen X kopiert. Das Array X wird später als Eingabeparameter des AgglomerativeClustering verwendet.
- Zeile 10: Die ersten 5 Beobachtungen der ausgewählten Merkmale werden ausgegeben.
Die Ausgabe nach Ausführung dieses Codeblocks sieht ähnlich aus wie abgebildet.
3.3 Clusteranalyse durchführen
Das Importieren der benötigten Bibliotheken bzw. derer Funktionen und das Einlesen und Visualisieren der Daten erfolgt wie bereits im vorherigen Abschnitt beschrieben. Wir starten in diesem Abschnitt direkt bei der Durchführung der Clusteranalyse und der Erstellung eines Dendrogramms mittels der scikit-learn- und sciPy-Bibliothek.
Vorbereitung: Dendrogramm erstellen
Das Dendrogramm wird mittels dendrogram-Funktion des cluster.hierarchy-Pakets der sciPy-Bibliothek durchgeführt und stellt bei Ungewissheit zur Anzahl der Cluster/Zentren ein vorbereitendes Mittel zur Auswahl der Clusteranzahl dar.
fig = plt.figure(figsize=(10, 7))
ax = fig.add_axes([0.1,0.1,0.75,0.75])
ax.set_title("Hierarchisches Cluster-Dendogramm mit 4 bis 5 Clustern")
ax.set_xlabel("Distanz")
ax.set_ylabel("Cluster")
Z = shc.linkage(X, method='ward')
dend = shc.dendrogram(Z)
plt.savefig("dendogramm.svg, dpi=320, format="svg", bbox_inches='tight')
Erläuterung des Codes:
- Zeile 1 bis 5: Bereitet ein Grafikfenster mit einer festen Größe, Titel und Achsenbeschriftungen vor. Die x-Achse zeigt die Distanz der Cluster, die y-Achse die Anzahl der Cluster.
- Zeile 6: Die linkage-Funktion des cluster.hierarchy-Pakets der sciPy-Bibliothek führt eine hierarchische Clusteranalyse mittels verschiedener auswählbarer Linkfunktionen durch und gibt ein Array mit vier Spalten Z zurück. Der Abstand zwischen den Clustern Z[i, 0] und Z[i, 1] wird durch Z[i, 2] gegeben. Der Linkage-Algorithmus für die Erstellung eines Dendogramms überprüft in jedem Schritt, welche Cluster den geringsten Abstand zueinander haben, und fusioniert diese zu einem neuen Cluster. Je nach Linkage-Methode wird die Distanz zwischen den Clustern unterschiedlich bestimmt. Mögliche Optionen für die Linkfunktion sind 'single', 'complete', 'average', 'weighted' oder 'ward'. Die Ward-Methode ist eine Varianz-basierte-Methode, bei welcher Cluster, die den kleinsten Zuwachs der totalen Varianz aufweisen, fusioniert werden.
- Zeile 7-8: Das Rückgabe-Array Z dieser Methode wird der dendrogram-Funktion übergeben, um ein Dendrogramm zu erstellen. Das Diagramm kann optional als SVG-Bilddatei gespeichert werden.
Die Ausgabe nach Ausführung dieses Codeblocks sieht ähnlich aus wie abgebildet. Das Dendrogramm zeigt das Vorhandensein von 4 oder 5 Clustern an. Die Information über die Anzahl der Cluster verwenden wir bei der Durchführung der Clusteranalyse, die im nächsten Schritt erfolgt.
3.4 Detaillierte Clusteranalyse durchführen
Die detaillierte Clusteranalyse wird mittels der AgglomerativeClustering aus dem sklearn.cluster-Paket der scikit-learn-Bibliothek durchgeführt.
print("Erstelle Modell für Hierarchisches Clustering ...")
# Lege Clusteranzahl fest
n = 4
# Erstelle Vorhersagemodell model
model = AgglomerativeClustering(n_clusters=n, linkage='ward').fit(X)
# Gebe Zuordnungen zu Clustern aus
zuordnung = model.labels_
print("Anzahl Beobachtungen: %d" % zuordnung.size)
print("Zuordnung der Beobachtungen zu Cluster-Zentren 0, 1, 2, 3:")
print(zuordnung)
Erläuterung des Codes:
- Zeile 3 Die Anzahl der Cluster bzw. Zentren wird festgelegt, hier n = 4.
- Zeile 5: Das Vorhersagemodell model wird mit Hilfe der Methode fit() der Klasse AgglomerativeClustering erstellt. Hier wird in einem Schritt zunächst eine Instanz der Klasse AgglomerativeClustering mit den Argumenten: n_clusters=n und linkage='ward' erstellt, und danach die Methode fit() mit den Datenpunkten X als Parameter aufgerufen.
- Zeile 6 bis 10: Die Zuordnungen zu den Clustern werden für die Beobachtungen gespeichert und ausgegeben. Das Array zuordnung ist folgendermaßen zu interpretieren: die erste Beobachtung ist im Cluster 0, die zweite im Cluster 3, .., die letzte im Cluster 3.
Die Ausgabe nach Ausführung dieses Codeblocks sieht ähnlich aus wie abgebildet.
3.5 Zuordnung der Daten zu den Clustern visualisieren
Die Ergebnis, d.h. die Zuordnung der Beobachtungen zu den vier möglichen Zentren/Clustern, wird als 3D-Plot dargestellt. Dazu wird das Toolkit mplot3d verwendet, dieses Toolkit erweitert die Bibliothek Matplotlib um Methoden zur Erstellung von 3D-Grafiken, z.B. um die Funktion Axes3D, die ein 3D-Grafikfenster erstellt.
# Daten visualisieren
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(projection='3d')
for z in np.unique(zuordnung):
ax.scatter(X[zuordnung == z, 0], X[zuordnung == z, 1], X[zuordnung == z, 2],
color=plt.cm.jet(float(z) / np.max(zuordnung + 1)),
s=20, edgecolor='k')
plt.title('Clusterzuordnung der Motoren')
ax.set_xlabel('Ansaugkruemmerdruck')
ax.set_ylabel('Drosselklappenstellung')
ax.set_zlabel('Katalysatortemperatur')
plt.show()
Erläuterung des Codes:
- Zeile 2-3: Es wird einen Figur mit vorgegebener Breite und Höhe und ein 3D-Grafikfenster erstellt.
- Zeile 5-8: Die Beobachtungen je nach Zuordnung zu den Clustern (z=0,1,2 und 3) werden in einer for-Schleife abgerufen und je nach Cluster-Zuordnung wird der Datenpunkt unterschiedlich im Plot eingefärbt.
- Zeile 10-14: Der Titel und die Achsenbeschriftungen des Plots werden angepasst.
Die Ausgabe nach Ausführung dieses Codeblocks sieht ähnlich aus wie abgebildet.
4 Die Interpretation
Bei der Verwendung von Clusteranalysen ist, wie bei allen Datenanalysen, ein Verständnis der fachlichen Bedeutung der ausgewerteten Daten wichtig, um die Ergebnisse korrekt interpretieren zu können. Um die in Abschnitt 4.1 gegebene Interpretation der Clusterbildung nachvollziehen zu können, werden in den folgenden Abschnitten 4.2 und 4.3 die Zusammenhänge und Mechanismen im Viertaktmotor und insbesondere die Komponenten Drosselklappe, Ansaugkrümmer und Katalysator, sowie deren Ausstattung mit Sensoren, erläutert. Die über die Sensoren erfassten Werte, die als Merkmale in den Automotive-Datensatz eingehen, werden inkl. Skaleneinheit ebenfalls vorgestellt.
Bei der Bildung und Visualisierung der Cluster fällt auf, dass
- die Cluster unabhängig von der Katalysatortemperatur gebildet wurden
- ein Cluster bei der Merkmalskombination Ansaugkrümmerdruck niedrig und Drosselklappenstellung niedrig entsteht (Farbe: orange)
- ein weiteres Cluster bei der Merkmalskombination Ansaugkrümmerdruck hoch und Drosselklappenstellung niedrig entsteht (Farbe: grün)
Die Visualisierung in 2-dimensionalen Grafiken Ansaugkrümmerdruck vs. Drosselklappenstellung, Ansaugkrümmerdruck vs. Katalysatortemperatur
und Drosselklappenstellung vs. Katalysatortemperatur zeigen auch, dass es keinen direkten Zusammenhang zwischen der
Katalysatortemperatur und den anderen beiden Variablen gibt. In der Grafik Ansaugkrümmerdruck vs. Drosselklappenstellung ist die
Bildung der Cluster, wie sie die obige Analyse ergeben hat, ebenfalls zu erkennen: es besteht ein grafischer Zusammenhang/Abhängigkeit
zwischen Ansaugkrümmerdruck niedrig und Drosselklappenstellung niedrig und Ansaugkrümmerdruck hoch und Drosselklappenstellung niedrig.
2D-Plot 1 | 2D-Plot 2 | 2D-Plot 3 |
---|---|---|
|
|
|
4.1 Interpretation der Cluster
Die Bildung der Cluster (orange und grün) spiegeln den funktionalen Zusammenhang zwischen den Bauteilen Ansaugkrümmer und
Drosselklappe wieder. Eine Drosselklappe wird dazu verwendet, um den Ansaugkrümmerdruck und damit die Ansaugluftdichte zu regeln.
Im Verbrennungsmotor, der wie eine Luftpumpe wirkt, wird die Luft oder Luft-Kraftstoff-Gemisch durch den Einlass ein und durch den Auslass heraus gedrückt.
Der Durchfluss dieser Luftmasse oder des Gemisches hängt neben der Motorendrehzahl und dem Hubraum und eben auch von der
Luftdichte des Ansaugkrümmers ab und damit indirekt von der Stellung der Drosselklappe.
Bei der Interpretation der Cluster spielen die beiden Zustände Leerlauf und Volllast eine Rolle. Bei Leerlauf sind die
Drosselklappe und ein sogenannter Leerlaufschalter geschlossen. Erreicht der Öffnungswinkel einen vom Motorsteuergerät
festgelegten Wert,
startet der Volllastbereich und ein Volllastschalter wird geschlossen. Bei geschlossenem Volllastschalter
wird die Kraftstoffeinspritzmenge erhöht, um bessere Leistungswerte zu erzielen. Die Widerstandswerte des Drosselklappensensors liegen
bei geschlossener Drosselklappe (Leerlauf) z.B. bei 1190 Ohm bzw. 1.19 kohm, und bei geöffneter Drosselklappe (Volllast) z.B. bei 9200 Ohm
bzw. 9.2 kohm.
Die beiden Cluster (orange und grün) beinhalten damit Motoren, deren Drosselklappen sich in geschlossenen (Leerlauf) oder leicht
geöffneten Zustand (Anlassen eines Motors) befinden. Das Verhalten des Ansaugkrümmerdrucks während des Leerlaufs kann wie folgt beschrieben werden:
Die dicht geschlossene Drosselklappe drosselt den Luftdurchfluss aus der Umgebung, wenn der Motor Luftmasse von Ansaugkrümmer
weg pumpt. Der kumulative Effekt ist eine Verringerung der Ansaugkrümmerluftdichte, was zu einem reduzierten Gesamtdruck im Vergleich zum
Luftdruck führt (orangenes Cluster).
Folgende Kennwerte und Zusammenhänge sind für den Zustand des Anlassens von Bedeutung: 0 bar wird als relativer Druck ausgedrückt und entspricht dem Luftdruck,
der Ansaugkrümmerdruck liegt anfangs bei 0 bar (Luftdruck), wenn der Motor steht oder sich im Leerlauf befindet.
Der Druck fällt unter 0 bar, wenn der Motor angelassen wurde (leichte Drosselklappenöffnung) und ein Ansaugtakt des Motors die nötigen Bedingungen geschaffen hat.
Der Ansaugkrümmerdruck spiegelt die Nettowirkung aller gleichzeitig stattfindenden
Zylinder- und Ansauginteraktionen wider. Diese Beziehungen sind komplex. Zum Beispiel treten beim Start jedes
Ansaugtakts auch Ventilüberschneidungsszenarien auf, die Einfluss auf den Druck haben.
Beim Anlassen spielen neben der Drosselklappenstellung
also auch andere Bauteile und die Motorkonstruktion eine große Rolle und somit ist das Cluster (grün, Anlass-Betrieb des Motors) und
der erhöhte Ansaugkrümmerdruck im Cluster einzig
mit Blick auf die Drosselklappenstellung nicht so einfach zu interpretieren wie ein Leerlauf-Betrieb eines Motors (orangenes Cluster).
Die Clusteranalyse zeigt aber einen deutlichen Einfluss der Drosselklappe auf den Ansaugkrümmerdruck beim Anlassen eines Motors, was
den funktionalen Zusammenhang der Bauteile wiederspiegelt.
5 Weiterführende Fragen
Die Clusterbildung unabhängig von der Katalysatortemperatur zeigt, dass dieses Bauteil keinen direkten Einfluss auf die beiden anderen
ausgewählten Bauteile/Merkmale Drosselklappenstellung und Ansaugkrümmerdruck hat. Da zum Katalysatorschutz aber je nach Abstimmung des Motormanagements
die Einspritzmenge (und damit der Kraftstoffverbrauch) erhöht wird, um den Katalysator zu kühlen, wäre das Aufnehmen weiterer Merkmale, die
damit in Zusammenhang stehen, für eine weiterführende Clusteranalyse sinnvoll.
Mögliche Merkmale aus dem Automobildatensatz für eine erweiterte Clusteranalyse sind
die eingesetze Einspritzmenge in Kurzzeit, die eingesetze Einspritzmenge in Langzeit sowie der Kraftsstoffeinsatz. Aufgrund eines möglichen
erhöhten Kraftstoffeinsatzes zum Katalysatorschutz ist auch das Merkmal der Kraftstoffdampfsäuberung, das zeigt wie gut
der Katalysator arbeitet, eine sinnvolles Merkmal für eine Clusteranalyse im höher dimensionalen Raum.
Auch hinsichtlich weiterer Analysen in Bezug auf den Gesamtzustand des Motors, seiner Leistungsfähigkeit, einer möglichen Wartung oder eines Ausfalls spielt
die Wirkung der Bauteile untereinander und
ihr Zustand und ihre Wirkungsweise eine entscheidende Rolle.
Autoren, Tools und Quellen
Autoren:
M.Sc. Anke Welz
Prof. Dr. Eva Maria Kiss
Tools:
Quellen und weiterführende Links: