Quality · hard · ~13 min
The new fraud model was spectacular offline: AUC 0.94 against 0.81 for the incumbent. It shipped two weeks ago. Online, it's performing *below* the incumbent — and its precision decays a little more each day.
The training data was built fast: the team joined the current feature-store snapshot (each user's chargebacks_90d, orders_30d, account_age…) onto 18 months of labeled historical transactions and trained on the result.
chargebacks_90d
orders_30d
account_age
The serving path reads the same feature store live. Same features, same store, same model. The data scientist insists nothing is inconsistent. The evaluation harness agrees. Production disagrees.