›   Demo 3: Predictive Maintenance mit R
›  Datenanalyse mit RStudio

Datenanalyse wird mit Hilfe spezialisierter Tools und Programmbibliotheken durchgeführt, die die Komplexität der zugrundeliegenden Algorithmen verbergen und Funktionalität wie Datenimport, Datenbereinigung, modellbasierte Entwicklung und Visualisierung der Ergebnisse anbieten. Datenanalyse gilt als eine Disziplin für Spezialisten, kommerzielle Tools sind teuer und die Einstiegshürde ist hoch. Für den Einstieg eignen sich Tools wie RStudio, RapidMiner, Python Spyder oder die MATLAB-Toolbox für maschinelles Lernen.

In Demo 3: Predictive Maintenance mit R setzen wir den Schwerpunkt auf die Datenanalyse und verwenden die statistische Programmiersprache R mit der passenden Entwicklungsumgebung RStudio. Demo 3 veranschaulicht die Vorausschauende Wartung am Beispiel des Automobildatensatzes, den wir auch in Demo 2 verwendet haben, und der als CSV-Datei vorliegt. Der Automobildatensatz wird, wie in Schritt 4: Datenanalyse beschrieben, in einen Trainings- und Testdatensatz aufgeteilt. Danach werden die Datensätze in RStudio eingelesen, mit Hilfe des Trainingsdatensatzes wird ein Entscheidungsbaum-Modell erstellt, das dann zur Klassifikation bzw. der Vorhersage eines Ausfalls im Testdatensatz verwendet werden kann.

Die Abbildung des Prozesses in RStudio wird durch ein 7-Minuten-Video veranschaulicht.

Der Automobildatensatz

Der Automobildatensatz wird zunächst interpretiert, auf Vollständigkeit der Daten überprüft und in einen Trainings- und einen Testdatensatz aufgeteilt. Damit liegt er in einer Form vor, die von einem Datenanalyse-Tool verwendet werden kann. Der Automobildatensatz besteht aus insgesamt 136 Beobachtungen von 7 Motoren.

Der Trainingsdatensatz

Trainingsdatensatz

Der Testdatensatz

Testdatensatz

Aufbau des Datensatzes

Jede Beobachtung enthält den Vorhersagewert Ausfall, mit angenommenen Werten ja/nein, die Messungsnummer, und Sensorwerte zu insgesamt 22 Merkmalen. Für den 7. Motor liegen nur 16 Messungen vor. Die erhobenen Merkmalswerte stammen aus Temperatur- und Druckmessungen sowie Mengenangaben zum Kraftstoff und zu Abgasdämpfen, die an verschiedenen Stellen im Motor erfasst wurden.

Weiterhin enthält der Datensatz acht Merkmale zu den Lambdasonden, die an jeweils einem Zylinder im Motor Messwerte liefern und in 2 Bänke unterteilt sind (d.h. das Merkmal Lambdasonde32 gibt den Sensorwert vom dritten Zylinder innerhalb der zweiten Bank an).

Bis auf die Katalysatortemperatur (Merkmalsname: KatalysatortempKategorie, Werte: normal/hoch) liegen für alle Merkmale numerische Messungen vor.

Numerische vs. diskrete Messungen

Viele Messungen stellen numerische Werte dar, d.h. reelle Zahlen in einem bestimmten Wertebereich. Die Kühlmitteltemperatur kann z.B. eine Zahl zwischen 0.2 und 11.2 sein. Einige Messungen können auch diskrete Werte ergeben, d.h. ganze Zahlen oder Kategorien (1=normal, 2=hoch). Der Wertebereich der einzelnen Merkmale hat einen Einfluss darauf, welcher Algorithmus für die Modellbildung verwendet werden kann.

Weitere Details über den Automobildatensatz

Die Daten liegen im CSV-Format (engl. comma-separated values) vor, d.h. als komma-getrennte Werte. In CSV-Dateien können Tabellen oder Listen unterschiedlicher Längen abgebildet werden.

