Coder Social home page Coder Social logo

bsenst / midterm-resp Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 32 KB

Experimental logistic regression model to predict respiratory disease from age, gender, symptom.

Python 87.70% Dockerfile 12.30%
healthcare respiratory-illnesses symptom-checker data-science flask machine-learning python3

midterm-resp's Introduction

Predicting Respiratory Disease from Age, Gender, Symptom

Creating and deploying a model as described in https://github.com/alexeygrigorev/mlbookcamp-code/

Disclaimer: The only purpose of this code repository is creating and deploying an example statistical model. No medical advice. The underlying data my be wrong and any conclusion made false.

Dataset: https://www.kaggle.com/datasets/abbotpatcher/respiratory-symptoms-and-treatment

Problem Description

In medicine finding the right diagnosis is key for successful treatment and thus restituation of health. Diagnosing a disease involves several steps. It includes history taking, physical examination and diagnostic procedures followed by a preliminary list of possible diagnoses. Then estimation of the most likely diagnosis can be made through different statistic techniques and experienced clinicians develop an instinct to come to a conclusion fast. But improving the diagnostic process and reducing uncertainty is an ongoing challenge and offers opportunities for data science solutions.

Ahsan MM, Luna SA, Siddique Z. Machine-Learning-Based Disease Diagnosis: A Comprehensive Review. Healthcare (Basel). 2022 Mar 15;10(3):541. doi: 10.3390/healthcare10030541. PMID: 35327018; PMCID: PMC8950225.

Raita Y, Camargo CA Jr, Liang L, Hasegawa K. Big Data, Data Science, and Causal Inference: A Primer for Clinicians. Front Med (Lausanne). 2021 Jul 6;8:678047. doi: 10.3389/fmed.2021.678047. PMID: 34295910; PMCID: PMC8290071.

Example

Input (as used in test_service.py)

patient = {
	'Age': 60,
	'Sex=female': 0, 
	'Sex=male': 1, 
	'Sex=not to say': 0,
	'Symptoms_encoded': 48,
}

Or send curl request to Flask API https://bsenst.pythonanywhere.com/predict (availability not guaranteed)

curl --location --request POST 'https://bsenst.pythonanywhere.com/predict' \
--header 'Content-Type: application/json' \
--data-raw '{"Age": 60, "Sex=female": 0, "Sex=male": 1, "Sex=not to say": 0, "Symptoms_encoded": 48}'

Output (response from the model served as flask app):

{
  "disclaimer": "This script is for educational purpose only.",
  "disease": "Pneumonia",
  "disease_probability": 0.19968054490140236,
  "patient:": {
	"Age": 60,
	"Sex=female": 0,
	"Sex=male": 1,
	"Sex=not to say": 0,
	"Symptoms_encoded": 48
  }
}

This version of the model suffers from low accuracy. For a male 60 years old patient with a cold it predicts pneumonia with a probability of 20 %. If the age is changed to 10 years old it suggests bronchitis with a probability of 22 %.

Output:

{
  "disclaimer": "This script is for educational purpose only.",
  "disease": "bronchitis",
  "disease_probability": 0.2179886636147549,
  "patient:": {
	"Age": 10,
	"Sex=female": 0,
	"Sex=male": 1,
	"Sex=not to say": 0,
	"Symptoms_encoded": 48
  }
}

Run the Service using Python

Create virtual environment (as described in https://docs.python.org/3/tutorial/venv.html)

python3 -m venv virtualenv

Then activate the virtual environment for Windows

virtualenv\Scripts\activate.bat

Or on Unix/MacOS

source virtualenv/bin/activate

Install requirements

pip install -r requirements.txt

Run the flask app

python flask_app.py

Open another command window and run the example post request

python test_service.py

Make sure the test script sends the request to the url the flask app is being served (i.e. https://172.17.0.2:9696).

Run the Service using Docker

Download the docker image (206.6 MB)

docker pull fritz.jfrog.io/default-docker-local/midterm-resp-docker:latest

Compare the checksum sha256 78583fdc866a728a2d3588d3d7c45b44b7a9f9a9c2175e81688d9ec5ab6d5a42

Build and run the docker image

docker build --tag midterm-resp-docker

docker run midterm-resp-docker

You should see that the flask app is being served. Open another terminal and run the test script.

python test_service.py

Make sure the test script sends the request to the url the flask app is being served (i.e. https://172.17.0.2:9696).

Labels

LabelEncoder() Disease:

Label Disease
0 Acute Respiratory Distress Syndrome
1 Asbestosis
2 Aspergillosis
3 Asthma
4 Bronchiectasis
5 Chronic Bronchitis
6 Influenza
7 Mesothelioma
8 Pneumonia
9 Pneumothorax
10 Pulmonary hypertension
11 Respiratory syncytial virus
12 Tuberculosis
13 bronchiolitis
14 bronchitis
15 chronic obstructive pulmonary disease
16 sleep apnea

LabelEncoder() Symptoms:

Label Symptom
0 coughing
1 coughing
2 fatigue
3 low energy
4 shortness of breath
5 wheezing
6 A cough that lasts more than three weeks
7 A dry, crackling sound in the lungs while breathing in
8 Bluish skin
9 Chest congestion
10 Chest pain
11 Chills
12 Coughing up blood
13 Coughing up yellow or green mucus daily
14 Daytime sleepiness
15 Difficulties with memory and concentration
16 Dry mouth
17 Fatigue
18 Fatigue, feeling run-down or tired
19 Feeling run-down or tired
20 Fever
21 Frequently waking
22 Headache
23 Loss of appetite
24 Loss of appetite and unintentional weight loss
25 Low-grade fever
26 Morning headaches
27 Nasal congestion
28 Nausea
29 Night sweats
30 Pauses in breathing
31 Persistent dry coug
32 Persistent dry cough
33 Rapid breathing
34 Rapid heartbeat
35 Runny nose
36 Shortness of breath
37 Shortness of breath that gets worse during flare-ups
38 Snoring
39 Sore throat
40 Unusual moodiness
41 Weight loss from loss of appetite
42 Wheezing
43 Wider and rounder than normal fingertips and toes
44 allergy
45 breath
46 chest pain
47 chronic cough
48 cold
49 cough
50 cough with blood
51 coughing
52 diarrhea
53 distressing
54 dizziness
55 dry cough
56 edema
57 fainting
58 faster heart beating
59 fatigue
60 fever
61 greenish cough
62 heart palpitations
63 high fever
64 irritability
65 joint pain
66 loss of appetite
67 low energy
68 lower back pain
69 mucus
70 muscle aches
71 nausea
72 pain
73 runny nose
74 shaking
75 shallow breathing
76 sharp chest pain
77 short of breath
78 short, shallow and rapid breathing
79 shortness of breath
80 stuffy nose
81 sweating
82 tight feeling in the chest
83 vomiting
84 weight loss
85 wheezing
86 wheezing cough
87 whistling sound while breathing
88 whistling sound while you breathe
89 yellow cough

midterm-resp's People

Contributors

bsenst avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.