Skip to content

Repository files navigation

🩺 Diabetes Prediction Using Classification Method 🩺

Machine Learning & Data-Science Project ( Final Year Project )

Built with Python 3.xAnacondaJupyter-LabScikit-learnTensorFlow/Keras


FYP

🎯 Project Overview

ItemDetails
GoalPredict whether a patient has diabetes or not.
ApproachSupervised Classification using Neural Network + Classical ML models.
DatasetPima Indians Diabetes Dataset (768 rows × 9 columns).
Tools

📊 1. Exploratory Data Analysis (EDA)

1.1 Quick Peek 👀

importpandasaspddf=pd.read_csv('diabetes.csv')
df.head()
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
61487235033.60.627501
1856629026.60.351310

1.2 Summary Statistics 📈

df.describe().T.style.bar(subset=['mean'], color='#5fba7d')
countmeanstdmin25%50%75%max
Glucose768120.8931.97099117140.25199
BMI76831.997.88027.33236.667.1

1.3 Visual Insights 📉

pairplotPair-plot showing correlations among features; red points are diabetic (Outcome=1).

  • Strongest predictor: Glucose levels
  • Missing values: 0 in Insulin & SkinThickness → impute with median.

🧹 2. Data Pre-processing

fromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerX=df.drop('Outcome', axis=1)
y=df['Outcome']
# Impute 0's → mediancols= ['Glucose','BloodPressure','SkinThickness','Insulin','BMI']
X[cols] =X[cols].replace(0, X[cols].median())
# Scalescaler=StandardScaler()
X_scaled=scaler.fit_transform(X)
# Split 70/30X_train, X_test, y_train, y_test=train_test_split(
X_scaled, y, test_size=0.30, random_state=42, stratify=y)

🧠 3. Neural Network (Keras)

fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense, Dropoutmodel=Sequential([
Dense(16, activation='relu', input_shape=(X_train.shape[1],)),
Dropout(0.2),
Dense(8, activation='relu'),
Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy',
metrics=['accuracy'])
history=model.fit(X_train, y_train,
validation_split=0.15,
epochs=100, batch_size=16, verbose=0)

loss


🧪 4. Classical ML Models

ModelAccuracyPrecisionRecallF1-Score
Logistic Regression0.7940.750.640.69
Decision Tree0.7390.700.600.65
SVM (RBF)0.7920.760.620.68

confusion_matrix


🏆 5. Model Comparison & Best Pick

MetricNeural NetLogisticDecision TreeSVM
Accuracy0.844 👑0.7940.7390.792
Precision0.810.750.700.76
Recall0.730.640.600.62
F1-Score0.770.690.650.68

🥇 Neural Network wins with 84.4 % accuracy.


💾 6. Save Models for Production

# Keras modelmodel.save('diabetes_nn.h5')
# Sci-kit modelsimportjoblibjoblib.dump(lr, 'diabetes_lr.pkl')
joblib.dump(dt, 'diabetes_dt.pkl')
joblib.dump(svm, 'diabetes_svm.pkl')

🚀 7. Quick Usage Demo

# Load & predictfromtensorflow.keras.modelsimportload_modelmodel=load_model('diabetes_nn.h5')
patient= [[6, 148, 72, 35, 0, 33.6, 0.627, 50]]
patient_scaled=scaler.transform(patient)
pred=model.predict(patient_scaled)[0][0]
print("Risk of diabetes: {:.1%}".format(pred))
# → Risk of diabetes: 91.4%

📁 Project Tree

📦 Diabetes-Prediction/
├─ 📁 data/
│ └─ diabetes.csv
├─ 📁 notebooks/
│ └─ EDA.ipynb
├─ 📁 models/
│ ├─ diabetes_nn.h5
│ └─ *.pkl
├─ 📁 src/
│ ├─ train.py
│ └─ predict.py
├─ 📄 requirements.txt
└─ 📄 README.md

📚 Requirements (requirements.txt)

pandas==2.2.2
numpy==1.26.4
matplotlib==3.9.0
seaborn==0.13.2
scikit-learn==1.5.0
tensorflow==2.17.0
joblib==1.4.2

🤝 Contributing

Feel free to open issues or PRs to improve the model or add new features (e.g., SHAP explainability, Streamlit GUI).


📄 License

MIT © 2025 Diabetes-Prediction-Team


“Early diagnosis saves lives.”

-------------------------------------------------------------------------------------------------------------------

👨💻 By: Irfan Ullah Khan

GitHubKaggleLinkedIn

YouTubeEmailWebsite