Diabetes ist eine chronische Stoffwechselerkrankung, bei der ein Mangel an dem körpereigenen Hormon Insulin auftritt. Im Jahr 2018 sind laut Deutschem Gesundheitsbericht 6,7 Millionen Menschen in Deutschland an Diabetes erkrankt, Tendenz steigend. Ohne Behandlung kann Diabetes die Komplikationsrate für Herzinfarkt und Schlaganfall verdoppeln oder sogar verdreifachen. Weitere Folgen können Amputationen und Erblindung sein. Um die Krankheit schnell und sicher zu erkennen, können Machine Learning Models hilfreich sein. Quellen und Referenzen sind direkt im Text verlinkt
Ziel
Das Ziel ist es, aus den vorliegenden Daten ein Model aufbauen, das die Wahrscheinlichkeit einer Diabetes Erkrankung bei Patientinnen vorhersagen kann, um rechtzeitig entsprechende Maßnahmen ergreifen zu können. Die Art des Lernens ist eine überwachte binäre Klassifikation mit der Ausgabe 0 für eine geringe Wahrscheinlichkeit für die Patientin, an Diabetes zu erkranken und 1 für eine sehr hohe Wahrscheinlichkeit, an Diabetes zu erkranken.
Datensatz
Der Datensatz stammt von der Machine Learning Repository und wurde vom National Institute of Diabetes and Digestive and Kidney Diseases im Jahr 1990 zusammengestellt. Er beinhaltet die Beobachtungen aus einer Population der Pima Indianer, die in der Nähe von Phoenix, Arizona, leben. Diese Population hat sich in der Vergangenheit als besonders anfällig für Diabetes gezeigt. Der Datensatz besteht aus 768 Beobachtungen und 8 Attributen (Variablen). Alle Teilnehmer sind Frauen im Alter zwischen 21 und 81 Jahren. Die acht Variablen und die Zielvariable sind numerisch.
Erklärung der Variablen
Pregnancies: Anzahl der Schwangerschaften
Glucose: Plasma Glukose Konzentration 2 h in einem oralen Glukose-Toleranz Test
BloodPressure: Blutdruck (mm Hg)
SkinThickness: Dicke der Haut (mm)
Insulin: Serum Insulin 2 h nach Glukosegabe (µU/ml)
BMI: Body mass index
DiabetesPedigreeFunction: Kennzahl aus der Historie von Diabetes in der Verwandtschaft
Age: Alter in Jahren
Outcome: Zielvariable (0 oder 1)
Ausschnitt
Methode
Daten bereinigen und formatieren, eventuell Fehler beheben
Ziel der Exploration ist es, den Datensatz zu beschreiben und ein Gefühl für Beziehungen und Zusammenhänge zu bekommen, die später im Model eine Rolle spielen können. Die Daten sollten währenddessen immer auf Konsistenz und Korrektheit überprüft werden (Garbage in, Garbage out)
Feature Engineering
Da es nur acht Features gibt, wurde das Feature Engineering erst im Anschluss an die Algorithmen-Auswahl mit Hilfe des gewählten Algorithmus gemacht.
An dieser Stelle wurde Recursive Feature Elimination verwendet, um zu sehen, welches die wichtigsten Features im Model sind und ob es sinnvoll ist, einige der weniger relevanten Features zu eliminieren.
Vorbereitung der Daten für das Modeling
Da zuerst mehrere Algorithmen getestet werden sollen, ist es sinnvoll, den Datensatz auszugleichen und zu normalisieren, da manche Algorithmen sonst nicht korrekt aus den Daten lernen können. Je nachdem, auf welchen Algorithmus im Anschluss die Wahl fällt, kann dann der Original-Datensatz verwendet werden.
Train- und Testset
Ein Test Set wird zu Anfang erstellt und dann beiseitegelegt. Es wird am Ende, wenn das Model kreiert wurde, verwendet, um die Performance des Models zu evaluieren. Auf keinen Fall sollten die Train Daten zum Testen oder andersherum verwendet werden, da das Model hier nicht lernen würde, zu generalisieren. Die Ergebnisse wäre sehr gut, aber das Model wäre overfitted und würde bei neuen Daten sehr schlechte Ergebnisse zeigen.
Umgang mit Class Imbalance
Wenn es sehr viel mehr Instanzen einer Klasse gibt, als von der anderen, ist der Datensatz unausgeglichen (Class Imbalance). Für die meisten Machine Learning Algorithmen ist es so schwer, die unterrepräsentierte Klasse zu lernen. Es gibt mehrere Möglichkeiten, dem Problem zu begegnen:
Mehr Daten sammeln, was die beste Alternative ist, allerdings leider nicht immer möglich.
Oversampling: Es werden neue Instanzen der Klasse, die sich in der Minorität befindet, kreiert
Undersampling: Von der Mehrheitsklasse werden Instanzen gelöscht, um einen ausgeglicheneren Datensatz zu erhalten.
Manche Algorithmen haben einen Hyperparameter, der entsprechend gesetzt werden kann, wenn der Datensatz unausgeglichen ist.
Das Resampling wird nur mit dem Train Datensatz gemacht, damit die Maschine Gelegenheit hat, alle Klassen zu lernen. Der Test Datensatz bleibt unberührt. Das Aufteilen des Datensatzes in Trainings und Test-Datensätze und bei der Kreuzvalidierung soll stratifiziert erfolgen, damit alle Klassen in jedem Datensatz bzw. Fold repräsentiert sind.
Die Daten werden mit dem StandardScaler aus Scikit-Learn normalisiert.
Damit werden alle Features jeweils so transformiert, dass sie normalverteilt sind, der Mittelweirt bei 0 liegt und die Standardabweichung = 1 ist.
Modeling
Metrik
Hier wird der F1 Score als Metrik verwendet. Er ist eine Kombination aus Precision und Recall und ideal für Probleme, bei denen der Datensatz unausgeglichen ist.
Bei der Berechnung des Mittelwertes in der Kreuzvalidierung für die Auswahl des Algorithmus wird als average „micro“ oder „weighted“ verwendet, weil hier die Klassen entsprechend gewichtet werden.
Vergleich und Auswahl von Algorithmen
Im Allgemeinen ist es so, dass kein Algorithmus immer der Beste für eine bestimmte Problemart ist (No Free Lunch Theorem). Daher werden mehrere Algorithmen, die zur Problemstellung passen, getestet. Dann wird derjenige Algorithmus, der am besten performt, ausgewählt, um weiter optimiert zu werden.
Folgende Algorithmen werden getestet:
Logistic Regression
Random Forest Classifier (Ensemble Methode)
Gradient Boosting Classifier (Ensemble Methode)
Support Vector Classifier
K-nearest Neighbors Classifier
Auswahl
Der Gradient Boosting Classifier schneidet im Performance Test mit diesem Datensatz am besten ab und wird gewählt, um weiter optimiert zu werden.
Optimierung des Models
Train Test Split
Baseline
Gradient Boosting Classifier Baseline
GridSearch für beste Hyperparameter
Feature Sets testen
Model mit Recursive Feature Elimination
Zusammenfassung
Folgende Schritte wurden im Projekt unternommen
Bereinigung der Daten und Exploration
Feature Engineering
Vergleich und Auswahl von Algorithmen
Hyperparameter Tuning des besten Algorithmus
Testen zweier verschiedenen Feature-Sets
Das beste Model auf dem Test-Set wurde evaluiert
Das beste Modell war die Kombination aus dem Algorithmus Gradient Boosting mit dem kompletten Feature Set. Vergleichbare Ergebnisse brachte es, die Features zu reduzieren, was sich aber bei der geringen Anzahl der Features nicht lohnt, da sich die Rechenzeit nicht nennenswert reduziert.
Verbesserungsmöglichkeiten
Mehr Daten sammeln, neue Variablen in den Datensatz integrieren
XG Boost testen
Ensemble der besten Algorithmen verwenden
In diesem Projekt wurden fehlende Werte (Nullwerte) mit dem Median des Features ersetzt, da einige der Variablen Altersabhängig sind, könnte es sinnvoll sein, mit dem Median für die Altersgruppe zu ersetzen.
Weitere Erkenntnisse
Wenn es um die Erkennung von Krankheiten geht, ist es sehr wichtig, alle positiven Fälle (=krank) zweifelsfrei zu erkennen. Selbst, wenn es hin und wieder passiert, dass ein gesunder Patient als krank klassifiziert wird, sind die Kosten (= Gefahr für den Patienten) geringer, als wenn ein kranker Patient nicht als solcher erkannt wird und unbehandelt bleibt. Daher müssen die False negatives verringert werden. Dies könnte in einem zukünftigen Projekt mit einer Verschiebung der Entscheidungs-Schwelle gemacht werden. Statt den F1-Score zu verwenden, könnte es dann sinnvoll sein, Precision und Recall zu verwenden.