Drift and Adaptation — Defending Against an Adversary Who Read Your Model

Ordinary ML drift is weather — the world changes and models age. Fraud drift is war — the distribution shifts precisely because you deployed, as attackers probe the new boundary and route around it. A fraud system's long-run performance is therefore determined less by any single model than by its adaptation loop: how fast drift is detected, how fast a response ships, and how safely the response is validated against labels that haven't arrived yet. This post builds that loop.

Post 1 promised decay by design; post 5 explained why confirmation runs months late. This post is the machinery that fights anyway — the fraud-specific edition of the drift chapter in LLMOps and classic MLOps practice.

Detecting drift before the labels confirm it

Waiting for chargebacks to reveal decay means discovering November’s attack in February. The detection stack works in order of signal speed:

The response ladder

Matching post 2’s architecture, responses ship at different speeds with different costs. Rules in minutes — the fast-response immune system: a spotted attack pattern becomes a targeted rule while any retrain is still assembling data; the discipline is tagging such rules as tactical with expiry dates, so the rule layer doesn’t fossilize around attacks the next model version absorbs. Thresholds in hours — post 4’s cost framework allows defensive posture shifts (tighten thresholds in an attacked segment, accept the FP cost consciously) without touching any model. Retraining on cadence plus trigger — regular refresh (weekly-to-monthly, per label maturity) as the baseline, drift-triggered retrains as the exception path; recency-weighted training data so the model tracks the moving adversary without forgetting stable patterns. Challenger models continuously — the structural answer to “is the incumbent still best?”: candidates score in shadow on live traffic (zdm-04’s shadow pattern, applied to models), compared on fast proxies first and mature labels eventually.

Validating under label delay

The loop’s hardest problem: a drift-triggered response can’t wait a quarter for confirmation. The working compromise is staged trust — judge challengers first on agreement surfaces (where do champion and challenger disagree? route those disagreements preferentially into post 7’s review queues, buying human labels exactly where models diverge), then on proxy metrics, then promote with a bounded canary (small traffic slice, amount caps — the exploration machinery of post 5 reused for model rollout), and let mature labels retrospectively audit the whole decision months later. That retrospective audit matters beyond any single rollout: it calibrates the loop itself — how often did fast signals mislead, how much did tactical rules cost in FPs, did recency weighting help — because in an adversarial setting, the meta-question “is our adaptation process working?” is the one the attacker is actively trying to make you answer wrongly.

The takeaway: against an adapting adversary, the system is the loop — detection cascaded by speed (input drift same-day, score drift and calibration fast, proxy labels in days, chargebacks as the eventual truth), responses laddered by cost (tactical expiring rules in minutes, threshold posture in hours, cadence-plus-trigger retrains, continuous shadow challengers), and validation staged around label delay (disagreement-targeted review, proxies, bounded canaries, retrospective audit). Models decay by design; the loop is what’s built to last.

Key takeaways

Further reading

Sources & References

when the data's meaning moves under the model