ML Systems Lab Open interactive version →
Foundational 35 min read monitoringdriftmodel decayMLOps

Monitoring Taxonomy

Data drift, concept drift, model decay, infrastructure drift

Your fraud model is suddenly catching 30% fewer frauds. Something changed — but what? Four very different causes could produce this exact drop. The `income` feature distribution shifted, so the model is seeing a different population than it trained on. Or fraud tactics evolved, so the same transaction profile now carries a different fraud probability. Or the overall fraud rate went up while the model's per-transaction accuracy is unchanged. Or the feature pipeline broke and is quietly sending nulls downstream. Each demands a completely different fix. Without a way to tell them apart, you are debugging blind.


Four causes, four precise questions

*Data drift* asks: has P(X) changed? The inputs shifted — your transactions now have a different income distribution than training. You detect it with statistical tests — PSI (Population Stability Index), the KS (Kolmogorov–Smirnov) test, and chi-squared — on feature distributions. It may or may not hurt performance, depending on whether the input-output relationship also moved.

*Concept drift* asks: has P(Y|X) changed? The relationship itself moved — a profile that was 3% fraud is now 15% because tactics evolved. You can only confirm it with labels, by watching performance degrade. This one genuinely needs retraining on recent data.

*Prior shift* asks: has P(Y) changed while P(X|Y) held? The base rate went from 1% to 3% — more fraud, not different fraud. Like concept drift, you can only confirm it with labels — but where concept drift shows the same transaction profile mapping to a different fraud rate, prior shift shows the overall base rate moving while each profile's own rate stays put. Often a threshold adjustment is enough.

*Infrastructure drift* asks: is the pipeline broken? Schema changed, latency spiked, a dependency degraded. Often the failure is silent: failed requests fall back to a default not-fraud prediction instead of erroring loudly, so recall drops from false negatives even though the features that did make it through the pipeline look completely normal. That's an engineering fix, not a model fix.


Why the taxonomy earns its keep

A broken pipeline and real concept drift can produce the *identical* drop in recall. But patch concept drift with an engineering fix and nothing improves; "fix" a broken pipeline by retraining and you burn a week to land exactly where you started. This is the difference between a 30-minute fix and a wasted week.

And that's why "just watch the output score distribution" isn't enough. Output monitoring tells you behavior changed, not *why.* Feature monitoring tells you what moved in the data. Infrastructure monitoring tells you if the cause isn't in the data at all. You need all four layers to separate a drift that needs retraining from a pipeline bug that needs a half-hour patch — and collapsing everything into "model problem" is the single most expensive habit in production ML.

Key points

Takeaway

A drop in model performance has four possible causes — data drift, concept drift, prior shift, and infrastructure drift — and applying the wrong remedy to any of them wastes time while the problem compounds.

Recap

Check your understanding

Q1. Your fraud model is flagging more transactions as fraudulent over time, but actual fraud labels (available after investigation) show no increase in fraud rate. What type of drift is this?

Q2. Recall dropped 30% overnight. Feature PSI is clean, prediction score distribution is unchanged, but the endpoint error rate jumped to 6%. Which layer is the cause?

Q3. Which two statements correctly describe why reflexively retraining on every drift alert is the "single most expensive habit" the taxonomy warns against?

Try it interactively

ML Systems Lab is a free interview-prep platform for ML engineers — work through the full interactive module, quizzes, and drills.

Open ML Systems Lab →