Concept Drift
The relationship between features and outcome changed. The inputs did not move, so no input monitor fires; the scores did not move, so no prediction monitor fires. Only the outcomes reveal it, and they arrive late.
The problem, the obvious approach, and why it breaks
Every lesson starts where the work starts: someone has a problem, and the first model that comes to mind looks fine offline.
Every feature distribution is stable, the prediction distribution is stable, and the model is now wrong. What changed, and what could have shown it?
A fraud model has been stable for a year. This quarter, chargebacks that the model scored as low-risk have doubled. The feature dashboards are green. The fraud operations lead says a new ring is operating and their transactions "look completely normal" — which is the point.
The monitoring is comprehensive: every feature has a distance monitor, the prediction distribution is tracked, and nothing has alerted. The model is fine and the doubling in chargebacks is a business trend.
The model is not fine. It is applying weights learned from last year's fraud to this year's, and this year's fraud has been shaped — by the model — to look like last year's legitimate traffic. The features are unchanged because the fraudsters made sure of it.
- The model is not fine. It is applying weights learned from last year's fraud to this year's, and this year's fraud has been shaped — by the model — to look like last year's legitimate traffic. The features are unchanged because the fraudsters made sure of it.
- In the Drift Explorer's concept-drift scenario, the relationship between the main feature and the outcome flips at week 6; every feature distribution stays at its week-0 level, PSI never leaves the noise floor, and the first accuracy drop becomes observable three weeks after the change — when the labels for the week it happened arrive.
- The comprehensive dashboard covered P(X). The thing that changed was P(Y | X). No amount of input monitoring covers that, and the team's confidence in the green dashboard is what delayed the response.
What is being predicted, and from what data
This domain leads with these two. A target nobody defined precisely is a label nobody can trust, and a dataset nobody can describe is a model nobody can debug.
- Predict chargeback within ninety days. The label is the chargeback, which arrives up to three months after the transaction.
- The decision is the review queue; a model that scores a new kind of fraud as normal sends it straight through, and the cost is the full fraud loss on every one.
- Transactions with features that described fraud well a year ago: velocity, distance from last transaction, merchant category patterns. The fraudsters have learned which patterns get flagged and now avoid them.
- Labels are chargebacks joined back to predictions by transaction id, with a ninety-day delay (Ground-Truth Delay).
How it actually works
Precisely enough to predict its behaviour — not a framework API.
- A supervised model estimates P(Y | X) on training data. Concept drift is a change in that conditional: the same feature values now imply a different outcome. It can be sudden (a policy change, a new fraud technique), gradual (customer preferences shifting), or recurring (seasonal). In adversarial settings it is driven by the model itself: the adversary adapts to what gets caught.
- Because X is unchanged, the model's outputs are unchanged — it is a function of X. Every label-free monitor reads exactly what it read before. The only quantity that moves is the agreement between the model's outputs and the outcomes, and that is computable only once outcomes exist.
- The retrain is genuinely the right response here, and it has a constraint the other drift types do not: it needs enough labels from after the change to learn the new relationship. Retraining early, on labels mostly from before the change, relearns the old concept (Retraining Strategies).
The dashboard that stays green
The explorer's concept-drift scenario is deliberately cruel to the input monitors. From week 6 the main feature stops meaning what it meant — the true relationship flips sign — and nothing about the feature's distribution changes. PSI stays at sampling noise. The prediction mean stays where it was, because the model is a fixed function of unchanged inputs. The only reading that moves is accuracy, and accuracy for week 6 is not computable until week 9.
This is the scenario that makes the case for the outcome join. Without it, the model is wrong for the rest of the run and every chart says it is healthy.
Fraud that learned the model
The offline metric at the last retrain was strong and it was honest: on the fraud of that period, the model was good. The fraud of this period was generated by people who observed what got flagged and stopped doing it. Their transactions are inside the feature ranges the model calls safe, because that was the design goal.
The gap cannot be closed by any input-side instrument. It can be narrowed by a faster outcome — a dispute, a review verdict — and it is closed only by the chargebacks, which take a quarter to arrive.
Validation metric at the last retrain strong; every feature monitor and the prediction monitor stable for the entire year.
Chargebacks on low-scored transactions doubled over the quarter; the fraud lead reports a ring whose transactions look normal on every feature the model uses.
- 1Adversarial concept drift: the fraudsters adapted to the model, so the features that identified fraud last year now identify last year's fraud, and the relationship between the same feature values and the outcome has changed.
- 2The label delay meant the first quality reading from the affected period arrived a quarter after it began; the dashboards for that quarter showed the previous quarter's quality.
- 3A slice by merchant category would have shown the drop earlier, because the ring concentrated on one, but quality was only reported in aggregate.
The assumption nothing else can check
Every other lesson in this module has a label-free monitor for its assumption. This one does not. The assumption that the learned relationship still holds is checked only by outcomes, and the check runs on a delay equal to however long the world takes to reveal them.
The response, once the drop is confirmed, is a retrain — the one case in the module where "retrain" is the right first answer — with the constraint that it needs post-change labels.
P(Y | X) at serving time is the P(Y | X) the model was trained on, so that the same feature values still imply the same outcome probabilities.
holds when The process generating outcomes has not changed; no adversary is adapting; delayed quality per prediction week stays at the validation level, and proxy-outcome agreement is stable.
breaks when An adversary adapts to what the model catches; a policy or product change alters what the outcome means; a seasonal regime the training window did not include arrives.
respond Retrain, weighting or restricting to post-change labels once enough exist; add proxies to shorten the next detection; in adversarial domains, set the retrain cadence from the observed adaptation rate rather than a calendar.
1-- Each prediction week's accuracy, and the week that number could first be computed.2SELECT p.prediction_week,3 p.model_version,4 p.prediction_week + :label_delay_weeks AS observable_from_week,5 avg(CASE WHEN (p.score >= 0.5) = o.is_fraud THEN 1 ELSE 0 END) AS accuracy,6 count(*) AS joined_rows7FROM prediction_log p8JOIN outcomes o ON o.transaction_id = p.transaction_id9WHERE o.observed_at <= now()10GROUP BY 1, 211ORDER BY 1;The observable_from_week column is the honest one. A chart that plots accuracy at prediction_week makes the drop look like it was visible when it happened; it was visible label_delay weeks later, and the response could not have started before that.
How to build it
Most important first.
- Build the outcome join and the delayed-quality dashboard, because it is the only monitor that can see this. Quality per week of prediction, plotted at the week the labels arrived, with the label delay visible on the chart.
- Use proxy outcomes with shorter delays where they exist — a chargeback takes ninety days, a customer dispute takes ten, a manual-review verdict takes one — and monitor the proxy's agreement with the model as the leading indicator (Ground-Truth Delay).
- Slice delayed quality by segment, because concept drift often begins in one — a new merchant category, a new region — and shows in the slice weeks before the aggregate.
- When the delayed quality falls with no input or prediction signal, treat it as concept drift by elimination, and plan a retrain that waits for enough post-change labels or weights recent ones (Retraining as a Decision).
- In adversarial domains, expect it: a model that catches fraud changes fraud. Budget for the retrain cadence the adversary imposes (Designing a Fraud Detection System).
What to measure
Which number actually maps to the decision — and which numbers look relevant and are not.
- Quality at the operating threshold on joined outcomes, per prediction week, as labels arrive. This is the only number that reveals concept drift, and its latency is the label delay.
- Proxy-outcome agreement with shorter delay, as the early warning, with its correlation to the true outcome measured so its warnings can be weighed.
- The feature and prediction monitors, reported as stable — so that "quality fell and nothing else moved" is recognised as a fingerprint rather than a contradiction (Performance Decay).
What must stay true after deployment
The field this whole domain exists for. A model is a set of assumptions with weights attached; these are the ones a monitor or a test should be checking.
- The relationship between features and outcome that the model learned is still the one that generates outcomes — the assumption no label-free monitor can check.
- Outcomes are joined back to predictions at a stable rate, so a fall in quality is a fall in the model and not a fall in the join.
- Proxy outcomes remain correlated with the true label; their correlation is itself monitored.
- Offline: on the training data, evaluate the model on the most recent period only, against the whole period; a gap is concept drift already under way before deployment (Time-Based Split).
- Online: the delayed-quality dashboard, with proxies for the recent weeks and the true label for the older ones, and a slice by the segments where a change would begin.
- Over time: after a retrain for concept drift, confirm quality recovers on post-change labels specifically, not on the mixed window.
What can go wrong
- The proxy outcome is itself gamed by the adversary, or its correlation with the true label decays, and the early warning goes quiet just when the true quality falls.
- The retrain is run as soon as quality drops, on a training window dominated by pre-change labels; the new model learns the old concept with slightly different weights and quality does not recover.
- Quality is sliced only on the aggregate; the drift is confined to one merchant category for six weeks before it is large enough to move the overall number.
- The delayed-quality dashboard is the most expensive monitor to build — it needs the join, the delay handling and the versioning — and the only one that works here.
- Waiting for post-change labels before retraining means serving a wrong model for the label delay plus the accumulation time; retraining sooner means relearning the old concept.
- Proxies are faster and less trustworthy, and someone has to keep measuring how much less.
- "No drift alert fired, so it is not the model." Every drift alert that exists measures inputs or outputs. Concept drift changes neither. The absence of an alert is the fingerprint.
- "Retrain on the last month." The last month's labels are mostly from before the change, because of the label delay. The retrain relearns the concept the model already has.
- "Add more features so the model can see the new fraud." Possibly right, and a separate decision. The current model's features were fine for the concept it was trained on; the concept moved.
Where this applies
ML advice is stated as universal far more often than it is. These labels say what each claim is specific to — and where CONTESTED appears, the note gives the strongest form of the opposing view.
- GENERALThat a change in P(Y | X) with P(X) fixed is invisible to every label-free monitor follows from the model being a function of X; it is true for any model, any task and any domain.
- DOMAIN-SPECIFICIn fraud, spam and security the drift is adversarial and continuous, and retraining cadence is set by the adversary; in demand forecasting it is seasonal and partly predictable; in medical risk it is slow and driven by practice changes. The detection is the same; the expected rate is not.
- SIMULATEDThe concept-drift scenario — a sign flip on the main feature at week 6, PSI at the noise floor throughout, the quality drop observable three weeks later — is the Drift Explorer's synthetic model, for the shape of the argument, not a measurement.
Where the depth lives
This domain teaches the model and hands the rest off by name.