A model that returns a 200 response and a plausible-looking prediction can still be quietly broken. This is the gap that catches teams out: infrastructure telemetry tells you the service is alive, not that the model is right. Uptime is green, latency is within budget, error rates are flat — and the model has been degrading for three weeks because the input distribution shifted underneath it. Nobody notices until a downstream metric drops or a customer complains. Monitoring ML models in production is a different discipline from monitoring the service that hosts them. The service is a piece of software with well-understood failure modes — it crashes, it slows down, it throws exceptions. A model fails without any of those symptoms. It keeps answering, keeps answering fast, and keeps being wrong. The job of model monitoring is to make prediction quality visible when the infrastructure layer is structurally blind to it. Why a healthy-looking service can serve a broken model Application monitoring answers one question: is the software running? Model monitoring answers a different one: is the model still correct? These are not the same question, and conflating them is the single most common mistake we see teams make when they ship their first model to production. The reason the gap exists is that a model’s output is always well-formed. A classifier returns a class and a confidence score whether or not that class is right. A regression model returns a number. A generative model returns fluent text. None of these trip an exception when they are wrong, so none of them show up on the dashboard that watches for exceptions. Prediction quality is invisible to infrastructure telemetry — that is the whole problem, stated in one sentence. What makes it worse is that the failure is usually gradual. A model does not typically break all at once; it decays. Accuracy erodes a little each week as the world it was trained on drifts away from the world it now serves. By the time the degradation is large enough to move a business metric, it has often been accumulating for weeks. Shrinking the mean time to detect that decay — from weeks, when it surfaces as complaints, to hours or days, when a monitor catches it — is the entire economic argument for model monitoring. It also lets you scope retraining to when it is actually needed rather than running it on a fixed calendar and hoping the cadence matches reality. How does monitoring ML models work in practice? At the mechanical level, model monitoring is the continuous comparison of what the model sees and produces in production against what it saw and produced during validation. You are watching for one of two things to move: the inputs, or the relationship between inputs and correct outputs. There are three layers worth instrumenting, and they answer progressively harder questions: Input monitoring — are the features arriving in production distributed the way they were at training time? This is the cheapest signal and often the earliest warning. A feature that suddenly contains nulls, a categorical value that never appeared in training, a numeric range that has crept upward — all of these are detectable without any ground truth at all. Output monitoring — is the distribution of the model’s predictions stable? A fraud classifier that suddenly flags 3% of transactions when it historically flagged 0.5% is telling you something, even before you know whether the new flags are correct. Outcome monitoring — when ground truth eventually arrives (a label, a conversion, a human review), does the model’s prediction match it? This is the truest signal and the slowest, because the label often lands days or weeks after the prediction. The reason input monitoring matters so much is timing. Ground-truth labels are the gold standard, but they are late. In our experience across production deployments, the teams that catch degradation early are the ones watching inputs, not the ones waiting for labels — because the inputs move first, and the accuracy drop is a lagging consequence of that movement. If you build only outcome monitoring, you have built a system that confirms the damage after it is done. How monitoring differs across the three AI families The most important framing decision is this: each AI family fails in its own way, so each demands a different monitoring strategy. Treating a generative model like a classical classifier — or vice versa — leaves you instrumented for failures that will not happen while blind to the ones that will. This is the same family-first lens that a GenAI feasibility assessment applies before a system is built; monitoring is where that classification pays off after the system is live. AI family Primary failure mode What actually degrades What to monitor Ground truth available? Classical ML (gradient-boosted trees, logistic regression) Silent drift Accuracy erodes as input distributions shift Feature distributions, prediction distribution, data drift and concept drift Usually yes, delayed Deep learning (CNNs, sequence models) Edge-case degradation Fails on inputs outside the training manifold without raising an exception Confidence distribution, out-of-distribution detection, per-segment error rates Partial, often expensive to obtain Generative (LLMs, diffusion) Confidently wrong output Produces fluent, well-formed, plausible output that is factually or semantically incorrect Output-quality proxies, grounding/faithfulness checks, refusal and toxicity rates Rarely a single label Classical models drift silently. A gradient-boosted fraud model trained on last year’s transactions gets steadily worse as fraud patterns and customer behaviour evolve — the model never errors, it just becomes less right. Deep learning models, by contrast, tend to fail on the edges: a vision model built with PyTorch and served through TensorRT will handle its training manifold well and then produce a confident, exception-free wrong answer on an input that looks nothing like anything it saw. And generative systems fail in the way that is hardest to see — the output is fluent and confident, which is exactly why a human skimming it will not catch the error. Related decisions about which model family to even deploy are covered in our comparison of when a 32B model fits a GenAI project and when it fails; monitoring is the other half of that decision, because the family you pick determines the failures you will have to watch for. What is the difference between data drift and concept drift? These two terms get used interchangeably, and they are not the same thing. Getting the distinction right determines whether your monitoring points at the correct signal. Data drift is a change in the input distribution: the features arriving in production no longer look like the features the model trained on. Prices went up, a new customer segment arrived, a sensor was recalibrated. The relationship between inputs and outputs may still be valid — the model is simply being asked about inputs it has not seen much of. You detect data drift by comparing feature distributions over time, using statistical distance measures such as population stability index or a Kolmogorov–Smirnov test against a training-time reference window. This is measurable without any labels. Concept drift is a change in the relationship itself: the same input now maps to a different correct output. The definition of “fraud” shifted, seasonal buying behaviour inverted, a pandemic changed what “normal” means. Here the inputs might look identical to training data, but the model’s learned mapping is now wrong. Concept drift is harder to detect because it requires ground truth — you can only see it once labels arrive and you can measure that accuracy has fallen even though the inputs look stable. The practical consequence is a sequencing rule we apply consistently: watch data drift as your early-warning tripwire, because it is cheap and immediate, and use concept drift (measured against delayed labels) as your confirmation signal. A data-drift alarm tells you to investigate; a concept-drift measurement tells you the model is genuinely broken and needs a response. How do you monitor a generative system with no ground-truth label? This is the question that stops most teams, because the entire classical-ML monitoring toolkit assumes you can eventually compare a prediction to a correct answer. For an LLM answering an open-ended question, there is no single label to compare against. So you replace the missing label with a set of proxies that each capture one dimension of “is this output acceptable.” The workable proxies, in rough order of how often they earn their keep: Grounding / faithfulness checks — for retrieval-augmented systems, does the generated answer stay consistent with the retrieved source documents? This catches the highest-severity generative failure, the confident fabrication, and it can be automated by scoring the output against its own context. Reference-free quality models — a separate evaluator model scores fluency, relevance, or task adherence. This is the “LLM-as-judge” pattern, and it is useful precisely because it needs no gold label, though its own reliability must be tracked. Structural and safety filters — refusal rates, toxicity rates, format compliance (did the JSON parse?), and length distributions. These are cheap, deterministic, and catch a surprising share of production regressions. Human review on a sample — you cannot label everything, but a routed sample of outputs reviewed by people calibrates the automated proxies and catches what they miss. The mental shift is to stop looking for a single correctness number and instead maintain a panel of degradation signals, any one of which moving is a reason to look closer. Serving-layer choices affect what you can even measure here — how you handle caching and request routing, for instance, is covered in our guide to lightweight LLM serving for production GenAI, and the serving stack you choose determines which output signals are cheap to capture. When should a signal trigger a retrain, a rollback, or a human review? A monitor that fires with no defined response is just noise with a timestamp. The value of monitoring comes from wiring each signal class to a decision. Here is the rubric we use as a starting point — the thresholds are illustrative and must be tuned to the system, but the mapping holds across deployments. Signal Severity First response Escalation Input schema violation (null spike, unseen category) High, immediate Rollback or fail-safe to previous behaviour Fix the upstream pipeline before re-enabling Data drift on key features, accuracy stable Medium Investigate; schedule retrain if drift persists Retrain against recent data Concept drift confirmed by delayed labels High Retrain — the learned mapping is wrong Consider architecture change if retraining does not recover Generative grounding/faithfulness drop High Route affected traffic to human review Investigate retrieval layer, not just the model Confidence distribution shift, no accuracy signal yet Low–Medium Increase sampling for review; watch Promote to investigation if outcome data confirms The non-obvious point buried in that table: drift does not automatically mean retrain. If your inputs drifted but accuracy held, retraining is premature and may even hurt. If your inputs are fine but a pipeline broke, retraining a model on corrupted features is actively harmful — you want a rollback and an upstream fix. The signal tells you something changed; the response depends on what changed and whether it moved quality. This distinction is where a lot of monitoring investment is wasted, and it is closely tied to the data-quality practices we describe in why GenAI fails on production data. Which metrics are worth tracking, and which are just cost? Every metric you add is a metric someone has to maintain, alert on, and eventually silence when it fires spuriously. The discipline is to track the fewest signals that give you full coverage of the failure modes your model family actually has. A defensible baseline, minus the noise: Worth it: feature-distribution drift on the handful of features the model weights most heavily; prediction-distribution stability; delayed outcome accuracy against a rolling baseline; for generative systems, a grounding score and a safety-filter rate. Usually noise: per-request latency percentiles as a model-health signal (that is a service metric, and conflating the two is how teams end up monitoring the wrong thing); drift on low-importance features that never affected the output; raw prediction counts without a distribution reference. The trap is monitoring everything “to be safe,” which produces so many low-value alerts that the team stops reading them — and then misses the one that mattered. Fewer, well-chosen signals that are each tied to a defined response beat a dashboard of forty metrics nobody trusts. This same principle governs the broader MLOps practices in our guide to MLOps principles for generative AI teams, where monitoring is one discipline inside a larger operational loop. FAQ What should you know about monitoring ML models in practice? Model monitoring continuously compares what a model sees and produces in production against its validation-time behaviour, across three layers: input distributions, output distributions, and — when ground truth arrives — outcome accuracy. In practice it means instrumenting prediction quality separately from service health, because a model can fail while the service that hosts it stays perfectly healthy. Why does a model that looks healthy on infrastructure dashboards still fail, and what signals actually reveal degradation? Infrastructure telemetry watches uptime, latency, and error rates — none of which move when a model returns a well-formed but wrong prediction. Prediction quality is invisible to that layer by design. The signals that reveal degradation are feature-distribution drift (the earliest), prediction-distribution shifts, and delayed outcome accuracy against a training baseline. How does monitoring differ across the AI families — classical ML, deep learning, and generative systems? Classical ML drifts silently as input distributions shift, so you watch data and concept drift. Deep learning fails on edge cases outside its training manifold without raising an exception, so you watch confidence distributions and out-of-distribution inputs. Generative systems produce fluent output that is confidently wrong, so you watch output-quality proxies, grounding, and safety rates rather than a single accuracy number. What is the difference between data drift and concept drift, and how do you detect each? Data drift is a change in the input distribution — detectable without labels using statistical distance measures against a training-time reference. Concept drift is a change in the input-to-output relationship itself, which requires ground-truth labels to detect because the inputs can look identical while the correct mapping has changed. Use data drift as an early tripwire and concept drift as confirmation. How do you monitor a generative AI system when there is no single ground-truth label to compare against? You replace the missing label with a panel of proxies: grounding or faithfulness checks against retrieved sources, reference-free quality scores from an evaluator model, deterministic safety and format filters, and human review on a routed sample. No single proxy is authoritative, so you treat any one of them moving as a reason to investigate. When should monitoring signals trigger a retrain versus a rollback or human review? Map each signal to a response: a broken input pipeline or schema violation calls for a rollback and an upstream fix, not a retrain; confirmed concept drift against delayed labels calls for a retrain because the learned mapping is genuinely wrong; a generative grounding drop routes affected traffic to human review. Drift alone does not mean retrain — if accuracy held, retraining is premature. Which monitoring metrics are worth tracking, and which are noise that adds cost without insight? Worth tracking: drift on the few high-importance features, prediction-distribution stability, delayed outcome accuracy, and for generative systems a grounding score and safety-filter rate. Noise: per-request latency as a model-health signal (it is a service metric), drift on features that never affected the output, and raw prediction counts without a distribution baseline. Fewer well-chosen signals beat a dashboard nobody trusts. What to check before you commit Model monitoring is not a dashboard you buy; it is a set of signals you choose deliberately, each mapped to a response, and each chosen because it matches the way your model family actually fails. Start by classifying the system — classical, deep, or generative — because that classification tells you which failures are even possible, and therefore which monitors are worth building. The teams that get this right are the ones that stopped asking “is the service up?” and started asking “is the model still right?” — and built the instrumentation to answer the second question before a customer answers it for them.