Skip to content

musagithub1/credit_scoring_project

Repository files navigation

🏦 Credit Scoring ML Pipeline

Credit Scoring Banner

Python Scikit-Learn Pandas License: MIT

🎯 Advanced Machine Learning Pipeline for Credit Risk Assessment

Predict loan default risk with state-of-the-art ML algorithms

πŸ“– Documentation β€’ πŸš€ Quick Start β€’ πŸ“Š Demo β€’ 🀝 Contributing


✨ Features

πŸ€– Machine Learning

  • Multiple ML algorithms comparison
  • Automated hyperparameter tuning
  • Cross-validation & model selection
  • Feature importance analysis

πŸ“Š Data Processing

  • Robust data cleaning pipeline
  • Advanced feature engineering
  • Outlier detection & handling
  • Comprehensive EDA reports

πŸ“ˆ Evaluation & Metrics

  • Multiple performance metrics
  • Confusion matrix analysis
  • ROC curves & AUC scores
  • Model interpretation tools

πŸ› οΈ Production Ready

  • Modular code architecture
  • Easy deployment setup
  • Comprehensive logging
  • Model persistence

πŸš€ Quick Start

Prerequisites

Python 3.8+ β€’ Git β€’ pip

Installation

# 1️⃣ Clone the repository
git clone https://github.com/musagithub1/credit_scoring_project.git
cd credit_scoring_project

# 2️⃣ Create virtual environment
python -m venv venv
source venv/bin/activate  # Linux/Mac
# venv\Scripts\activate   # Windows

# 3️⃣ Install dependencies
pip install -r requirments.txt

# 4️⃣ Run the complete pipeline
python run_all.py

πŸ—οΈ Project Architecture

graph TB
    A[πŸ“Š Raw Dataset<br/>credit_risk_dataset.csv] --> B[πŸ” Data Exploration<br/>explore_data.py]
    A --> C[🧹 Data Preprocessing<br/>preprocess_data.py]
    
    B --> D[πŸ“‹ EDA Report<br/>data_summary.txt]
    C --> E[πŸ’Ύ Processed Data<br/>processed_data/]
    
    E --> F[🎯 Train/Test Split]
    F --> G[πŸ€– Model Training<br/>Multiple Algorithms]
    
    G --> H[πŸ“ˆ Logistic Regression]
    G --> I[🌳 Decision Tree]
    G --> J[🌲 Random Forest]
    
    H --> K[⚑ Model Evaluation<br/>evaluate_models.py]
    I --> K
    J --> K
    
    K --> L[πŸ“Š Performance Reports]
    K --> M[πŸ’Ύ Saved Models<br/>models/]
    
    style A fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
    style B fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
    style C fill:#e8f5e8,stroke:#388e3c,stroke-width:2px
    style G fill:#fff3e0,stroke:#f57c00,stroke-width:2px
    style K fill:#fce4ec,stroke:#c2185b,stroke-width:2px
Loading

πŸ“ Project Structure

πŸ“¦ credit_scoring_project/
β”‚
β”œβ”€β”€ πŸ“Š data/
β”‚   └── credit_risk_dataset.csv          # Raw dataset
β”‚
β”œβ”€β”€ 🧹 src/
β”‚   β”œβ”€β”€ preprocess_data.py               # Data preprocessing
β”‚   β”œβ”€β”€ explore_data.py                  # Exploratory data analysis
β”‚   β”œβ”€β”€ train_models.py                  # Model training
β”‚   └── evaluate_models.py               # Model evaluation
β”‚
β”œβ”€β”€ πŸ“ˆ models/                           # Trained models
β”‚   β”œβ”€β”€ logistic_regression_model.pkl
β”‚   β”œβ”€β”€ decision_tree_model.pkl
β”‚   └── random_forest_model.pkl
β”‚
β”œβ”€β”€ πŸ’Ύ processed_data/                   # Clean datasets
β”‚   β”œβ”€β”€ X_train_scaled.csv
β”‚   β”œβ”€β”€ X_test_scaled.csv
β”‚   β”œβ”€β”€ y_train.csv
β”‚   └── y_test.csv
β”‚
β”œβ”€β”€ πŸ“Š reports/
β”‚   β”œβ”€β”€ data_summary.txt                 # EDA summary
β”‚   └── model_performance.txt            # Results
β”‚
β”œβ”€β”€ πŸš€ run_all.py                        # Main pipeline
β”œβ”€β”€ πŸ“‹ requirements.txt                  # Dependencies
β”œβ”€β”€ βš™οΈ Makefile                          # Automation
└── πŸ“– README.md                         # This file

