Concept and Data Drift
A model trained on yesterday's data makes predictions for today. When the world shifts, performance degrades — silently, until it becomes a problem.
A model trained on yesterday's data makes predictions for today. When the world shifts, performance degrades — silently, until it becomes a problem.
Why models fail silently — and how to measure it before it becomes a disaster.
A deployed model is a snapshot of the world at training time. The world is not static. Customer behaviour shifts, product lines change, economic conditions fluctuate, fraud tactics evolve. When the gap between training-time reality and serving-time reality grows large enough, model performance drops — often without any code change, any engineer error, or any detectable system failure.
This category of failure is called model drift. It is the primary reason production ML systems require monitoring, not just deployment.
Data drift occurs when the distribution of input features P(X) changes between training and serving. The true relationship between features and label remains the same — the feature distributions themselves have shifted.
Examples: a credit scoring model trained on salary distributions from 2020 sees 2025 salary distributions shifted by inflation. A fraud detection model trained on transaction amounts during normal times sees pandemic-era transaction patterns. The model's learned boundaries are calibrated for a distribution it no longer sees.
Data drift is detectable without labels: you can compare serving feature distributions to training distributions at any time.
Concept drift occurs when the relationship between features and labels P(Y|X) changes. The inputs look the same but the correct output has changed.
Examples: the features that predicted spam email in 2015 no longer predict spam in 2025 because spammers adapted. The word patterns that indicated fraud evolved. A sentiment model trained before a major event may assign the wrong polarity to new linguistic patterns.
Concept drift cannot be detected without labels. You need ground truth outcomes (which may be delayed — a loan default takes months to manifest) to measure it.
PSI is the standard industry metric for quantifying data drift. It compares a reference distribution (typically training data) to a current distribution (recent serving data) by bucketing both into bins and comparing proportions:
PSI = ∑ (p_current − p_reference) × ln(p_current / p_reference)
PSI interpretation: below 0.10 no meaningful drift; 0.10–0.20 moderate shift worth investigating; above 0.20 significant shift, consider retraining.
PSI was originally developed in credit scoring (banking) to monitor scorecard stability. It is now standard across industries.
KL divergence (Kullback-Leibler) measures information loss when approximating one distribution with another:
KL(P || Q) = ∑ P(x) × log(P(x) / Q(x))
PSI is actually symmetric KL divergence: PSI = KL(current || reference) + KL(reference || current). This symmetry makes PSI easier to interpret than directional KL.
Other tests: Kolmogorov-Smirnov (KS) test for continuous distributions, chi-squared for categorical features, Wasserstein distance for high-dimensional data.
| Strategy | Works for | Requires labels? |
|---|---|---|
| PSI on features | Data drift | No |
| Prediction distribution shift | Proxy for concept drift | No |
| Performance metrics (accuracy, AUC) | Concept drift | Yes (delayed) |
| CUSUM / ADWIN | Statistical change detection | Depends |
Three trigger strategies in practice:
Say the answer out loud before you reveal it.
What is the difference between data drift and concept drift?
What does PSI measure and what are the thresholds?
Why can't you detect concept drift without labels?
What are the three retraining trigger strategies in MLOps?
Data drift = P(X) shifts (detectable without labels). Concept drift = P(Y|X) shifts (needs labels). PSI quantifies feature drift: <0.10 stable, 0.10-0.20 investigate, ≥0.20 retrain. Monitor both feature distributions and prediction distributions in production.