Model card

A points-based logistic scorecard trained on features engineered from raw transactions. Every number on this page is produced by npm run model:train and checked in with the artifact.

credai-scorecard-2.0.0digest d3ae086d25b32109
AUC (held-out)
0.783
827 customers never seen in training
Gini
0.566
2 × AUC − 1, the lender convention
KS statistic
0.478
Max separation of repaid vs defaulted
Brier score
0.144
Calibration error, lower is better

ROC curve

True vs false positive rate across every score threshold.

Calibration

When the model says 80%, about 80% repay. Dot size is the number of customers.

Scores by actual outcome

Held-out customers. The default policy approves 53% with a 7.3% default rate, vs 39% among those declined.

RepaidDefaulted

Default rate by grade

Should rise steadily from A to E. It does.

GradeCustomersDefaulted
A166
2.4%
B183
9.8%
C234
22.6%
D172
38.4%
E72
58.3%

Feature weights

Standardised logistic coefficients. Blue raises the score, red lowers it.

What each data source is worth

Drop in AUC when the source is removed from every test customer.

  • Bank account
    −0.040
  • Utility bills
    −0.034
  • Mobile account
    −0.010
  • Mobile wallet
    −0.003
  • Repayment history
    +0.002

Bank account and utility bills carry the most signal. Utility bills — which 88% of applicants have, banked or not — cost 0.034 AUC to remove. Mobile wallet and repayment history add little once the rest is known.

Fairness audit

Region is never a model input. It is held back and used only to test for disparate outcomes at the default approve cut-off.

RegionCustomersAvg scoreApproval rateAdverse impact ratioApproved if repaid (TPR)Approved if defaulted (FPR)Thin files
North15767255%0.95 OK64%21%8%
Central32666051%0.89 OK61%15%6%
South17667257%1.00 OK67%24%5%
West16866950%0.87 OK61%11%11%

Adverse impact ratio is each region's approval rate divided by the highest; the common four-fifths rule flags anything under 0.80. Gaps that remain track thin-file share — fewer connected sources — which is exactly where connecting more data helps.

Training data

4,000 simulated customers · 1,377,742 raw records · as of 2026-09-30 · seed “credai-v2”

SegmentShareRepaid
Salaried employee25%95%
Ride-hailing & delivery20%68%
Small shop owner15%85%
Freelancer12%84%
Student or first job14%58%
Over-extended household16%48%
How the data is simulated
  • Each customer gets hidden traits — payment discipline, income stability, liquidity, tenure — drawn around a segment profile.
  • The traits drive raw events: payroll or gig payouts, rent and spending, bills paid early or late, top-ups, wallet transfers that bounce when the balance is short.
  • The repayment outcome is drawn separately from the traits. The model never sees traits or outcomes — only features computed from the raw events, the same way it would from a real API.
  • Source coverage varies by segment (utility bills 88%, mobile account 100%, mobile wallet 89%, bank account 65%, repayment history 41%).

Metrics describe performance on simulated behaviour. Before lending, retrain and validate on real outcomes with the same pipeline.