Architecture¶
CreditRiskEngine is organized into six major subsystems, each mapping to a distinct regulatory or analytical domain.
Package Layout¶
creditriskengine/
├── core/ # Data models, types, config, exceptions
│ ├── types.py # Enums: Jurisdiction, IRBAssetClass, SAExposureClass, ...
│ ├── exposure.py # Pydantic Exposure + Collateral models
│ ├── portfolio.py # Portfolio container with filtering
│ └── config.py # Jurisdiction config loader
│
├── rwa/ # Risk-Weighted Assets
│ ├── standardized/
│ │ └── credit_risk_sa.py # CRE20 SA risk weights (all exposure classes)
│ ├── irb/
│ │ └── formulas.py # CRE31 IRB: correlations, K, maturity adj, RW
│ └── output_floor.py # RBC25 output floor with multi-jurisdiction phase-in
│
├── ecl/ # Expected Credit Loss engines
│ ├── ifrs9/ # IFRS 9 impairment
│ │ ├── ecl_calc.py # 12-month and lifetime ECL
│ │ ├── staging.py # Three-stage assignment
│ │ ├── sicr.py # Significant Increase in Credit Risk
│ │ ├── lifetime_pd.py # Cumulative/marginal PD term structures
│ │ ├── ttc_to_pit.py # TTC-to-PIT conversion (Vasicek Z-factor)
│ │ ├── forward_looking.py # Macro overlay adjustments
│ │ └── scenarios.py # Probability-weighted scenarios
│ ├── cecl/ # US CECL (ASC 326)
│ │ ├── cecl_calc.py # PD/LGD and loss-rate methods
│ │ ├── methods.py # WARM, vintage, DCF
│ │ └── qualitative.py # Q-factor adjustments
│ └── ind_as109/ # Indian Accounting Standard 109
│ └── ind_as_ecl.py # Wraps IFRS 9 with RBI-specific defaults
│
├── models/ # PD / LGD / EAD model development
│ ├── pd/
│ │ └── scorecard.py # Logistic scorecard, master scale, PD calibration
│ ├── lgd/
│ │ └── lgd_model.py # Workout LGD, downturn LGD, LGD floors
│ ├── ead/
│ │ └── ead_model.py # EAD calculation, CCF estimation, supervisory CCFs
│ └── concentration/
│ └── concentration.py # Single-name HHI, sector concentration, GA
│
├── validation/ # Model validation toolkit
│ ├── discrimination.py # AUROC, Gini, KS, CAP, IV, Somers' D
│ ├── calibration.py # Binomial, HL, Spiegelhalter, traffic light, Jeffreys
│ ├── stability.py # PSI, CSI, HHI, migration matrix stability
│ ├── backtesting.py # PD backtest summary
│ ├── benchmarking.py # Model-vs-benchmark comparison
│ └── reporting.py # Validation summary generator
│
├── portfolio/ # Portfolio credit risk models
│ ├── vasicek.py # Vasicek ASRF: conditional DR, loss quantile, distribution
│ ├── copula.py # Single/multi-factor Gaussian copula Monte Carlo
│ ├── economic_capital.py # EC via single-factor simulation
│ ├── var.py # Parametric credit VaR, marginal VaR
│ └── stress_testing.py # PD/LGD stress, RWA impact
│
├── regulatory/ # Jurisdiction-specific YAML configs (17 jurisdictions)
│ ├── loader.py # YAML config loader
│ ├── bcbs/ # BCBS d424
│ ├── eu/ # EU CRR3
│ ├── uk/ # UK PRA PS1/26
│ ├── us/ # US Basel III Endgame
│ ├── india/ # RBI
│ └── ... # + 12 more jurisdictions
│
└── reporting/ # Regulatory reporting
└── reports.py # COREP summary, Pillar 3 disclosure, model inventory
Design Principles¶
-
Regulatory traceability — Every formula cites its BCBS/CRE/RBC paragraph reference. Risk weight tables map 1:1 to the Basel standard.
-
Jurisdiction-aware — Functions accept a
Jurisdictionenum. SA risk weights, output floor schedules, and default definitions vary by jurisdiction automatically. -
Composable — Each module is independently usable. You can call
irb_risk_weight()without touching ECL, or compute PSI without importing portfolio models. -
Typed and validated — Pydantic models for exposures and portfolios. Strict mypy, ruff linting, and comprehensive tests enforce correctness.
Data Flow¶
Exposure (Pydantic model)
│
├─► SA Risk Weight ─► SA RWA
│ │
├─► IRB Risk Weight ─► IRB RWA ──┐
│ ├─► Output Floor ─► Floored RWA
│ │
├─► ECL Calculation ─► ECL Provision
│
└─► Validation ─► AUROC, Gini, PSI, Calibration tests
Key Regulatory References¶
| Module | BCBS Reference |
|---|---|
| SA risk weights | CRE20 (Tables 1-10) |
| IRB formulas | CRE31.4-31.10 |
| PD floor | CRE32.13 (3 bps) |
| Supervisory LGD | CRE32.22-32.24 |
| LGD floors (A-IRB) | CRE32.25 |
| CCF (F-IRB) | CRE32.29-32.32 |
| Output floor | RBC25.2-25.4 |
| IFRS 9 staging | IFRS 9.5.5.1-5.5.20 |
| CECL | ASC 326-20 |