A stable AUC hiding a segment-level collapse
A lender runs a credit-default model that approves or declines loan applications in real time. Aggregate AUC has been 0.78 +/- 0.01 for eight months, but last month the approval rate for applicants aged 25-34 fell 9 points while overall approval rate stayed flat. Ground truth arrives 60 days later when loans begin repaying. A vendor started sending an updated income field with values in a different currency unit 45 days ago; nobody noticed until the risk team complained. There are 220 features; 60 come from the vendor. The team has a prediction-drift alert that fires daily and is ignored.
1. Why did the existing monitoring miss this, and what would you add? Be specific about the mechanisms available on Vertex AI and where you have to build your own.
Read the worked answer
Three independent blind spots:
- Aggregation hides segments. Endpoint-level or dataset-level drift on 220 features, averaged over the whole population, will not move when one age band shifts. Add segment-scoped monitoring: either separate Vertex AI Model Monitoring jobs with training distributions computed per segment, or a scheduled BigQuery job computing per-segment score distribution and approval rate versus a stored baseline. The business KPI (approval rate by segment) belongs in the same place as the model metrics.
- Input validation is missing. A currency-unit change is a schema/semantics violation, not gradual drift. Add a data contract check at ingestion for the 60 vendor fields - type, range, distribution bounds, unit assumptions - that fails the load rather than passing it downstream. Drift detection would eventually notice a shifted income distribution; a range check catches it on day one.
- Ground truth is delayed 60 days, so label-based monitoring is always behind. Approximate the model with proxy labels available sooner (30-day delinquency, application withdrawal) and configure Model Monitoring to ingest the real labels as they arrive, accepting that label-drift alerts are retrospective.
Also log the model's inputs per request so a post-hoc segment analysis is possible at all - without that, the 9-point drop is unexplainable.
2. The drift alert fires every day and nobody reads it. Redesign the alerting so that the next vendor field change reaches a human in minutes and routine noise does not.
Read the worked answer
The current alert has no action attached to it, which trains people to ignore all alerts. Tier them by required response:
- Page (minutes): data contract violations, schema failures, missing vendor feed, serving error rate, latency SLO breaches. These are unambiguous, have a known owner, and a defined first action.
- Ticket (same week): feature distribution drift beyond an effect-size threshold, training-serving skew on a top feature, segment-level approval-rate deviation.
- Digest (weekly): everything else, reviewed in a standing 30-minute meeting.
Make thresholds effect-size based, not p-value based, and window them (7-day rolling versus 28-day baseline) so high-volume features stop firing on statistical noise. Turn off or reroute the daily prediction-drift alert until it has a documented action; a disabled alert with a reason is more honest than a live one nobody reads.
Finally, name a human owner per alert and route each tier to a different channel with a runbook link. If a reviewer cannot state what they would do when it fires, the alert should not exist.
3. Leadership now wants automatic weekly retraining triggered by drift. What guardrails do you insist on before that is allowed to promote a model without review?
Read the worked answer
Automate the pipeline, not the decision - not yet, and not for a lending model with fair-lending exposure.
Pipeline (Vertex AI Pipelines, triggered by Cloud Scheduler for the weekly cadence and by a drift event from Model Monitoring): ingest and validate vendor data against the contract, build features from the versioned SQL, train, evaluate on a time-sliced holdout with mandatory segment slices (age, geography, income band), compare against the champion including approval-rate impact at the operating threshold, and write everything to Vertex ML Metadata.
Guardrails before auto-promotion:
- Data validation failure stops the run - the 45-day currency incident must never train a model. If the vendor feed is unvalidated, the correct outcome is no new model, not a model trained on bad units.
- Fairness and segment gates - a challenger that improves aggregate AUC while shifting approval rates across protected segments does not ship, regardless of the headline metric.
- Shadow scoring for at least one full cycle before any traffic, because 60-day labels mean the promotion decision is made on stale evidence.
- Human approval for promotion, with automatic rollback available via Model Registry aliases.
Revisit auto-promotion only after several cycles where the gates would have fired correctly. The value of automation here is cadence and reproducibility, not removing the reviewer from a decision that affects people's access to credit.