Die Fragestellung

Uns interessiert, welche Merkmalskombinationen, d.h. welches Zusammenspiel der Sensorwerte, zu einem Ausfall der Anlage/Motors führen. Die Frage, die der Entscheidungsbaum beantworten soll, lautet also: Welche Kombination von Merkmalen wird zu einem Ausfall führen? Werden alle Merkmale einen Einfluss auf den Ausfall haben und falls nein, mit welchem Gewicht werden welche Merkmale einen Ausfall bewirken?

Die Entwicklungsumgebung

Als Datenanalyse-Tool wird RStudio eingesetzt. RStudio ist eine Entwicklungsumgebung und grafische Benutzeroberfläche für Datenanalyse mit Hilfe der statistischen Programmiersprache R, die in Open-Source- und kommerziellen Editionen erhältlich ist und auf dem Desktop (Windows, Mac und Linux) oder in einem Browser läuft. RStudio kann als Client oder Server betrieben werden und ist über Pakete (Packages) erweiterbar. Die zur Datenanalyse benötigten Algorithmen sind in Pakete zusammengefasst, die nach Bedarf geladen werden können. Alle gängigen Aufgaben der Datenanalyse werden so abgebildet und über Pakete, die aus der R-Konsole installiert werden können, zur Verfügung gestellt. Mit Hilfe des Packages R Shiny aus R können z.B. Webseiten für Datenanalysen gebaut werden.

Die Datenanalyse mit R

Schritt 4 Datenanalyse der "Vorausschauenden Wartung" wird nun am Beispiel des Automobildatensatzes mit der Programmiersprache R und Rstudio als Entwicklungsumgebung durchgeführt.

Der R-Code der Datenanalyse ist im Block Analyse-Code zu sehen und beinhaltet verschiedene Schritte: Einlesen und Speichern der Daten (Details in Tab "Daten"), Bearbeitung der Daten (Details in Tab "Daten"), die Analyse der Trainingsdaten (Details in Tab "Analyse") und die Vorhersage mit Hilfe des erstellten Entscheidungsbaum-Modells (Details in Tab "Vorhersage").

                          
  #Demo 3: Predictive Maintenance mit R 
  #        Analyse 
 
  # Lade benötigte Pakete
  library(rpart)
 
  #Setze den Arbeitspfad
  setwd("C:/Demo3")
 
  #Lese CSV-Datei und speichere 
  #sie unter dem Namen "demo3"
  demo3=read.csv2( "demo3_data.csv")
 
  #Wähle Merkmale aus
  #Erstelle Trainingsdaten demo3training
  demo3training=demo3[ ,c(-1,-24)]
 
  #Erstelle Entscheidungsbaum 
  #mit dem CART-Algorithmus
  fit = rpart(Ausfall ~ .,   
        data=demo3training,               
        method="class",                   
        parms=list( split="information"),
        control=list( minsplit=15)) 
 
  #Gebe den Baum in Textform aus
  print(fit)  
 
  #Erstelle die Grafik des Baums
  plot(fit, uniform=TRUE,
       main="Class. Tree for Automotive")
  text(fit, use.n=TRUE, all=TRUE, cex=.8, pretty=FALSE)
                          
  #Demo 3: Predictive Maintenance mit R 
  #        Vorhersage 
 
  #Lese CSV-Datei und speichere sie
  #unter dem Namen "demo3test"
  demo3test=read.csv2( "demo3_datatest.csv")
 
  #Erstelle Testdaten testdata aus demo3test
  #ohne die Variablen Messungsnummer und Katalysatortemp.
  testdata=demo3test[ ,c(-1,-24)]                              
 
  #Vorhersage für die Testdaten/neue Beobachtungen
  pred = predict(fit, newdata=testdata, type="class")
 
  #erweiterte Ausgabe der Vorhersage für die Testdaten
  cbind(predict(fit, newdata=testdata, type="prob"),
  pred)                       

Hier können Sie den Quellcode des Projektes herunterladen, die Datei demo3.R (als komprimierte zip-Datei).

