Synthetic Data for Credit Risk

A credit_score column and a defaulted column with no statistical relationship between them is worse than useless for validating a risk model. Misata generates a loan portfolio where a borrower's credit rating drives a real Bernoulli default draw at that rating's own published probability of default, so realized defaults track the cited rate by grade, not an independently random flag next to a plausible-looking label.

The tables Misata generates

borrowersS&P letter grades AAA through CCC, not a fictional 1-10 score, each with a real published PD
loansSeniority, commitment type, drawn and undrawn exposure, LGD, CCF, EAD, a real default flag, and expected loss

What holds true, every time

  • AAA, AA, and A show exactly zero realized defaults, matching S&P's published 0.00% PD for all three
  • LGD is exactly the Basel Foundation IRB supervisory value (40% senior unsecured, 75% subordinated) on every loan
  • EAD equals drawn plus the Basel credit-conversion-factor times undrawn commitment, exactly
  • expected_loss equals PD x LGD x EAD, the Basel formula, recomputed and checked on every loan

Frequently asked

Do I need real credit risk data to generate this?

No. Misata builds the dataset from a specification, not a sample. There is no real credit risk data to source, anonymize, or leak. You describe the tables you need and the engine constructs them with referential integrity and realistic distributions.

Is the generated credit risk data privacy safe?

Yes, by construction. Nothing is learned from real records, so there is no membership to infer and nothing to leak. It runs entirely on your machine with no API key for the core engine.

Can I control the outcomes, like rates and totals?

Yes. Declare a target such as a monthly volume curve or an event rate and Misata produces rows that hit it exactly, while foreign keys stay intact and roll-up columns reconcile after a JOIN.

Where does the PD (probability of default) come from?

S&P Global Ratings' own published annual global corporate default rate, averaged across the six most recent studies (2019-2024) rather than any single volatile year. AAA, AA, and A each show exactly 0.00% in every one of those six years, a real fact about investment-grade defaults. This example treats that as a guarantee to verify, not a number to round up for demo appeal: generated AAA/AA/A loans show exactly zero defaults, checked against the actual rows.

Is the LGD (loss given default) figure real, or estimated for realism?

It's the Basel Foundation IRB supervisory value: 40% for senior unsecured claims on corporates, 75% for subordinated claims. This is a number a bank using the F-IRB approach is required to use, not something it estimates, which makes it the least arguable figure in the dataset.

How is EAD (exposure at default) calculated for revolving credit?

EAD = drawn amount + CCF x undrawn commitment, the real Basel credit-conversion-factor formula. CCF is 20% for commitments of a year or less, 50% for longer commitments, and 0% for commitments that are unconditionally cancellable at any time, the same table used in the Basel standardized approach. A term loan is fully drawn by construction, so its undrawn commitment is exactly zero, not a stray random value.

Is there a free sample credit risk dataset?

Yes, at https://misata.studio/datasets/credit-risk-portfolio: 3,000 borrowers and 4,200 loans, public domain (CC0), no signup. The zip includes an INTEGRITY.txt with every guarantee re-measured against the exact files, so you can check it yourself rather than take the description's word for it.