Einführung
Sepsis ist ein kritischer Gesundheitszustand, der das Immunsystem schwächt und zu Fehlfunktionen lebenswichtiger Organe im Körper führt. Durch einen dramatischen Blutdruckabfall (septischer Schock) kann es zu Schäden an lebenswichtigen Organen kommen, die in ihrer Schwere zum Tod führen. Die meisten Menschen erholen sich von einer leichten Sepsis, die Sterblichkeitsrate bei septischem Schock liegt jedoch bei etwa 30–40 %. Eine frühzeitige Diagnose einer Sepsis erhöht die Überlebenschancen und ein grundlegendes Wissen über die Symptome und Auslöser kann bei der Früherkennung helfen und die Sterblichkeitsrate einer Sepsis senken.
Laut medizinischen Wissenschaftlern variieren die ersten Anzeichen einer Sepsis von Individual zu Individual und sind altersabhängig. Abhängig von der auslösenden Infektion (Bakterien, Viren, Pilze) können die Symptome unterschiedlich sein. Zu den zugrunde liegenden Gesundheitszuständen, die zu einer Sepsis führen können, gehören unter anderem Wunden oder Verbrennungen, Lungenentzündung (Pneumonie), Niere, Blase und andere Teile des Harnsystems sowie Infektionen des Verdauungssystems. Zu den Symptomen gehören Veränderungen des Geisteszustands, schnelles, flaches Atmen, Schwitzen ohne ersichtlichen Grund, Benommenheit und Zittern.
Als Biologe und Datenwissenschaftler ist es faszinierend, anhand früherer Patientendaten zu verstehen, wie wahrscheinlich ein Affected person an einer Sepsis erkrankt. Dieses Projekt hat genau das erreicht, indem es das CRISP-DM-Framework verwendet hat.
Um einen Überblick über den Datensatz zu erhalten, habe ich die Daten in mein Jupyter-Pocket book geladen, um einen Gesamteinblick in die Daten zu erhalten.
Daten
Es wurden zwei CSV-Dateien heruntergeladen: ein Zug- und ein Testdatensatz.
Zu den Bestandteilen der Daten gehören: ID – Nummer zur Darstellung der Patienten-ID, PRG – Plasmaglukose, PL – Blutuntersuchungsergebnis-1 (mu U/ml), PR – Blutdruck (mm Hg), SK – Blutuntersuchungsergebnis-2 (mm), TS – Blut Arbeitsergebnis-3 (mu U/ml), M11 – Physique-Mass-Index (Gewicht in kg/(Körpergröße in m)²), BD2 – Blutuntersuchungsergebnis-4 (mu U/ml), Alter – Alter des Patienten (Jahre) , Versicherung – Wenn ein Affected person eine gültige Versicherungskarte besitzt, Sepsis – Positiv: wenn ein Affected person auf der Intensivstation eine Sepsis entwickeln wird/Negativ: andernfalls.
Nach einer ersten Erkundung wurde eine eingehende explorative Datenanalyse durchgeführt. Die Daten enthielten keine fehlenden Werte oder Duplikate. Allerdings wiesen die Daten Ausreißer und eine Reihe von Nullen in den Zahlenspalten auf.
Sauberkeit und Konsistenz der Daten sind hier die Ziele, deshalb habe ich die Daten organisiert.
Als nächstes wurde die Korrelation aller Datenspalten überprüft und einige Fragen definiert.
Hypothesen
Nullhypothese: Das Alter ist ein entscheidender Faktor für die Entwicklung einer Sepsis.
Different Hypothese: Das Alter ist kein entscheidender Faktor für die Entwicklung einer Sepsis.
Fragen
- Wie viele Patienten neigen dazu, eine Sepsis zu entwickeln? 208
2. Welche Altersgruppe ist anfälliger für die Entwicklung einer Sepsis? Menschen zwischen 20 und 30 Jahren sowie zwischen Ende 40 und 50.
3. Erhöht eine Versicherung das Risiko eines Patienten, an einer Sepsis zu erkranken? Nein, die meisten versicherten Patienten neigen nicht dazu, eine Sepsis zu entwickeln. Daher ist eine Versicherung irrelevant, da sich der Sepsis-Standing nicht ändert, unabhängig davon, ob Sie versichert sind oder nicht.
4. Hängt die Körpermasse direkt mit der Neigung des Patienten zur Sepsis zusammen? NEIN
Basierend auf den Erkenntnissen aus den Daten kamen wir zu dem Schluss, dass das Alter ein entscheidender Faktor für Sepsis ist
Nachdem man sich einen allgemeinen Überblick über die Daten verschafft hatte, wurde ein maschinelles Lernmodell trainiert, um die Möglichkeit einer Sepsis bei einem Patienten vorherzusagen. Die Daten wurden aufbereitet und verarbeitet, um sie für die Analyse geeignet zu machen. Das Ziel battle hier, saubere und konsistente Daten zu haben.
Hier habe ich zwei separate Daten für das Coaching erstellt. Beim ersten habe ich die Ausreißer beschnitten, um Ausreißer zu eliminieren, und beim zweiten habe ich die Ausreißer beibehalten, um zu sehen, ob diese die trainierten Modelle beeinflussen.
Um die Daten weiter für die Modellierung vorzubereiten, wurden die Zugdaten mit Etiketten codiert und die numerischen Spalten skaliert.
Da es sich bei diesem Projekt um ein Klassifizierungsproblem handelte und unsere Prädiktorvariable (Sepsis) ein Klassenungleichgewicht aufwies, habe ich SMOTE verwendet, um die Zugteilmenge auszugleichen, nachdem ich die ursprünglichen Zugdaten in Zug- und Bewertungsteilmenge aufgeteilt hatte.
Zur Modellierung wurden 5 Modelle mit separaten Daten trainiert; getrimmt und ungetrimmt, um festzustellen, ob die Ausreißer die Modellvorhersage beeinflusst haben.
Bewertungsmetriken von Modellen mit beschnittenen Daten
Bewertungsmetriken von Modellen mit ungekürzten Daten
Für beide Datensätze battle das Random Forest-Modell das beste Modell. Allerdings hatte der Datensatz mit beschnittenen Ausreißern bessere Bewertungsmetriken als der Datensatz mit Ausreißern. Darüber hinaus battle aufgrund des Klassenungleichgewichts im Datensatz nicht die Genauigkeit der Bewertungsmaßstab, sondern es wurde der f1-Rating verwendet. Die Verwirrungsmatrix des besten Modells wurde dann nach Auswertung und Hyperparameter-Tuning visualisiert, was eine bessere Punktzahl (0,90) als die ersten Metriken ergab.
Schließlich wurde das trainierte Modell verwendet, um die Testdaten vorherzusagen und die Komponenten des Modells für die Bereitstellung zu exportieren.
Das vorab trainierte Modell wurde mithilfe der Quick API bereitgestellt.
Quick API ist ein Python-Webframework, mit dem APIs schnell und effizient erstellt werden können. Es fungiert als Brücke zwischen dem Modell des maschinellen Lernens (ML) und der App. Mit Quick API können Sie Daten schnell, effizient und sicher analysieren, indem Sie die automatische Dokumentation auswerten.
Erstellen der API
Alle notwendigen Bibliotheken, insbesondere Quick API, wurden mit pip installiert. Die erforderlichen Bibliotheken wurden importiert und das trainierte Modell und seine Komponente geladen. Die Eingabedaten für die API-Schnittstelle wurden mit ihren Komponenten und ihrem Datentyp deklariert. Die Daten wurden dann in einen Pandas-Datenrahmen übertragen und durch die Pipeline für maschinelles Lernen geleitet, um Vorhersagen zu treffen.
Schließlich wurde die API dockerisiert und auf Huggingface bereitgestellt.
Detaillierte Codes und Bereitstellungsmethoden finden Sie unter diesem Hyperlink.
https://github.com/Norkplim22/Embedding-ML-Model-into-a-Web-App.git