Im allgemeinen Teil des Analyse-Codes (Zeile 1-8) werden die benötigten Pakete geladen. Hier wird das "rpart"-Paket geladen, dieses enthält Funktionen, die zur Erstellung eines Klassifikationsmodells gebraucht werden. Z.B. die gleichnamige Funktion rpart, die den Entscheidungsbaum auf Basis des CART-Algorithmus mittels des Informationgehalt-Kriteriums erstellt.

In Zeile 8 wird der Arbeitspfad gesetzt, dieser Ordner enthält alle Dateien, die eingelesen werden, und dort wird das Programm und dessen Workspace (mit Endung .RData) abgespeichert.

Kommentare werden im R-Code mit dem #-Symbol markiert und dienen der besseren Verständlichkeit des Codes, der mit .R-Endung gespeichert wird.

In den Zeilen 10-17 des Analyse-Codes wird die CSV-Datei "demo3_data.csv" mit der "read.csv2"-Funktion eingelesen und mit der Zuweisung ("="-Zeichen) unter dem Namen "demo3" gespeichert.

Aus diesem Objekt, das die Daten des Automobildatensatzes enthält, werden nun die erste Spalte (die Messungsnummer) und 24. Spalte (Katalysatortemp) entfernt und die gekürzten Daten unter dem Namen "demo3training" gespeichert.

Die "demo3training"-Daten werden in den folgenden Code-Zeilen zur Erstellung des Entscheidungsbaums verwendet.

In den Zeilen 21-24 des Analyse-Codes wird der Entscheidungsbaum mit den Trainingsdaten "demo3training" erstellt indem die "rpart"-Funktion mit den entsprechenden Parametern aufgerufen wird. Das Modell wird unter dem Namen "fit" gespeichert und in den Zeilen 26-32 in Textform (Zeile 27) und als Grafik (Zeile 29-32) ausgegeben.

Das Modell/der Baum wird unter einem Namen gespeichert, damit dieser im nächsten Schritt zur Vorhersage verwendet werden kann.

Der Vorhersage-Code ist die Fortsetzung des Analyse-Codes und beinhaltet das Einlesen der Testdaten mittels der "read.csv2"-Funktion und dessen Speicherung unter dem Namen "demo3test" (Zeile 6), wie schon bei den Trainingsdaten werden die Testdaten gekürzt (Löschen von 1. und 24.Spalte/Merkmal) und dann unter dem Namen "testdata" gespeichert ("="- Symbol, Zeile 10).

Die Vorhersage für die Testdaten erfolgt durch Aufruf der "predict"-Funktion (Zeile 13), an die das Modell "fit" und die Testdaten "testdata" übergeben werden. Die Vorhersage wird unter dem Namen "pred" gespeichert.

Um die Vorhersage detaillierter darzustellen, wird neben der Klasseneinteilung (type="class", Ausfall: Ja/Nein) für die neuen Daten/Testdaten auch die Wahrscheinlichkeit für die Einteilung in die jeweilige Klasse vorhergesagt (type="prob") und die erweiterte Vorhersage als Gesamtvorhersage (mittels "cbind"-Funktion, Zeile 16 und 17) ausgegeben.

Die Datenanalyse wird mit Hilfe der Funktionen "read.csv2" (Daten aus Datei einlesen), "rpart" (Klassifikationsmodell erstellen) und "predict" (Modell anwenden) zusammengebaut.

Die Speicherung von Daten erfolgt in R durch Zuweisungen ("=") und die Merkmalsauswahl mittels Aufruf (demo3test[ ,c(1,2)]: Aufruf von Spalte 1 und 2) bzw. Löschen der entsprechenden Spalten (demo3test[ ,c(-1,-2)]: Löschen von Spalte 1 und 2).

Die library-Funktion lädt Pakete in der aktuelle R-Sitzung.

