File size: 4,522 Bytes
8f1c2fc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Variable Dictionary β€” every modelled variable: source, transformation, window, rationale, fitted sign

Data window: panel quarters t=1..60 ≙ **2000Q2–2015Q1** (calendar anchoring verified vs FRED UNRATE, corr 0.996).
Train = t≀40 (2000Q2–2010Q1); OOT = t=41–60 (2010Q2–2015Q1, the stress aftermath). All fits on train only.
Macro series are US **national** (state-level upgrade = Freddie rung 3). Timing convention: every macro
*regressor* is lagged; the two deliberate current-quarter **state variables** are flagged ⚑ below.

| Variable (model name) | Source β†’ transformation | Lag / window | Economic rationale | Expected sign | Fitted (verified) | Consumed by |
|---|---|---|---|---|---|---|
| `fico_s` | `FICO_orig_time` / 100 | static (origination) | Ability/willingness to pay | PD ↓ | βœ“ negative | default hazard; LGD cure |
| `ltv10` ⚑ | `updated_ltv`/10 = LTV_orig Γ— (bal_t/bal_orig) Γ— (hpi_orig/hpi_t), winsor 300 | current-quarter state (collateral indexation, documented exception) | Equity cushion / strategic-default trigger; = vendor `LTV_time` to 5e-9 | PD ↑, severity ↑, cure ↓ | βœ“ all three (sev +0.107/10pp, cure βˆ’0.764) | default hazard; LGD both stages; staging legs |
| `loan_age` | `time βˆ’ orig_time` β†’ natural cubic spline (hazard) / linear (LGD) | per-quarter | Seasoning baseline; underwriting β†’ trouble β†’ survivor selection | hump | βœ“ peak 12q fitted vs 10q empirical | both hazards; LGD |
| `prepay_incentive` ⚑ | `interest_rate_time βˆ’ rate_time` (note βˆ’ market rate) | current-quarter state (option value is real-time) | Refinancing incentive (competing risk) | prepay ↑ | βœ“ (Spearman +0.95) | prepay hazard |
| `investor_orig_time`, RE-type flags | raw origination flags | static | Strategic default propensity (no home to lose) | PD ↑ (investor) | βœ“ | default hazard |
| `uer_lag1` | `uer_time` (national level, pp) via within-loan shift | lag 1q | Cash-flow channel (job loss β†’ arrears) | net shock ↑ | βœ“ net +1pp β†’ HR 1.28 (level βˆ’0.367 + momentum +0.614 under 0.94 collinearity β€” quote the NET effect) | default hazard; LGD cure (+0.277 disclosed anomaly) |
| `uer_chg4_lag1` | 4-quarter change of `uer_time`, lagged | lag 1q over 4q window | Labour-market momentum | ↑ | βœ“ +0.614 | default hazard |
| `hpi_growth_lag1` | Ξ”log `hpi_time` (national index) | lag 1q | Collateral macro channel | PD ↓ | βœ“ | default hazard; satellite (+13.64) |
| `gdp_lag1` / `gdp_growth_lag2` | `gdp_time` growth | lag 1q / 2q | Activity channel | PD ↓ / Z ↑ | βœ“ (+0.730 satellite) | default hazard; satellite |
| `dt_ltv_uer` | center(`ltv10`) Γ— center(`uer_lag1`) | mixed | Double trigger (can't pay AND negative equity) | ↑ | βˆ’0.006 (p=.04): in-sample substitution; main effects + momentum carry the joint stress β€” honest finding, see fit_stats.md | default hazard |
| `lgd_time` (target) | vendor realised workout LGD, **resolved workouts only** (`res_time` non-null): 9,496 of 11,420 train defaults | resolution window | Two-stage: cure (≀0.05) Γ— severity; LGD>1 tail (14.2% of non-cures, max 3.17) = constant excess loading +0.0255, never clipped | β€” | OOT calibration +0.047 (conservative) | LGD |
| `Z_t` (recovered) | Vasicek inversion of observed vs composition-adjusted expected quarterly default rates (frozen hazard, macro at panel means) | 60 quarters | Systematic credit-cycle factor; ρ via Belkin Var(Z)=1 β†’ **ρ=0.0227** (vs 0.12 notes / 0.15 Basel β€” regulatory ρ is conservatism, not time-series fit); mean(Z)=βˆ’1.145 level gap documented | trough in GFC | βœ“ trough 2008Q1 (Z=βˆ’2.74) | satellite target; PIT conditioning |
| Scenario paths | DFAST 2026 CSVs: UER (pp), HPI level β†’ Ξ”log, GDP SAAR β†’ quarterly, mortgage rate | 2026Q1–2029Q1 (13q) rebased as **deltas onto the 2015Q1 jump-off**, reversion to panel long-run means by q21, hold to 40q | Coherent supervisory multivariate shapes; upside = damped mirror (Γ—βˆ’0.35), weights 50/25/25 (SPF anchoring = named enhancement) | severe ECL > base > upside | βœ“ ($47.6m / $30.5m / $27.7m) | scenario ECL |

Model equations live in the module docstrings (cloglog hazard; two-stage LGD; ECL sum; Vasicek PIT
transform with the Gauss-Hermite anchor proof; satellite Z = βˆ’1.694 + 13.642Β·hpi_growth_lag1 +
0.730Β·gdp_growth_lag2, n=57, with ADF/KPSS/DW/AIC and the GFC-dummy sensitivity in
outputs/satellite/satellite_report.md). Coefficient tables with CIs: outputs/hazard/hazard_ratios.md,
outputs/lgd/lgd_report.md.