The scorecard studio
How does a weight of evidence scorecard turn an application into a score and a reason?
Harborline's installment scorecard keeps 8 of 13 candidate characteristics and ranks out of time loans with an AUROC of 0.662. Every point on it comes from a bin's weight of evidence, so a declined applicant's reasons are the characteristics furthest below their best points. Move a bin edge below and watch the information value and the monotonicity respond; then score an applicant at the cutoff of 580.
Bin a characteristic
Drag a handle to move a coarse bin edge, click a gap between two bars to add one, or select a handle and press Delete to remove it. Arrow keys move a selected handle.
| Bin | Share | Default | WoE | IV | Points |
|---|---|---|---|---|---|
| (-inf, 0.0697] | 5.0% | 1.05% | 1.331 | 0.051 | 96.1 |
| (0.0697, 0.1322] | 10.0% | 1.40% | 1.038 | 0.069 | 91.3 |
| (0.1322, 0.1832] | 10.0% | 1.92% | 0.715 | 0.037 | 86.1 |
| (0.1832, 0.3486] | 30.0% | 2.86% | 0.307 | 0.025 | 79.4 |
| (0.3486, 0.48] | 20.0% | 4.29% | -0.113 | 0.003 | 72.5 |
| (0.48, 0.5197] | 5.0% | 4.88% | -0.249 | 0.003 | 70.3 |
| (0.5197, 0.6275] | 10.0% | 6.65% | -0.578 | 0.044 | 64.9 |
| (0.6275, +inf] | 10.0% | 8.39% | -0.829 | 0.102 | 60.9 |
Points are at the coefficient fitted on the pipeline's bins (-0.566). Moving an edge changes the weight of evidence and so the points; the coefficient is refit only when the pipeline runs with new bins.
Score an applicant
The API scores the application when it is awake; otherwise the browser scores it from the same published scorecard file, and the result says which. Protected attributes and their listed proxies are not on the form because the scorecard cannot use them.
Fill in the form and press Score.
The scorecard
Points per bin, scaled so 600 points are odds of 30 to one and every 20 points double the odds. Source: generated, booked installment loans with an observed outcome, seed 20260831, as of 2026-08-31.
revolving_utilization
| Bin | Default | Points |
|---|---|---|
| (-inf, 0.0697] | 1.0% | 96.1 |
| (0.0697, 0.1322] | 1.4% | 91.3 |
| (0.1322, 0.1832] | 1.9% | 86.1 |
| (0.1832, 0.3486] | 2.9% | 79.4 |
| (0.3486, 0.48] | 4.3% | 72.5 |
| (0.48, 0.5197] | 4.9% | 70.3 |
| (0.5197, 0.6275] | 6.7% | 64.9 |
| (0.6275, +inf] | 8.4% | 60.9 |
bureau_score
| Bin | Default | Points |
|---|---|---|
| (-inf, 672] | 8.6% | 60.9 |
| (672, 694] | 6.5% | 65.7 |
| (694, 716] | 4.5% | 71.7 |
| (716, 747] | 3.7% | 74.9 |
| (747, 763] | 2.0% | 84.9 |
| (763, 795] | 1.7% | 87.6 |
| (795, +inf] | 1.2% | 92.9 |
dti
| Bin | Default | Points |
|---|---|---|
| (-inf, 0.1193] | 1.2% | 96.2 |
| (0.1193, 0.1672] | 2.3% | 84.5 |
| (0.1672, 0.2117] | 2.6% | 82.2 |
| (0.2117, 0.2491] | 3.0% | 78.9 |
| (0.2491, 0.2713] | 3.3% | 77.2 |
| (0.2713, 0.2843] | 4.9% | 69.8 |
| (0.2843, +inf] | 5.9% | 65.9 |
employment_months
| Bin | Default | Points |
|---|---|---|
| (-inf, 15] | 6.2% | 62.7 |
| (15, 25] | 5.2% | 66.9 |
| (25, 71] | 4.1% | 73.1 |
| (71, 206] | 3.4% | 77.5 |
| (206, +inf] | 1.9% | 91.1 |
oldest_trade_months
| Bin | Default | Points |
|---|---|---|
| (-inf, 77] | 6.2% | 69.3 |
| (77, 95] | 4.8% | 72.1 |
| (95, 134] | 4.0% | 74.0 |
| (134, 150] | 3.8% | 74.5 |
| (150, 170] | 3.4% | 75.6 |
| (170, 196] | 3.0% | 76.9 |
| (196, +inf] | 2.8% | 77.5 |
purpose
| Bin | Default | Points |
|---|---|---|
| home_improvement | 4.8% | 67.7 |
| auto | 4.3% | 71.1 |
| other | 3.8% | 74.6 |
| debt_consolidation | 3.7% | 75.3 |
| major_purchase | 2.2% | 91.6 |
inquiries_6m
| Bin | Default | Points |
|---|---|---|
| (-inf, 1] | 3.5% | 75.3 |
| (1, 2] | 4.8% | 72.6 |
| (2, +inf] | 5.3% | 71.7 |
loan_amount
| Bin | Default | Points |
|---|---|---|
| (-inf, 5,600] | 2.8% | 83.2 |
| (5,600, 14,100] | 3.6% | 76.1 |
| (14,100, 15,200] | 3.8% | 74.7 |
| (15,200, +inf] | 4.6% | 69.3 |
Every candidate, kept or dropped
| characteristic | iv | kept |
|---|---|---|
| revolving_utilization | 0.333 | kept |
| bureau_score | 0.310 | kept |
| dti | 0.233 | kept |
| employment_months | 0.074 | kept |
| oldest_trade_months | 0.069 | kept |
| purpose | 0.045 | kept |
| inquiries_6m | 0.030 | kept |
| loan_amount | 0.024 | kept |
| annual_income | 0.011 | information value 0.0113 below the floor |
| housing_status | 0.009 | information value 0.0087 below the floor |
| term_months | 0.008 | information value 0.0084 below the floor |
| delinquencies_24m | 0.004 | information value 0.0036 below the floor |
| channel | 0.002 | information value 0.0021 below the floor |
Source: generated, booked installment loans with an observed outcome, seed 20260831, as of 2026-08-31.
Did it recover what the generator put in?
The loan book was generated with a stated risk structure, so the pipeline had to recover it before any number here was trusted.
| parameter | stated | estimate | interval_low | interval_high | tolerance | within |
|---|---|---|---|---|---|---|
| Latent risk rank order (Spearman; perfect ordering is 1) | 1.000 | 0.775 | 0.775 | 0.775 | 0.600 | true |
| Latent risk coefficient | 0.950 | 0.940 | 0.890 | 0.991 | 0.150 | true |
| Macro sensitivity per point of unemployment | 0.300 | 0.305 | 0.254 | 0.356 | 0.100 | true |
| Loose vintage effect | 0.450 | 0.470 | 0.397 | 0.543 | 0.150 | true |
| Deposit beta, checking | 0.020 | 0.020 | 0.020 | 0.020 | 0.010 | true |
| Deposit beta, savings | 0.380 | 0.380 | 0.380 | 0.380 | 0.030 | true |
| Deposit beta, time | 0.720 | 0.720 | 0.720 | 0.720 | 0.030 | true |
| Recovery share at 24 months, installment | 0.220 | 0.204 | 0.204 | 0.204 | 0.050 | true |
Source: generated, booked installment loans with an observed outcome, seed 20260831, as of 2026-08-31.
The same engine on real accounts
| measure | generated | uci |
|---|---|---|
| Loans or accounts with an outcome | 13,188 | 30,000 |
| Default rate | 6.3% | 22.1% |
| Characteristics kept | 8 | 7 |
| Scorecard AUROC, test | 0.662 | 0.768 |
| Scorecard Gini, test | 0.324 | 0.536 |
| Challenger AUROC, test | 0.667 | 0.788 |
| Logistic AUROC, test | 0.668 | 0.750 |
| Scorecard calibration error, test | 0.0286 | 0.0125 |
Source: generated, booked installment loans with an observed outcome, seed 20260831, as of 2026-08-31.
The first reason on declined test applications
| reason | declines | share |
|---|---|---|
| Proportion of balances to credit limits on revolving accounts is too high | 1,539 | 61.1% |
| Credit history reported by the credit bureau is insufficient or delinquent | 680 | 27.0% |
| Income insufficient for amount of credit requested | 284 | 11.3% |
| Length of employment | 14 | 0.6% |
Source: generated, booked installment loans with an observed outcome, seed 20260831, as of 2026-08-31.
Method and limitations
- The applications are generated. Nothing here is a real person's credit file, and the bureau score is a generated stand in for one.
- The scorecard under predicts default on the loosened vintages (mean predicted 4.44% against 9.61% observed on the validation months), which is why its validation report concludes approved with conditions and expected loss applies an overlay.
- Moving a bin edge in the studio recomputes weight of evidence, information value and points at the fitted coefficient. It does not refit the regression; the pipeline does that.