πŸ”„ ML Pipeline Workflow

flowchart LR
    subgraph "πŸ“Š Data Stage"
        A[Load Data] --> B[Data Cleaning]
        B --> C[Feature Engineering]
        C --> D[EDA & Visualization]
    end
    
    subgraph "🎯 Modeling Stage"
        E[Train/Test Split] --> F[Feature Scaling]
        F --> G[Model Training]
        G --> H[Cross Validation]
    end
    
    subgraph "πŸ“ˆ Evaluation Stage"
        I[Performance Metrics] --> J[Model Comparison]
        J --> K[Best Model Selection]
        K --> L[Model Deployment]
    end
    
    D --> E
    H --> I
    
    style A fill:#bbdefb
    style D fill:#f8bbd9
    style G fill:#dcedc8
    style I fill:#ffecb3
    style L fill:#d1c4e9
Loading

πŸ€– Machine Learning Models

Model Algorithm Strengths Best For
πŸ”΅ Logistic Regression Linear Classification Fast & Interpretable Baseline & Feature Analysis
🌳 Decision Tree Rule-based Learning Easy to Understand Rule Generation
🌲 Random Forest Ensemble Method High Accuracy & Robust Production Deployment

Model Training Process

sequenceDiagram
    participant D as Data
    participant P as Preprocessor
    participant M as Models
    participant E as Evaluator
    
    D->>P: Raw Dataset
    P->>P: Clean & Transform
    P->>M: Training Data
    
    par Parallel Training
        M->>M: Train Logistic Regression
    and
        M->>M: Train Decision Tree
    and
        M->>M: Train Random Forest
    end
    
    M->>E: Trained Models
    E->>E: Cross Validation
    E->>E: Performance Metrics
    E-->>M: Best Model Selected
Loading

πŸ“Š Results

πŸ† Model Performance Comparison

πŸ… Rank Model Accuracy Precision Recall F1-Score
πŸ₯‡ Random Forest 87.2% 84.1% 81.5% 82.8%
πŸ₯ˆ Logistic Regression 85.0% 80.0% 75.0% 77.4%
πŸ₯‰ Decision Tree 82.5% 78.5% 79.2% 78.8%

πŸ“ˆ Detailed Performance Analysis

πŸ† CHAMPION MODEL: Random Forest Classifier
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

πŸ“Š Overall Performance Metrics:
   βœ… Accuracy    : 87.2% (1308/1500 correct predictions)
   🎯 Precision   : 84.1% (quality of positive predictions)
   πŸ“‘ Recall      : 81.5% (coverage of actual defaults)
   βš–οΈ  F1-Score    : 82.8% (harmonic mean of precision/recall)

πŸ“‹ Classification Report:
                 precision   recall   f1-score   support
    
    Low Risk        0.90      0.92      0.91      1000
    High Risk       0.84      0.82      0.83       500
    
    accuracy                           0.87      1500
    macro avg       0.87      0.87      0.87      1500
    weighted avg    0.87      0.87      0.87      1500

🎯 Business Impact:
   πŸ’° Potential Loss Reduction: ~15-20%
   πŸ“ˆ Approval Rate Optimization: +12%
   ⚑ Processing Time: <100ms per application

πŸ› οΈ Usage Examples

Basic Usage

from src.preprocess_data import preprocess_data
from src.train_models import train_models
from src.evaluate_models import evaluate_models

# Run complete pipeline
def run_credit_scoring_pipeline():
    # 1. Preprocess data
    X_train, X_test, y_train, y_test = preprocess_data()
    
    # 2. Train models
    models = train_models(X_train, y_train)
    
    # 3. Evaluate performance
    results = evaluate_models(models, X_test, y_test)
    
    return results

results = run_credit_scoring_pipeline()

Advanced Usage

# Custom model training with hyperparameter tuning
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier

def train_optimized_model(X_train, y_train):
    # Define parameter grid
    param_grid = {
        'n_estimators': [100, 200, 300],
        'max_depth': [10, 20, None],
        'min_samples_split': [2, 5, 10]
    }
    
    # Grid search with cross-validation
    grid_search = GridSearchCV(
        RandomForestClassifier(random_state=42),
        param_grid,
        cv=5,
        scoring='f1',
        n_jobs=-1
    )
    
    grid_search.fit(X_train, y_train)
    return grid_search.best_estimator_

🎯 Key Features Explained

πŸ” Data Preprocessing Pipeline

Data Quality Enhancements

  • Missing Value Imputation: Smart handling of missing data using statistical methods
  • Outlier Detection: IQR-based outlier removal for numerical features
  • Feature Scaling: StandardScaler for optimal model performance
  • Categorical Encoding: One-hot encoding for categorical variables

