Back

Does the model actually work?

This checks whether the model behind your figures has ever been right. Give it a period that has already finished: the chance of default each borrower was given at the start, and whether it defaulted by the end.

Failed1,200 borrowers · worked example

Failed on calibration. The allowance this model produces is understated.

This example is meant to fail. The book is 1,200 synthetic borrowers with one grade deliberately wrong: BB was priced at 2.00% and defaulted at 6.00%.

Notice what still passes. The ranking is sound, and the portfolio total — 3.75% observed against 2.75% predicted — reads as acceptable. That is the whole point: a portfolio-level test nets an understated grade against a conservative one and reports nothing wrong, so calibration is tested grade by grade. Load your own file above to replace this.

Your data

One row per borrower. Two columns are essential: the chance of default you predicted, and whether it defaulted.

This is an example book of 1,200 synthetic borrowers, not your data. It is here so the page shows what it does before you have fetched anything. Replace it when you are ready.

Read 1,200 rows and 5 columns.

Which column is which

Corrected automatically where the heading is recognisable. Change anything that is wrong.

Whatever identifies the account. Used only to report which rows failed.
The probability of default (PD) the model gave BEFORE the outcome was known. A figure refreshed during the period tests hindsight, not prediction.
What actually happened by the end of the period.
Lets the test run grade by grade. Without it only a total for the whole book is possible, and a total can hide one grade set too low behind another set too high.
Used to weight the average predicted chance of default. Rows count equally without it.
The predicted chance of default is being read as decimals

Every value sits in the decimal range. Read the wrong way round, a model would look a hundred times more conservative than it is and pass every test on this page.

Can it tell good from bad?

Whether the borrowers it called riskier are the ones that defaulted. A model that cannot rank risk cannot be fixed by adjusting its rates.

Passed

It ranks risk well: the borrowers it called riskier are the ones that defaulted (Gini 0.568, 95% interval 0.408 to 0.729, on 45 defaults).

Defaults observed
45
Default rate
3.75%
The statistics, for a model validator
Gini
0.568
AUC
0.7842
AUC, 95% interval
0.704 – 0.865
KS
0.522

Gini runs from 0, no better than chance, to 1, a perfect ranking; 0.20 is the usual floor. AUC is the same measure on a scale from 0.5. KS is the widest gap between how defaulted and performing borrowers were scored.

Are the levels right?

Whether the predicted chance of default matched what happened, grade by grade — because a total can hide one grade set too low behind another set too high.

Failed

The total for the book looks acceptable, but 1 grade (BB) is set too low — more defaults than a correct rate would give once in a hundred. A total that hides one grade too low behind another too high is not a model that is right.

GradeBorrowersDefaultsPredictedObservedPredicted vs observedJeffreys p
A30010.30%0.33%
0.3847Passed
BBB35030.90%0.86%
0.4931Passed
BB300182.00%6.00%
<0.0001Failed
B180115.51%6.11%
0.3453Passed
CCC701218.08%17.14%
0.5680Passed

The last column is how often a grade priced correctly would see at least this many defaults (the Jeffreys test). Below 1% fails; below 5% is worth explaining.

The statistics, for a model validator
Hosmer–Lemeshow p
0.0002
Spiegelhalter p
0.0084
Brier score
0.03473
— calibration error
0.00041
— resolution
0.00179

Tests of the whole book at once. Each asks the same question as the table — do predictions and outcomes agree — in a different way, and none of them can see a grade the others net away.

How much defaults move together

Allows for defaults arriving in the same bad year, rather than one at a time.

0.15Set this to the asset correlation your rates were built with — 0.15 means 15%. Higher means a bad year is less surprising, so the test is more forgiving, which is why it must match the model rather than be chosen here.