diabetes-prediction-ml-project

Stars
8
Language
Python
Updated

Diabetes Prediction Machine Learning Project

A comprehensive machine learning project for predicting diabetes using the UCI Diabetes dataset (Pima Indians Diabetes Database). This project implements multiple machine learning algorithms, performs hyperparameter tuning, and provides detailed visualizations and analysis.

๐Ÿ“Š Project Overview

This project aims to predict the onset of diabetes in patients based on various medical and demographic features. The dataset contains information about 768 female patients of Pima Indian heritage, including diagnostic measurements such as glucose level, blood pressure, BMI, and more.

Key Features

  • Multiple ML Models: Logistic Regression, Random Forest, and Support Vector Machine
  • Hyperparameter Tuning: GridSearchCV for optimal model performance
  • Comprehensive EDA: Detailed exploratory data analysis with visualizations
  • Model Evaluation: Accuracy, confusion matrix, ROC curves, and classification reports
  • Data Preprocessing: Missing value handling, feature scaling, and outlier removal
  • Modular Code Structure: Clean, maintainable, and well-documented code
  • Visualization Suite: Rich set of plots for data understanding and model comparison

๐Ÿ—‚๏ธ Project Structure

diabetes-prediction-ml-project/
โ”œโ”€โ”€ data/
โ”‚   โ””โ”€โ”€ diabetes.csv                 # UCI Diabetes dataset
โ”œโ”€โ”€ notebooks/
โ”‚   โ””โ”€โ”€ diabetes_analysis.ipynb      # Jupyter notebook for analysis
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ preprocessing.py             # Data preprocessing functions
โ”‚   โ”œโ”€โ”€ model_training.py           # Model training and evaluation
โ”‚   โ””โ”€โ”€ visualization.py            # Visualization functions
โ”œโ”€โ”€ outputs/                        # Generated plots and results
โ”œโ”€โ”€ models/                         # Saved trained models
โ”œโ”€โ”€ main.py                         # Main pipeline script
โ”œโ”€โ”€ requirements.txt                # Python dependencies
โ””โ”€โ”€ README.md                       # Project documentation

๐Ÿš€ Quick Start

Prerequisites

  • Python 3.8 or higher
  • pip package manager

Installation

  1. Clone or download the project

    # If you have the ZIP file, extract it
    unzip diabetes-prediction-ml-project.zip
    cd diabetes-prediction-ml-project
    
  2. Create a virtual environment (recommended)

    # Create virtual environment
    python -m venv diabetes_env
    
    # Activate virtual environment
    # On Windows:
    diabetes_env\Scripts\activate
    # On macOS/Linux:
    source diabetes_env/bin/activate
    
  3. Install dependencies

    pip install -r requirements.txt
    

Running the Project

Option 1: Run the Complete Pipeline

Execute the main script to run the entire machine learning pipeline:

python main.py

This will:

  • Load and explore the diabetes dataset
  • Perform data preprocessing
  • Train multiple ML models
  • Conduct hyperparameter tuning
  • Evaluate and compare models
  • Generate visualizations
  • Save trained models
Option 2: Use Jupyter Notebook

For interactive analysis:

# Start Jupyter Notebook
jupyter notebook

# Open notebooks/diabetes_analysis.ipynb

๐Ÿ“‹ Dataset Information

The dataset contains 768 observations with 8 features plus the target variable:

Features:

  • Pregnancies: Number of times pregnant
  • Glucose: Plasma glucose concentration (2-hour oral glucose tolerance test)
  • BloodPressure: Diastolic blood pressure (mm Hg)
  • SkinThickness: Triceps skin fold thickness (mm)
  • Insulin: 2-hour serum insulin (ฮผU/ml)
  • BMI: Body mass index (weight in kg/(height in m)ยฒ)
  • DiabetesPedigreeFunction: Diabetes pedigree function (genetic influence)
  • Age: Age in years

Target Variable:

  • Outcome: 0 = No diabetes, 1 = Diabetes

๐Ÿ”ฌ Machine Learning Models

The project implements and compares three different algorithms:

1. Logistic Regression

  • Use Case: Binary classification with linear decision boundary
  • Hyperparameters Tuned: C (regularization), penalty type, solver
  • Advantages: Interpretable, fast training, probabilistic output

2. Random Forest

  • Use Case: Ensemble method handling non-linear relationships
  • Hyperparameters Tuned: n_estimators, max_depth, min_samples_split, min_samples_leaf
  • Advantages: Feature importance, handles overfitting, robust to outliers

3. Support Vector Machine (SVM)

  • Use Case: Complex decision boundaries with kernel trick
  • Hyperparameters Tuned: C (regularization), kernel type, gamma
  • Advantages: Effective in high dimensions, memory efficient

๐Ÿ“ˆ Model Evaluation Metrics

