Skip to content

cbmi-uthsc/feverPrediction

Repository files navigation

Fever Prediction

Fever prediction model using high-frequency real-time sensor data

Problem Statement: Build a Python-based application to predict fever from ICU sensor data streams. Fever episode is defined when temperature >= 38. In a retrospective model development using data up to 10 hours back, extract features from that window. If a patient had multiple fever episodes during their stay, treat each episode as independent if there is at least a 24 hour interval between the episodes. For controls, identify patients who never had any temperature over 38 or under 34 degrees Celsius. Randomly select a 10 hour period. Build various ml models to predict the onset of fever.

Table of Contents

  1. Introduction
  2. Modules
  3. Code Description
  4. Conclusion
  5. Team
  6. License

Introduction

Background

Fever can provide valuable information for diagnosis and prognosis of various diseases such as pneumonia, dengue, sepsis, etc., therefore, predicting fever early can help in the effectiveness of treatment options and expediting the treatment process. The aim of this project is to develop novel algorithms that can accurately predict fever onset in critically ill patients by applying machine learning technique on continuous physiological data. We have maded a model which can predict the occurence of fever, hours before it actaully occurs. This will provide doctors to take contingency actions early, and will decrease mortality rates significantly.

Dataset

We hace used vitals dataset which is provided by the eICU Collaborative Research Database. It contains continuous physiological data collected every 5-minute from a cohort of over 200,000 critically ill patients admitted to an Intensive Care Unit (ICU) from 200 hospitals over a 2-year period.

Physiological Variabels

  1. Temperature : Patient’s temperature value in celsius
  2. saO2 : Patient’s saO2 value e.g.: 99, 94, 98
  3. heartRate : Patient’s heart rate value e.g.: 102, 104, 70
  4. respiration : Patient’s respiration value e.g.: 25, 20, 17
  5. cvp : Patient’s cvp value e.g.: 359, 272, 293
  6. systemicSystolic : Patient’s systolic value e.g.: 120, 103, 106
  7. systemicDiastolic : Patient’s diastolic value e.g.: 73, 65, 63
  8. systemicMean : Patient’s mean pressure e.g.: 89, 75, 78

Modules

Feature Extraction

For the feature extraction process, we need to introduce the concept of time windows and time before true onset. Preprocessing is done is such a way that the time window, i.e the amount of data in a time period required to train the model is kept constant at 10 hours. So, we always train the model using 10 hrs worth of data. Time before true onset means how early do we want to predict sepsis. This parameter has been varied in steps of 2 hours to get a better understanding of how accuracy drops off as the time difference increases. For this experiment, we have used time priors of 2, 4, 6 and 8 hours. Even the time window has sub window of 0-2 hours, 0-4 hours, 0-6 hours, 0-8 hours and 0-10 hours, the sub windows were created so that our model could get temporal idea also.
Then we preprocessed the entire data according to each of these time differences. i.e. processed data for 2 hours before sepsis with 6 hours of training data, 4 hours before with 6 hours of training data and so on so forth. We used seven physiological variables data streams for 5 diffenet sub window. We then extracted 7 statistical features from each of the original 757 data streams.
They are:

  • Standard Deviation
  • Kurtosis
  • Skewness
  • Mean
  • Minimum
  • Maximum
  • RMS_Difference
Therefore the net features extracted are 245.

Model Development

We built Temporal Convolutional Networks, Logistic Regression, Random Forest and Xgboost. The data is first partitioned into the train (80%) and test (20%) datasets and then trained on the models mentioned above. Metrics like F1 score and AUROC were calculated. We got best result from Temporal Convolutional Networks.

Code Description

NOTE: All the required python scripts are in Final Code folder. And before using any of the python scripts listed in this project, make sure that the data is formatted according the eICU schema.

  • Normalization.py
    • The script first normalize the vital variables from the dataset.

  • Medication.py
    • The script creats a python dictionary which has the pataient wise data for the time offset when the pataient was given antipyretic doses.
  • Preprocessing.py
    • The script takes normalized vital data and saves the features extracted from the data.
  • Models.py
    • The script takes the data created by Preprocessing.py and feed it to different models, so that we can build and compare differerent models on the basis of F1 score and AUROC score.

Team


Aditya Singh
adityauser225@gmail.com

Author


Dr. Akram Mohammed
akrammohd@gmail.com

Mentor, Maintainer


Dr. Rishikesan Kamaleswaran
rkamales@uthsc.edu

Mentor

License

This software has been released under the GNU General Public License v3.