MLOps & LLMOps / Operating Models
Catching the silent degradation evaluation misses.
Reviewed by Yuvaraj
A model can pass every offline metric, clear its A/B test, and ship clean, and still be quietly wrong three months later. The reason is structural: a model encodes a snapshot of the world at training time, but the world it serves keeps moving. Users change, upstream systems change, adversaries adapt. And unlike ordinary software, a decaying model raises no exception and prints no stack trace. It keeps returning confident, well-formed predictions that are simply less correct than they used to be. Monitoring is the discipline of noticing that decay before your users, or your revenue, do.
Production model observability stacks in three layers, from cheapest-to-measure to most expensive.
Operational metrics tell you the service is alive. The other two layers tell you whether it is still right.
These are distinct failures and it pays to be precise.
Data drift (covariate shift): the input distribution changes while the true mapping stays fixed. Example: a product launches in a new country and starts receiving queries in a language and format barely present in training data. The model's learned rule is still valid; it is simply operating in a region of input space it never saw much of.
Ask about this lesson, or about anything in AI. Answers cite the lessons they draw on.
Finished this lesson?
Mark it complete to earn XP, keep your streak, and schedule a review.
Concept drift: itself changes. Example: "spam" evolves as senders adopt new tactics, so an email that was legitimate-looking last year is now the signature of an attack, same features, different correct label. Fraud patterns mutate the same way.
Concept drift is the harder problem. Data drift is visible in the inputs alone: you can watch and see it move. Concept drift, by definition, need not disturb at all, the inputs can look perfectly normal while the correct labels shift underneath them. To confirm it you need ground truth, and ground truth usually arrives late (did the loan default? did the user churn?) or never arrives at all.
Because labels are delayed or missing, mature teams monitor input and output distributions continuously and treat labels as confirmation rather than the primary alarm. The standard move is to compare a recent rolling window against a fixed reference window (typically the training or validation set):
PSI is the workhorse for tabular data because it produces a single interpretable number per feature:
| PSI value | Interpretation | Action |
|---|---|---|
| < 0.10 | No significant shift | Keep monitoring |
| 0.10 – 0.25 | Moderate shift | Investigate |
| > 0.25 | Major shift | Likely action needed |
Two more signals matter. Prediction drift, the distribution of the model's own outputs, is an early, label-free proxy: if the fraction of "high risk" scores jumps, something upstream moved even before you can measure accuracy. And whatever ground truth does trickle in should feed label-based quality metrics (accuracy, AUC, calibration) so you can confirm whether drift actually hurt performance.
A credit-risk scorer is trained when the median applicant income is $60k. Six months later, a marketing push draws a younger, lower-income audience. The median income in the input stream falls to $45k and the age feature's distribution shifts younger. PSI on income comes out at 0.31, a major shift. Predictions skew toward "high risk," approvals drop, and the business notices before the data team does. This is data drift: moved, and the fix is to reweight or retrain on the new input mix so the model is calibrated for the population it now actually serves.
Now change the story. Suppose incomes stay the same, but a recession means a given income no longer implies the default rate it used to, the same $60k applicant is now materially more likely to default. The inputs look unchanged, so every -based detector stays green. Nothing fires until real default labels arrive weeks later and quality metrics collapse. This is concept drift, invisible in the inputs. The response is different too: you cannot just reweight inputs, you must relabel against the new reality and retrain the input-to-target relationship itself.
Why silent failure is the whole problem
Classical software fails loudly: it throws, crashes, or returns an obvious error you can trace. Models fail quietly and plausibly, the output still looks like a valid answer, so no one notices until the damage is downstream. Monitoring exists to convert a silent, gradual quality decay into a loud, timestamped, actionable signal.
Common mistakes