Production ML for Risk: Monitoring, Drift, and Retraining

A deployed risk model starts dying the day it ships. What to watch (PSI, Gini trend, calibration, overrides), why credit's outcome lag forces you to monitor inputs, and how to retrain without chasing noise.

Everything in this track so far happens before deployment. This module is about the longer, less glamorous life that starts after: a risk model in production, scoring real applicants, while the world that generated its training data quietly stops existing. The core fact of production ML in credit is brutal and simple — you will know the inputs have changed long before you know the outputs are wrong — and a monitoring stack is how you act on the early signal instead of waiting for the expensive one.

How models die

Three distinct decay modes, worth separating because they demand different responses:

PSI: the workhorse early-warning metric

Credit’s standard drift detector is the Population Stability Index. Freeze the score distribution from development, bin it into deciles, and compare today’s population against it:

PSI=i(actualiexpectedi)×ln ⁣actualiexpectedi\text{PSI} = \sum_{i} \left(\text{actual}_i - \text{expected}_i\right) \times \ln\!\frac{\text{actual}_i}{\text{expected}_i}

Same construction as Module 2’s Information Value — it is IV, repurposed: instead of separating goods from bads, it separates then from now. The conventions: below 0.10 stable, 0.10–0.25 watch closely, above 0.25 investigate before trusting the model. Feel what moves it:

PSI Drift Meter

Outline bars: the population your model was built on (frozen). Solid bars: today's applicants. PSI measures how far today has walked away from development.

score deciles (development-time bins)
PSI
Status
Worst bin

Convention: PSI < 0.10 stable · 0.10–0.25 monitor closely · > 0.25 material shift, investigate before trusting the model.

Three experiments. A pure mean shift of 0.3σ — barely visible in the bars — already pushes PSI toward the warning zone; the metric is sensitive by design, because small average shifts often hide larger segment shifts. Widening dispersion alone trips it too — same average applicant, different mix. And the third slider is the realistic scenario: a new segment flowing in at the risky end. Notice how modest inflow trips the alarm and the worst-bin readout points exactly at where to look — PSI’s real value isn’t the number, it’s the decomposition by bin telling you which part of the population is new.

Run the same statistic per feature (CSI, characteristic stability) and you get triage: score PSI says whether something changed; feature-level CSIs say what. Score stable but three features drifting = compensating changes worth understanding anyway. Score drifting with all features stable = check the pipeline, someone changed a mapping.

The monitoring stack, by latency

The defining constraint of credit monitoring is the outcome lag: today’s approvals earn their 12-month labels a year from now (Module 5’s performance window, now working against you). So the stack organizes by how fast each signal becomes available:

SignalLatencyWhat it catches
Pipeline health: null rates, ranges, schema, volumesSame dayPlumbing failures — check these first, always
Score & feature stability (PSI/CSI)Same dayPopulation and pipeline drift
Approval rate, score mix, override rateDays–weeksPolicy interactions, gaming, drift hitting decisions
Early delinquency (30dpd at 3 months on book)MonthsThe first honest outcome signal
Gini / calibration on matured vintages12–18 monthsThe truth, far too late to be your only alarm

Two rows deserve commentary. Override rates — how often humans reverse the model — are an underrated drift detector: underwriters collectively noticing something the model can’t see shows up here first, and a rising override rate is your staff filing a bug report through their behavior. And early delinquency is the compromise between waiting for real labels and flying blind: 30-days-past-due at three months on book correlates strongly enough with eventual default to serve as a leading indicator of model failure — track it by vintage against prior cohorts at the same age (Module 5’s vintage curves, running live).

Retraining: policy, not panic

The naive instinct — “drift detected, retrain now” — fails in credit for a specific reason: you can only retrain on labeled data, and labels lag by the performance window. Retraining “on the latest data” means training on loans booked 12–24 months ago — often further from today’s regime than your current model’s sample. Retraining during a drift episode can make the model worse.

A sane retraining policy has three parts:

  1. Cadence + triggers. A scheduled annual redevelopment (the validator’s expectation anyway) plus defined triggers: sustained score PSI above threshold, calibration drifting beyond tolerance on matured vintages, Gini decay beyond its historical noise band. Triggers prompt investigation — retraining is one possible outcome, not the reflex. If drift is a pipeline bug, retraining launders the bug into the model.
  2. Recalibration before redevelopment. Most decay shows up as calibration drift (Module 4’s distinction earning its keep): ranking holds while PD levels shift with the cycle. A recalibration — refitting the score-to-PD mapping on recent matured outcomes — is cheap, low-risk, and often buys a year. Full redevelopment is for when ranking degrades or the feature set itself has gone stale.
  3. Shadow first. A retrained challenger scores everything in parallel, silently, for months before promotion — credit Module 2’s champion/challenger discipline is precisely a production safety mechanism. Compare stability, calibration on early outcomes, and decision swaps (which applicants flip, not just how many) before any cutover.

Governance: monitoring is a model-risk requirement

None of this is optional in a bank. SR 11-7 makes ongoing monitoring one of the three pillars of model risk management — with documented metrics, thresholds agreed before deployment, escalation paths, and evidence the process runs. The practical translation: a monitoring plan written at development time (which metrics, what frequency, what thresholds, who gets paged, what happens on breach), a monthly pack a validator can audit, and threshold breaches that trigger documented investigations rather than quiet threshold edits. Alert discipline matters as much as alert coverage — a monitoring system that cries wolf weekly trains the team to ignore it, which is worse than no system, because it looks like control.

Where this connects

Try it yourself

The notebook below builds a monitoring system end to end on a simulated two-year production run: PSI/CSI from scratch with decile decomposition, a drift injector (mean shift, new segment, pipeline null-bug) to see each signature, Gini and calibration tracked on maturing vintages with the outcome lag made explicit, an override-rate simulation, and the retraining trap — a model retrained mid-drift on lagged labels that underperforms both the original and a simple recalibration. The closing exercise: write the monitoring plan (metrics, thresholds, cadence, escalation) for the model you built in Module 2’s notebook, as if a validator will read it. Because one will.

Model Monitoring & Drift Lab (Jupyter notebook)
Free download — no signup required.
Download

Get new posts by email

One email per new article. No spam, no upsells, unsubscribe anytime.