ML in Production: Why ML Models Degrade After Deployment
You trained the model. Validation loss looked good. You shipped it. A few weeks later, someone from the business side asks why the predictions seem off. You check the metrics. They are off. The model you deployed is no longer the model you tested.
This is not a bug. It is the default behaviour of machine learning systems in the real world — and understanding why it happens is the first step to building systems that survive contact with production.
The World Moves. Your Model Doesn’t.
A machine learning model is a snapshot. It learns patterns from data that existed at a point in time, encodes those patterns into weights, and then freezes. The world, however, keeps moving.
This mismatch is called data drift, and it comes in two distinct forms.
Feature drift is when the distribution of your input data changes. A fraud detection model trained on transactions from 2023 will have learned what normal purchase patterns looked like in 2023. If spending behaviour shifts — because of a recession, a new payment platform, a change in demographics — the inputs the model sees in production no longer match the inputs it was trained on. It’s applying 2023 intuitions to 2025 behaviour.
Concept drift is subtler and more dangerous. It’s when the relationship between your inputs and the correct output changes, even if the inputs themselves look similar. A credit scoring model learns that certain combinations of features predict default risk. But default risk is shaped by interest rates, employment conditions, and macroeconomic context — none of which are static. The same person, with the same income and debt profile, is a different risk in different economic conditions. The model doesn’t know that.
Training Data Is Never a Perfect Mirror of Production
Even on day one, your model faces a problem it wasn’t told about: the data it trained on was not actually representative of what it would see in deployment.
This happens in several ways. Selection bias in the training set means certain patterns were over- or under-represented. A recommendation model trained on engaged users doesn’t capture the preferences of users who churned. A medical diagnostic model trained on data from large urban hospitals may perform poorly in rural clinics.
Label leakage is another common source of hidden degradation. During training, features are available that wouldn’t be in production at the time of prediction. The model learns a shortcut that worked in the historical data but doesn’t generalise. It performs well in evaluation, then confuses everyone in production.
These aren’t always obvious during development. They surface gradually as the model encounters real distribution.
Feedback Loops Corrupt the Training Signal
Many production ML systems create their own feedback loops, and those loops quietly poison the next iteration of the model.
A content recommendation system shows users what it thinks they want. Users only interact with what they’re shown. The next training batch reflects that interaction — not what users would have engaged with in an unbiased sample. Over time, the model doubles down on its own prior decisions, narrowing what it recommends and amplifying its own biases.
A loan approval system trained partly on its own prior approvals will never learn from the applicants it rejected. The rejected population is invisible to it. Future models trained on this data inherit that blind spot.
This is called feedback loop bias or exposure bias, depending on the domain. It’s a form of degradation that doesn’t show up in your offline metrics because your offline metrics are built from the same corrupted data.
Infrastructure and Pipeline Changes Break Models Silently
Not all model degradation comes from the data. Sometimes the model is fine and something in the surrounding system changed.
A preprocessing step gets updated. A feature is computed slightly differently. A data source changes its schema. An upstream service starts returning nulls where it used to return defaults. The model continues to produce predictions — it doesn’t throw an error — but the predictions are now based on subtly different inputs than the ones it was trained on.
This is pipeline drift, and it’s particularly insidious because nothing obviously breaks. Your monitoring may show normal prediction volume and latency. The degradation shows up in business metrics, and by the time it’s traced back to a pipeline change, weeks of bad predictions have already been served.
How You Actually Fight This
The first line of defence is monitoring. Not just infrastructure monitoring — model-specific monitoring. Track the distribution of your input features over time and alert when they shift significantly from training distribution. Track prediction distribution. Track confidence scores. Track the correlation between your model’s outputs and the outcomes you care about, whenever labels become available.
Retraining schedules help but they’re not enough on their own. A model retrained monthly on all historical data will still inherit historical biases. More effective is retraining on a sliding window of recent data, so the model stays calibrated to current conditions, combined with techniques like champion-challenger testing — where the current production model and a newly trained challenger run in parallel and you compare their performance before fully replacing.
Shadow mode deployments are underused. Running a new model in shadow — receiving real inputs, generating predictions, but not acting on them — lets you evaluate it against ground truth before it affects anything. It is the closest thing ML has to a staging environment that actually reflects production conditions.
Finally, treat the pipeline as part of the model. Any change to data collection, preprocessing, or feature engineering is a change to what your model actually receives. Version your pipelines alongside your models, and test pipeline changes with the same rigour as model changes.
Deployment Is the Beginning, Not the End
The framing that treats model deployment as the finish line is the source of most production ML problems. It encourages teams to optimise for evaluation metrics at training time and underfund the infrastructure needed to maintain model quality over time.
A model is a living artefact. It was trained on the past, deployed into the present, and asked to remain useful into the future — with no mechanism to adapt unless you build one. The degradation you’ll eventually see isn’t a failure of the model. It’s a failure to treat model maintenance as an ongoing engineering discipline, not a one-time task.
Enjoyed this post?
Stay in the loop
New posts + weekly digest, straight to your inbox.
Create a free account
- Save posts to your vault
- Like posts & build history
- New-post alerts
No comments yet. Be the first to comment!