The model does not break, the world moves
A deployed model's weights are fixed. What changes is the data arriving at it, and the failure is silent because nothing throws an exception.
The first means the inputs look different. The second means the right answer for the same input is now different, and only the second is unfixable by retraining on old labels.
Measuring input drift without labels
- : the share of current traffic in bin .
- : the share of the training data in that bin.
Population stability index compares two histograms of the same feature, and it needs no ground truth, which is why it runs in production.
Those thresholds are conventions from credit scoring, and they are a starting point rather than a law.
KL divergence measures the same idea and is unbounded when a bin empties, which is why PSI's symmetric form is preferred for alerting.
What to watch, in order of usefulness
- Prediction distribution, since a shift there is the cheapest signal that something changed.
- Input feature distributions, one PSI per feature, which localises the change.
- Latency and error rates, which catch the infrastructure half.
- Ground truth metrics, whenever labels arrive, however late.
- Business outcomes, which are the only measure that decides whether any of it matters.
The gap between a prediction and its outcome is the central difficulty. Fraud is labelled in days, churn in months, and a model can be wrong for a whole quarter before the metric says so.
The model-specific signals
Average confidence falling is an early warning that the inputs have moved away from what the model knows.
For text, the share of unknown tokens and the distance of the input embedding from the training distribution both work as drift detectors with no labels.
For a generation system, the measurable proxies are refusal rate, output length, tool call failure rate and the share of responses a judge marks unsupported.
Alerting that survives contact with a rota
Alert on the derivative, not the level.
A metric that is slightly bad every day trains people to ignore it. A metric that moved sharply today is worth waking someone for.
Every alert should say what action it implies. Drift detected with no attached decision is a notification, and a rota full of notifications is an unmonitored system.
A good retrain trigger combines a PSI threshold, a metric drop and the time since the last retrain.
Writing that rule down in advance is what turns monitoring into a loop rather than a dashboard nobody opens.