Die library-Funktion ist eine Funktion, die Pakete in die aktuelle R-Sitzung lädt und somit deren Funktionen zur Verfügung stellt.
Die library-Funktion wird in unserem Prozess verwendet um das rpart-Paket zu laden, dieses enthält Funktionen, die zur Erstellung und grafischen Darstellung von Klassifikationsmodellen verwendet werden.

Die setwd-Funktion setzt den Arbeitspfad für die aktuelle R-Sitzung.

Die setwd-Funktion ist eine Funktion, die den Arbeitspfad der aktuellen R-Sitzung festlegt, damit entfällt die Angabe des Pfades beim Speichern oder Laden von Workspaces und Daten.

Die read.csv2-Funktion liest Daten im CSV.-Format ein.

Die read.csv2-Funktion ist eine Funktion, die Daten im CSV.-Format einliest.
Die read.csv2-Funktion wird in unserem Prozess zweimal verwendet: einmal, um den Trainingsdatensatz einzubinden, und einmal, um den Testdatensatz einzubinden.

Die rpart-Funktion erstellt den Entscheidungsbaum.

Die rpart-Funktion ist eine Funktion aus dem rpart-Paket, die für die Daten den passenden Algorithmus wählt und einen Entscheidungsbaum auf Basis eines unter den Parametern wählbaren Kriteriums erstellt, z.B. der Entropie bzw. des Informationgehalts.
Wir erstellen den Baum mittels des Entropie/Informationgehalt-Kriteriums (split="information") basierend auf den Trainingsdatensatz der Motoren.

Die Vorhersagevariable "Ausfall" wird mit Angabe der Modellformel als erster Parameter in der rpart-Funktion definiert. In unserer Demo lautet die übergebene Modellformel "Ausfall ~ .", links vom Tilde-Zeichen steht die Variable, die vorhergesagt werden soll und rechts vom Tilde-Zeichen die Merkmale, die zur Modellbildung verwendet werden sollen, hier steht der Punkt "~." für die Verwendung aller Merkmale des Datensatzes.

Die Ausgabe-Funktionen für das Modell: print, plot und text.

Die print-Funktion ist eine Funktion, die das Modell/den Baum in Textform im Output-Fenster ausgibt.

Die plot-Funktion ist eine Funktion, die die Äste, Knoten und Blätter des Baums im Grafikfenster ausgibt. Die Beschriftung mit den Merkmalen, den Bedingungen und den Werten der Vorhersagevariablen erfolgt mit Aufruf der text-Funktion. Beiden Funktionen können Parameter übergeben werden, die minimale Übergabe besteht aus dem Entscheidungsbaum, hier "fit".

Die predict-Funktion führt die Vorhersage durch.

Die predict-Funktion ist eine Funktion, die das als Parameter übergebene Vorhersagemodell (hier "fit") auf einen Datensatz (hier newdata=tesdata) anwendet und somit die Vorhersage bzw. Klassifikation für eine neue Beobachtung durchführt.
In unserer Demo wird mit dem Parameter type="class" für neue Beobachtungen bzw. die Zeilen im Testdatensatz eine Klassifikation in Ausfall ja oder nein anhand des Entscheidungsbaums durchgeführt. Mit type="prob" (probability, deutsch: Wahrscheinlichkeit) wird die Wahrscheinlichkeit für die Einteilung in die jeweilige Klasse (Ausfall: JA/NEIN) vorhergesagt. Es erfolgt also in beiden Fällen eine Vorhersage für neue Messwertkombinationen.

In unserer Demo verwenden wir beide Vorhersagevarianten und geben diese durch Spaltenverbindung (cbind-Funktion: column-bind) als eine Gesamtvorhersage(Matrix) aus.

Der Entscheidungsbaum

Der Entscheidungsbaum wählt nur einen Teil der 22 Merkmale zur Vorhersage eines Ausfalls aus. Die Merkmale werden hierarchisch als Baum oder Text dargestellt. In unserer Demo werden die Merkmale Drosselklappenstellung, die Kategorien der Katalysatortemperatur, der Ansaugkrümmer-, der Luft- und der Kraftstoffdruck, sowie der Kraftstoffeinatz und die Einspritzmenge bei Langzeit-Belastung zur Zuordnung in Ausfall ja oder nein verwendet.

