What the method needs from the file
A tape arrives as one row per loan, and no two servicing systems label their columns the same way. So the first step is mechanical: map whatever headers exist onto a standard field set, matching each header exactly first, then by substring, case-insensitive. Seven fields carry the read, origination date, dealer or source, original balance, delinquency status, charge-off amount, recoveries, and a credit score. Everything else (term, LTV, state, mileage, vehicle age) sharpens the segmentation but is not required. The full matching vocabulary:
| Field | Header names accepted |
|---|---|
| Origination date | orig_date, origination, orig, funded, book_date, contract_date, open_date |
| As-of date | as_of, asof, report_date, snapshot, statement_date, data_date |
| Dealer / source | dealer, source, originator, seller |
| Original balance | orig_balance, original_balance, amount_financed, funded_amount, loan_amount, financed, original_amount |
| Current balance | current_balance, balance, principal_balance, outstanding, curr_balance |
| Delinquency status | dpd, days_past_due, delinquency, delq, bucket, status, loan_status |
| Charge-off | charge_off, chargeoff, co_amount, gross_loss, loss_amount, charged_off |
| Recoveries | recovery, recoveries, recovered, recovery_amount |
| Credit score | fico, score, credit_score, bureau |
| First-default timing | epd, first_default, months_to_first_default, months_to_first_delinquency, mob_first_delq |
| LTV | ltv, loan_to_value |
| Term | term, term_months, orig_term |
| Model year / vehicle age | vehicle_year, model_year, vyear, car_year, year · vehicle_age, veh_age, car_age, age |
| Mileage | mileage, miles, odometer |
| Collateral type | vehicle_type, collateral, make, body, segment |
| State | state, st, geo, region |
| Loan identifier | loan_id, loanid, id, account, contract, acct |
One quiet assumption sits under everything: the as-of date. Every age calculation runs from origination to the snapshot date, and if the file does not carry one, the reader has to assume today's date, after which every months-on-book figure inherits that guess.
The definitions, written out
Delinquency status is the messiest column on any tape, so it gets parsed permissively. Text containing "charge" (or exactly "co") is charged off; "repo" is repossession; "paid" or "payoff" is closed clean. Anything numeric is days past due: 90 or more is the 90+ bucket, 60 or more is 60-89, 30 or more is 30-59, anything else is current. From there, four definitions do almost all of the work.
Cumulative net loss is the sum of max(0, charge-off − recoveries), divided by the sum of originated balance. Both choices matter: net of recoveries, and divided by originated, never current, balance. Dividing by current balance flatters a shrinking book. Where a loan is marked charged-off or repossessed but no loss amount exists, the current balance stands in as the gross loss (originated balance if that is missing too). 60+ DPD is the share of active loans, paid-off and charged-off excluded from the denominator, sitting at 60+, 90+, or in repossession. Months on book is whole calendar months from origination to the as-of date. Early payment default is a first default within three months of origination; when the tape has no first-default column, the proxy is severe delinquency at six or fewer months on book. Averages are balance-weighted throughout.
| Measure | Rule as applied | Bands / presets |
|---|---|---|
| Cumulative net loss | Σ max(0, charge-off − recoveries) ÷ Σ originated balance | quiet ≤8% · watch 8-13% · elevated >13% Fitch reference 9.81% |
| 60+ DPD | 60+/90+/repossession ÷ active loans | quiet ≤5% · watch 5-7% · elevated >7% industry reference 6.65% |
| Early payment default | first default ≤3 months; proxy: severe status at ≤6 months on book | — |
| Dealer flag | net loss >1.5× the median dealer and >10% absolute | "clean" <0.8× median |
| Segment flag | ≥15 loans · loss ≥1.35× book average · ≥7% of total dollar loss · >4% absolute | top 6 by loss share |
| Concentration | HHI = 10,000 × Σ (dealer share of balance)²; top-3 share alongside | — |
| Credit bins | score at origination | <540 · 540-579 · 580-619 · 620+ |
| LTV bins | loan-to-value at origination | <100% · 100-114% · 115-129% · 130%+ |
| Term bins | contract months | ≤48 · 49-60 · 61-66 · 67+ |
| Vehicle age bins | age in years; fallback: as-of year − model year | 0-4 · 5-7 · 8-10 · 11+ |
Vintage curves: hold age constant
A single loss number for a whole book is a blend of cohorts at different ages, and blends hide slopes. The static-pool discipline is simple: group loans by origination quarter, compute each cohort's cumulative net loss against its own originated balance, and index by months on book rather than calendar date. Losses then become comparable at matched age. Here is the shape the method is built to catch, in a worked example:
| Vintage | Loans | Originated | Age (MOB) | Cum net loss | 60+ DPD | EPD rate |
|---|---|---|---|---|---|---|
| 2023 Q1 | 380 | $6.2M | 14 mo | 4.1% | 3.2% | 1.9% |
| 2023 Q3 | 372 | $6.0M | 14 mo | 9.7% | 6.8% | 5.6% |
The blended book behind this example prints roughly 6.4% cumulative net loss: under the 8% watch line, under the 9.81% Fitch reference, apparently unremarkable. The blend is calm because the mature vintages have flattened and the youngest are too green to show loss yet, while the one vintage that matters is running at more than twice its sibling's pace at identical age. The aggregate is not lying. It is averaging.
Attribution: who carried the loss
The same static-pool numbers, cut by dealer: loan count, share of originated balance, cumulative net loss, and EPD rate, ranked by loss. Two mechanical flags do the sorting. A dealer running above 1.5× the median dealer's net loss and above 10% absolute is flagged; one below 0.8× the median reads clean. The median, not the mean, is the yardstick, so a single blown-up channel cannot drag the benchmark upward and hide its peers behind it.
EPD is the sharper of the dealer numbers. A loan that ages twenty months before defaulting failed slowly, for reasons that can include the borrower's life. A loan that never really performs, first default inside three months, usually failed at the point of sale.
Concentration: how lumpy is the book
The third cut asks how much of the book depends on any one thing. Across dealer balances, the Herfindahl-Hirschman index, 10,000 × the sum of squared shares, plus the top-three share give the channel answer. Across risk dimensions, a segment screen runs the published bins over credit score, LTV, term, vehicle age, geography, and dealer, and flags a segment only when all four conditions hold: at least 15 loans, loss at 1.35× the book average or worse, at least 7% of total dollar loss, and above 4% absolute. The four conditions together keep the screen honest, a loss multiple alone flags trivia, and a loss share alone flags whatever happens to be big.
Limits
Honesty about what this method cannot see matters as much as the method. A single snapshot yields one point per vintage, its current age and cumulative loss to date. That sketches a curve across vintages, but it is not a true static-pool triangle: without monthly archives you cannot watch one cohort's path over time, only where each cohort stands now. Recoveries lag charge-offs, so young cohorts read worse than they will settle. Small cohorts are noise dressed as signal, which is why the segment screen refuses to flag anything under 15 loans.
The deeper limit is that the arithmetic trusts the tape. Status fields are self-reported by the servicer; a deferral or extension resets days past due without curing risk, and nothing in the file distinguishes a cured loan from a re-aged one. And no amount of column-mapping can verify the file itself, that the collateral exists, that the balances are real, or that the same loans are not pledged in two places at once. Arithmetic on a tape tests internal consistency. It cannot test whether the tape is true.