Financial institutions must continuously evaluate borrower risk while maintaining portfolio stability and regulatory compliance.
This project builds a credit risk decision framework that:
• Estimates borrower Probability of Default (PD) • Applies credit policy thresholds for lending decisions • Simulates portfolio expected losses • Evaluates risk exposure under varying economic conditions
The model demonstrates how predictive analytics and financial modeling can support risk-aware lending strategies, portfolio monitoring, and capital planning.
Banks and lending institutions face a core challenge:
How can credit decisions be optimized while controlling portfolio risk and expected losses?
Traditional credit approval methods often rely on static borrower metrics that may not fully capture changing risk conditions.
Key challenges include:
• Identifying high-risk borrowers before loan approval • Estimating expected credit losses across a loan portfolio • Aligning lending policies with institutional risk appetite • Monitoring portfolio risk exposure under economic stress scenarios
This project addresses these challenges by developing a data-driven credit risk modeling framework.
The modeling approach follows standard credit risk analytics methodology.
Borrower features used in the model include:
• income • debt-to-income ratio • credit history indicators • loan amount • repayment history
• Weight of Evidence (WoE) feature transformation • Logistic regression for PD estimation • Portfolio expected loss simulation • Risk segmentation and borrower classification
These techniques reflect methodologies commonly used in retail credit risk modeling and Basel internal rating systems.
The credit risk model estimates the Probability of Default (PD) for each borrower.
The expected loss framework follows standard financial risk modeling principles.
Expected Loss (EL) = PD X LGD X EAD
Where:
PD = Probability of Default LGD = Loss Given Default EAD = Exposure at Default
The model calculates expected losses across the loan portfolio, enabling financial institutions to evaluate potential risk exposure.
Borrowers are segmented based on their predicted risk levels.
Risk categories may include:
| Risk Category | PD Range |
|---|---|
| Low Risk | PD < 2% |
| Moderate Risk | 2% – 5% |
| Elevated Risk | 5% – 10% |
| High Risk | >10% |
Risk segmentation allows lenders to:
- identify vulnerable borrowers
- adjust pricing strategies
- control portfolio concentration risk
Risk models require structured governance to ensure reliability and regulatory compliance.
This model supports:
• credit approval decisions • portfolio risk monitoring • capital risk evaluation
Validation techniques include:
• ROC-AUC model performance evaluation • out-of-sample testing • population stability monitoring
Model Monitoring
Ongoing monitoring ensures model reliability through • PD calibration tracking • portfolio default rate monitoring • model drift analysis
These governance practices align with Basel model risk management principles.
The analysis highlights several portfolio risk insights.
High borrower leverage and weak repayment history significantly increase default risk.
Portfolio simulations indicate that small increases in macroeconomic stress factors can substantially increase expected losses, emphasizing the importance of proactive risk monitoring.
Risk segmentation enables lenders to adjust credit policies and optimize portfolio risk-return balance.
credit-risk-pd-scorecard-woe/
├── data/
│ └── Bank_Loan_Approval_copy.csv
├── notebooks/
│ └── Credit_Risk_Benchmark_Validated.ipynb
├── src/
│ └── irb_scorecard/
│ ├── __init__.py
│ ├── io.py
│ ├── pd_proxy.py
│ ├── scorecard_woe.py
│ ├── governance.py
│ ├── policy.py
│ ├── portfolio.py
│ └── reason_codes.py
├── scripts/
│ ├── train_pd_proxy.py
│ ├── train_scorecard.py
│ ├── score_dataset.py
│ ├── run_governance.py
│ └── make_report.py
├── artifacts/ # generated
├── outputs/ # generated
├── requirements.txt
├── pyproject.toml
├── LICENSE
└── .gitignore
python -m venv .venv
# Windows: .venv\Scripts\activate
source .venv/bin/activate
pip install -r requirements.txtpython scripts/train_pd_proxy.py --infile data/Bank_Loan_Approval_copy.csv --outdir artifactspython scripts/train_scorecard.py --infile data/Bank_Loan_Approval_copy.csv --outdir artifactspython scripts/score_dataset.py --infile data/Bank_Loan_Approval_copy.csv --outdir artifactspython scripts/run_governance.py --infile data/Bank_Loan_Approval_copy.csv --artifacts artifacts --outdir outputspython scripts/make_report.py --outputs outputs --artifacts artifacts --out outputs/REPORT.mdartifacts/pd_proxy_model_calibrated.joblibartifacts/scorecard_model_woe.joblibartifacts/scored_pd_proxy.csvartifacts/scored_scorecard.csvartifacts/scorecard_points_table.csvartifacts/portfolio_summary.jsonoutputs/governance_summary.jsonoutputs/backtesting_deciles.csvoutputs/cutoff_sensitivity.csv
MIT License — see LICENSE.