Feature Engineering

  • Age Validation: Realistic age bounds (18-100 years)
  • Income Normalization: Log transformation for income features
  • Credit History Scoring: Composite credit worthiness metrics
πŸ“Š Exploratory Data Analysis

Comprehensive Analysis

  • Univariate Analysis: Distribution plots for all features
  • Bivariate Analysis: Correlation matrix and scatter plots
  • Multivariate Analysis: Principal component analysis
  • Target Variable Analysis: Class distribution and imbalance check

Generated Insights

  • Feature importance rankings
  • Correlation patterns
  • Data quality assessment
  • Business intelligence metrics
πŸ€– Model Development

Training Strategy

  • Cross-Validation: 5-fold stratified cross-validation
  • Hyperparameter Tuning: Grid search optimization
  • Model Selection: Performance-based selection criteria
  • Ensemble Methods: Advanced ensemble techniques

Performance Optimization

  • Feature Selection: Recursive feature elimination
  • Class Balancing: SMOTE for handling imbalanced data
  • Model Calibration: Probability calibration for better predictions

πŸš€ Advanced Features

πŸ“ˆ Model Interpretability

# Feature importance analysis
import matplotlib.pyplot as plt
from sklearn.inspection import plot_partial_dependence

def analyze_model_decisions(model, X_test, feature_names):
    # Feature importance
    importance = model.feature_importances_
    
    # Partial dependence plots
    plot_partial_dependence(
        model, X_test, 
        features=[0, 1, 2],  # Top 3 features
        feature_names=feature_names
    )
    plt.show()

πŸ”„ Real-time Prediction API

# Flask API for real-time predictions
from flask import Flask, request, jsonify
import joblib

app = Flask(__name__)
model = joblib.load('models/random_forest_model.pkl')

@app.route('/predict', methods=['POST'])
def predict_credit_risk():
    data = request.json
    prediction = model.predict_proba([data['features']])
    
    return jsonify({
        'risk_probability': float(prediction[0][1]),
        'risk_level': 'High' if prediction[0][1] > 0.5 else 'Low',
        'confidence': float(max(prediction[0]))
    })

πŸ› οΈ Development

Using Makefile Commands

# Install dependencies
make install

# Run tests
make test

# Run complete pipeline
make run

# Clean generated files
make clean

# Generate documentation
make docs

# Check code quality
make lint

Testing Framework

# Run unit tests
python -m pytest tests/ -v

# Run with coverage
python -m pytest tests/ --cov=src --cov-report=html

# Performance tests
python -m pytest tests/test_performance.py

🀝 Contributing

We welcome contributions! Here's how you can help:

🎯 Contribution Areas

  • πŸ”¬ Research: New algorithms and techniques
  • πŸ› οΈ Engineering: Code optimization and refactoring
  • πŸ“Š Analysis: Enhanced data visualization
  • πŸ“ Documentation: Tutorials and examples
  • πŸ§ͺ Testing: Unit and integration tests

πŸ“‹ Development Process

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“ Code Standards

  • Follow PEP 8 style guidelines
  • Add docstrings for all functions
  • Include unit tests for new features
  • Update documentation as needed

πŸ“š Documentation & Resources

πŸ“– Additional Documentation

πŸŽ“ Learning Resources


🏷️ Changelog

Version 2.0.0 (Latest)

  • ✨ Added Random Forest ensemble model
  • πŸ”§ Enhanced preprocessing pipeline
  • πŸ“Š Improved evaluation metrics
  • πŸ› Fixed data leakage issues

Version 1.1.0

  • 🌳 Added Decision Tree classifier
  • πŸ“ˆ Enhanced visualization suite
  • πŸ› οΈ Improved code modularity

Version 1.0.0

  • πŸŽ‰ Initial release
  • πŸ“ˆ Basic logistic regression model
  • 🧹 Core preprocessing pipeline

πŸ“„ License

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


πŸ™ Acknowledgments

Special thanks to:

Scikit-learn Pandas NumPy Matplotlib


πŸ“ž Contact & Support

πŸ’¬ Get in Touch

GitHub Email LinkedIn

πŸ› Issues & Feature Requests

Issues Pull Requests


⭐ Star this repository if it helped you!

Thank You

Made with ❀ by [Musa Khan]

Empowering Financial Decisions with Machine Learning

About

Machine learning project for predicting credit risk using Logistic Regression, Decision Tree, and Random Forest.

Topics

Resources

Stars

13 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors