Eine Erkrankung an Diabetes vorhersagen

Photo by Tumisu on pixabay

Eine Erkrankung an Diabetes vorhersagen

Hintergrund

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
  • Explorative Datenanalyse
  • Feature Engineering und Selection
  • Vergleich mehrerer infrage kommender Algorithmen
  • Den besten Algorithmus optimieren
  • Das Model aufbauen
  • Interpretation der Ergebnisse

Tools

Data Cleaning und Exploration

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.

Hier verwende ich SMOTE für das Oversampling.

Feature Transformation

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.

F1 = 2 * (precision * recall) / (precision + recall)

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

  1. Bereinigung der Daten und Exploration
  2. Feature Engineering
  3. Vergleich und Auswahl von Algorithmen
  4. Hyperparameter Tuning des besten Algorithmus
  5. Testen zweier verschiedenen Feature-Sets
  6. 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.

Comments are closed.