An jedem Knoten wird für das jeweilige Merkmal eine Bedingung abgefragt und je nach Beobachtungswert wird nach links (Bedingung erfüllt) oder rechts (Bedingung NICHT erfüllt) zum weiteren Knoten verwiesen. Dort erfolgt eine erneute Bedingung für ein Merkmal mit weiteren Verweis auf den nächsten Knoten. Dies wird solange durchgeführt bis der durchlaufene Pfad an einem Ja/Nein- Blatt des Baumes endet.

Wann kommt es zu einem Ausfall?

Wenn am Ende eines Astes "Ja" steht, dann führt der Pfad/die Merkmalskombination zu einem Ausfall der Anlage andernfalls, d.h. bei "Nein", kommt es bei durchlaufener Merkmalskombination zu keinem Ausfall.

Entscheidungsbaum_Demo3

Je höher des Merkmal im Baum steht, d.h. je weiter oben dessen Position ist, desto mehr Einfluss hat es auf die Vorhersage eines Ausfalls. In unserem Baum hat die Drosselklappenstellung den höchsten Einfluss. An der Aufteilungen in Ja/Nein in den Blättern (z.B. 37/2 im ganzen linken Blatt) erkennt man, wie viele Beobachtungen des Trainingsdatensatzes mit beobachteten Ausfällen Ja/Nein diesem Blatt zugeordnet werden (z.B. insgesamt 39 Beobachtungen im ganzen linken Ast, bei denen 37 mal kein Ausfall vorliegt und 2 mal eine Ausfall). Daraus lassen sich die Wahrscheinlichkeiten für Ausfall Ja oder Nein je Blatt bestimmen, die auch bei der Ausgabe des Baums in Textform angeben sind.

Die oben bereits erwähnte alternative Darstellung des Entscheidungsbaum-Modells in Textform wird in der Programmiersprachen R mit dem print-Befehl standardmäßig ausgegeben.

Entscheidungsbaum Text

Die Ausgabe in Textform ist auf folgende Weise zu lesen: Jeder Knoten oder jedes Blatt des Baumes erhält eine Zeilenausgabe mit folgenden Informationen:

Die Klassifikation mit dem Entscheidungsbaum

Vorhersage mit dem Entscheidungsbaum

Für die Beobachtungen im Testdatensatz, also für neu erfasste Daten, wird nun durch Aufruf der predict-Funktion eine Zuordnung in Ausfall ja oder nein anhand des erstellten Entscheidungsbaum-Modells durchgeführt. Diese Zuordnung/Vorhersage erfolgt mittels Durchwandern des Pfades im Baum bis ein Blatt erreicht wird.

Wie in der obigen Ausgabe von R zu erkennen ist, führen die ersten beiden und die letzte Merkmalskombination laut Baum zu einem Ausfall (Wert/Level: "ja"), die dritte Kombination aber nicht (Wert/Level: "nein").

Die Sicherheit der Zuordnung ist in der erweiterten Vorhersage (type= "prob") in den beiden Spalten "ja" und "nein" angegeben, die die Wahrscheinlichkeiten für Ausfall Ja bzw. Nein für die Merkmalskombination angibt. Diese Wahrscheinlichkeiten sind auch in der Textform des Baums unter (yprob) des Knotens zu finden, zu dem der Pfad der Merkmalskombination der neuen Beobachtung geführt hat. In der dritten Spalte der erweiterten Vorhersage steht 1 für "Ausfall=ja" und 2 für "Ausfall=nein", entsprechend der Sortierung der Werte (Levels) der Vorhersagevariablen (siehe erste, kürzere Vorhersage mit type="class" und rote Kästen).

Mit Beiträgen von: Anke Welz, Eva Kiss
Tools: RStudio, Images: https://openclipart.org/