Credit-default model with fairness checks and a reason for every decision
Build a default-risk model on a public credit dataset, check it for unfair outcomes across age and sex, and give every declined applicant specific, accurate reasons.
Industry project · for Harbourline Credit, a digital lender issuing credit cards and small personal loans to about 210,000 customers
Harbourline approves about 6,000 credit-card applications a month. Its current scorecard was built five years ago and the regulator has asked two pointed questions: can you show the model treats similar applicants similarly regardless of sex and age, and can you tell every declined customer the main reasons in plain language?
The chief risk officer wants a replacement model, but she is clear that accuracy alone will not get it approved. The model-risk committee will look at three things: how well it ranks risk, whether approval and error rates differ across groups by more than agreed limits, and whether the reasons given to customers are faithful to what the model actually did.
You will use the public UCI "Default of credit card clients" dataset (30,000 customers, 23 features including credit limit, payment history and bill amounts, plus sex, education, marriage and age). You will train an interpretable baseline and a gradient-boosted model, pick an approval cut-off for a target default rate of 6% among approved applicants, and then audit both models for group fairness. Sex and age must not be model inputs, but you will keep them aside for the audit.
The committee's limits: - approval rates between groups within a ratio of 0.8; - true-positive rates within 5 percentage points; - each decline must come with up to four reasons, each tied to a feature that genuinely lowered the score.
Done looks like a model pack: code, a validation report with AUC and calibration, a fairness report with the numbers against the limits and any mitigation you tried, a reason-code generator with tests, and a short memo to the committee.
GitHub repo + reports/validation.md + reports/fairness.md + reason-code module with tests + two-page committee memo
Stack: Python, scikit-learn, LightGBM, SHAP, Fairlearn, pandas
- Sound risk model25
Both models are validated on a held-out set with AUC, a calibration plot and a cut-off that achieves about 6% default among approved applicants.
- Fairness audit30
Approval-rate ratio and true-positive-rate gap are reported for sex and age bands against the committee limits, with intervals and at least one mitigation tested.
- Faithful reasons25
Every decline gets up to four plain-language reasons tied to features that lowered its score, and tests prove the reasons match the model.
- Committee-ready documentation20
The memo states the recommendation, the trade-offs between accuracy and fairness, and the conditions for approval.
Pass 60% · Merit 75% · Distinction 90%
Engineering Students
Diploma, B.Tech, B.E., BCA, MCA, or M.Tech students seeking practical experience.
Aspiring Developers
Developers who want to build proof-of-work capstone projects for tech resumes.
Job Seekers
Graduates looking for AI-evaluated code review & verified industry credentials.