The project evaluates models using multiple metrics:

  • Accuracy: Overall correct predictions
  • Precision: True positives / (True positives + False positives)
  • Recall: True positives / (True positives + False negatives)
  • F1-Score: Harmonic mean of precision and recall
  • AUC-ROC: Area under the Receiver Operating Characteristic curve
  • Confusion Matrix: Detailed breakdown of predictions
  • Cross-Validation: 5-fold CV for robust performance estimation

๐ŸŽจ Visualizations

The project generates comprehensive visualizations:

Exploratory Data Analysis:

  • Target variable distribution
  • Feature distributions and histograms
  • Correlation heatmap
  • Box plots by diabetes outcome

Model Comparison:

  • Accuracy comparison bar chart
  • ROC curves for all models
  • Precision-recall curves
  • Confusion matrices
  • Feature importance plots

All plots are saved in the outputs/ directory as high-resolution PNG files.

๐Ÿ”ง Hyperparameter Tuning

GridSearchCV is used for systematic hyperparameter optimization:

Logistic Regression:

  • C: [0.01, 0.1, 1, 10, 100]
  • penalty: ['l1', 'l2']
  • solver: ['liblinear']

Random Forest:

  • n_estimators: [50, 100, 200]
  • max_depth: [None, 10, 20, 30]
  • min_samples_split: [2, 5, 10]
  • min_samples_leaf: [1, 2, 4]

SVM:

  • C: [0.1, 1, 10, 100]
  • kernel: ['rbf', 'linear']
  • gamma: ['scale', 'auto', 0.001, 0.01, 0.1, 1]

๐Ÿ“ Output Files

After running the project, you'll find:

outputs/ folder:

  • target_distribution.png: Dataset target variable analysis
  • feature_distributions.png: Individual feature histograms
  • correlation_heatmap.png: Feature correlation matrix
  • feature_boxplots.png: Feature distributions by outcome
  • model_accuracy_comparison.png: Model performance comparison
  • confusion_matrices.png: Confusion matrices for all models
  • roc_curves.png: ROC curves comparison
  • precision_recall_curves.png: Precision-recall analysis
  • model_evaluation_results.txt: Detailed text results

models/ folder:

  • logistic_regression_model.pkl: Trained Logistic Regression
  • random_forest_model.pkl: Trained Random Forest
  • support_vector_machine_model.pkl: Trained SVM
  • scaler.pkl: Fitted StandardScaler for preprocessing

๐Ÿงช Using Trained Models

Load and use saved models for predictions:

import joblib
import pandas as pd

# Load the best model (example: Random Forest)
model = joblib.load('models/random_forest_model.pkl')
scaler = joblib.load('models/scaler.pkl')

# Prepare new data (example)
new_data = pd.DataFrame({
    'Pregnancies': [1],
    'Glucose': [120],
    'BloodPressure': [70],
    'SkinThickness': [25],
    'Insulin': [80],
    'BMI': [28.5],
    'DiabetesPedigreeFunction': [0.5],
    'Age': [35]
})

# Scale the data
new_data_scaled = scaler.transform(new_data)

# Make prediction
prediction = model.predict(new_data_scaled)
probability = model.predict_proba(new_data_scaled)

print(f"Prediction: {'Diabetes' if prediction[0] == 1 else 'No Diabetes'}")
print(f"Probability: {probability[0][1]:.2%}")

๐Ÿ” Customization

Adding New Models:

  1. Add the model to src/model_training.py
  2. Define hyperparameter grid in main.py
  3. Update visualization functions if needed

Modifying Preprocessing:

  • Edit src/preprocessing.py for different data cleaning approaches
  • Adjust feature engineering in the DataPreprocessor class

Custom Visualizations:

  • Add new plotting functions to src/visualization.py
  • Call them from the main pipeline

๐Ÿšจ Troubleshooting

Common Issues:

  1. Import Errors:

    # Ensure you're in the project directory
    cd diabetes-prediction-ml-project
    # Check if src is in Python path
    python -c "import sys; print(sys.path)"
    
  2. Memory Issues:

    • Reduce GridSearchCV parameter combinations
    • Use smaller cross-validation folds
  3. Visualization Issues:

    • Ensure matplotlib backend is properly configured
    • Try: import matplotlib; matplotlib.use('Agg')
  4. Missing Dependencies:

    pip install --upgrade -r requirements.txt
    

๐Ÿ“Š Expected Results

Typical model performance on this dataset:

  • Logistic Regression: ~77% accuracy
  • Random Forest: ~75-80% accuracy
  • SVM: ~76-78% accuracy

Results may vary based on data preprocessing and hyperparameter tuning.

๐Ÿค Contributing

To contribute to this project:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • UCI Machine Learning Repository for the Pima Indians Diabetes dataset
  • National Institute of Diabetes and Digestive and Kidney Diseases
  • Scikit-learn community for excellent ML tools
  • Matplotlib and Seaborn for visualization capabilities

๐Ÿ“ž Support

If you encounter any issues or have questions:

  1. Check the troubleshooting section above
  2. Review the code comments in each module
  3. Ensure all dependencies are correctly installed
  4. Verify Python version compatibility (3.8+)

Happy Machine Learning! ๐Ÿš€