CreditVintage / observed SBA lending

Observed loans.
Separated by time.

A frozen funding-cohort study of 35,000 US small-business loans. Learn on earlier loans, calibrate later, then evaluate on 2016–2017 funding cohorts.

35,000frozen loan records
24 monthsnative recorded charge-off horizon
10,000held-out loans
89 eventsrare outcomes in the test period
Retrospective validation, with explicit limits. The official final snapshot contains funding and outcome dates, but no first-publication times or historical feature revisions. This study cannot certify what was publicly available at each past decision. It does not invent available_at timestamps.

01 / dates before models

Three cohorts. Mature outcomes between stages.

The 24-month outcome window ends before the next stage starts. One earliest eligible loan per hashed recorded borrower group; no group appears twice. Fixed sizes and hash-based sampling do not balance outcomes.

StageLoansEventsRateFundedLast horizonMissing initial rate
train20,0008164.080%2006-01-05 → 2010-12-302012-12-3015250
calibration5,000420.840%2013-01-01 → 2013-12-312015-12-3115
test10,000890.890%2016-01-01 → 2017-12-312019-12-310

Wide tables scroll horizontally on small screens. Group keys use normalized recorded name/state/ZIP. Spelling and address changes can evade this heuristic. Large initial-rate missingness in earlier cohorts is retained and disclosed.

02 / fixed protocol, retained results

Calibration and ranking answer different questions.

Constant train rate, logistic regression and separate isotonic calibration use the same test loans. Lower Brier is better; higher AUC and average precision are better. Calibration can improve Brier while reducing ranking performance.

MethodROC AUCAverage precisionBrier score
constant0.50000095% 0.500000 – 0.5000000.00890095% 0.007162 – 0.0106430.00983895% 0.008242 – 0.011439
logistic0.67234195% 0.624625 – 0.7174640.01847095% 0.013555 – 0.0261130.00901195% 0.007365 – 0.010662
isotonic0.65839995% 0.604911 – 0.7126040.01666195% 0.012190 – 0.0221330.00881995% 0.007115 – 0.010509

95% percentile intervals: 300 paired resamples of the 24 test funding months. Models remain fixed. Intervals exclude source revision, training, parameter and sample-selection uncertainty; one-class replicates remain in the evidence with unavailable metrics and valid counts.

What the model actually sees

Log approval amount, SBA guaranteed share, initial interest rate and approval processing method. Median imputation with missing indicators, scaling and category encoding are learned from training loans only. No dates, cohort IDs, borrower identities, final status, current term or outcome fields enter the model.

03 / comparable workload

Hold the review budget fixed.

Each method ranks the same 10,000 test loans; ties use record ID. Captured events describe historical concentration. They do not measure prevented loss, approval policy, recoveries or causal benefit.

MethodBudgetReviewedEvents foundPrecisionEvent capture
constant5%5004/890.80%4.49%
constant10%10007/890.70%7.87%
constant20%200016/890.80%17.98%
logistic5%50014/892.80%15.73%
logistic10%100026/892.60%29.21%
logistic20%200038/891.90%42.70%
isotonic5%50017/893.40%19.10%
isotonic10%100024/892.40%26.97%
isotonic20%200037/891.85%41.57%

The downloadable 10% review queues contain only method, record ID, rank and score. Outcome labels remain in the separate evaluation table.

04 / keep the weaker year

Inspect each test funding year.

YearMethodLoansEventsAUCAPBrier
2016constant4977460.5000000.0092430.010153
2016logistic4977460.7034910.0274050.009193
2016isotonic4977460.6943650.0216880.009117
2017constant5023430.5000000.0085610.009527
2017logistic5023430.6417230.0152990.008831
2017isotonic5023430.6206030.0130940.008523

These are descriptive slices of the same fixed test cohort. They were not used to choose features, hyperparameters or sampling.

05 / bring the evidence with you

Run, refit, and check offline.

The installed wheel contains the frozen source, protocol and conversion audit. Running the study needs no source checkout, raw 574 MB download or optional PITBridge dependency.

python -m creditvintage sba-benchmark --out outputs/sba-credit
python -m creditvintage verify-sba outputs/sba-credit

The verifier checks source and protocol, refits all three methods, rebuilds metrics, paired bootstrap, review order and HTML, then compares the portable ZIP. Rehashing fabricated metrics does not make them valid.

Canonical CSV SHA256: 08c60deb116345624e75cdbf22ea305be33ebeba17d2d2c11292a5e3ba1da8f1
Protocol SHA256: 99194b3f83ec07b94ef06b619c0e0230e7658b7afdd8d31c35da63275b39e829

Rebuild from both full official CSVs using scripts/prepare_sba.py --verify-frozen. The converter checks original file hashes, counts every exclusion, removes repeated recorded groups, and selects lowest row hashes before fitting.

Report an actual independent run with package version, OS, commands and the observed result. No independent adoption is claimed here.

Interpretation boundaries

Source: U.S. SBA 7(a) & 504 FOIA, snapshot as of 2026-06-30. The catalogue designates U.S. Government Works. This study is an independent research example, with no SBA endorsement.