01What the evidence says
Every figure here is regenerated from the pipeline each time the site builds, and each one carries the kind of evidence standing behind it. Hover a badge to see its source.
Value-ranking beats risk-ranking, decisively
Conventional collections sorts by probability of default and works the top of the list. The allocator maximises expected recovered value per agent-minute: uplift over self-cure, weighted by exposure, under a capacity constraint. On the test queue it recovers far more money with roughly half the calls, because it skips the self-curers and the trivial-exposure accounts that risk-ranking burns minutes on. A borrower 40% likely to worsen owing €168,000 outranks one 95% likely owing €2,000. Risk-ranking gets that backwards every time.
The edge is not a constant. It is largest when capacity is scarce and shrinks as capacity approaches full coverage, which is the honest shape of the result and the reason the allocator studio ships the whole frontier instead of one flattering point.
Silence is the most valuable call the Risk Lens makes
Most early delinquents pay without being chased. Chasing them costs money and irritates people who were about to pay anyway. Making “do not contact” a scored action with money attached, rather than the absence of one, is where a large share of the efficiency lives.
Borrower state is unknowable from servicing data, so the system asks
Capacity is estimable from payment trajectory and affordability. Willingness is not, at least not without a conversation. On real accounts only — reach a confident capacity by willingness quadrant. The rest route to the diagnostic question that separates cannot pay from will not pay. That is not a shortfall. It is the reason the product has two lenses at all, because teaching an agent what to ask beats telling them what to say when the model does not know.
Median confidence across the queue is —. Willingness is capped low by construction here, because servicing data carries no contact events, no promises, and no channel response to learn it from.
The two-tier hint design is forced by physics
Real call audio gives a median inter-turn gap of —, measured across — real turn boundaries. Model composition takes 500 to 1500 ms and cannot fit that gap. So deterministic hints render in under a millisecond and land live, while model-composed strategy hints wait for the next pause.
Concretely, — of real boundaries are wide enough for a hint at the 300 ms budget, against — for a 500 ms model call. The budget itself is the measured 25th percentile (—) rounded up, not a number chosen for convenience.
Models drift, and the monitor catches it
Self-cure rate rose from — to — across the backtest window. The ranking held. Absolute calibration lagged, because no model calibrates to a regime shift it never saw. That is precisely what the outcome loop and drift monitor exist for.
Quiet, bending, behind, recovering, quiet again. An account moves through phases the way the moon does, and the entire product is built to notice the second one.
02What is built
Ten stages, each with a pass or fail gate, built in sequence. A stage started only once the previous gate was green. Everything runs.
| Capability | Gate result |
|---|---|
| Panel | —-row monthly panel over — loans, real dates, full roll curve, no leakage |
| Risk models | L1 AUC — (beats base Brier) · L2 AUC — |
| Allocator | — recovered value against risk-ranking |
| Borrower state | 6 of 6 archetypes, — route to a diagnostic question |
| Conversations | PTP extractor — on gold, loop closes |
| Coach Lens | tier 1 at 0.04 ms · tier 2 demotes at 4.5 s |
| Evals | judge — agreement, under the reliability ceiling |
| Latency budget | —, from — real turn gaps |
| Agent desk | live replay of a real scored call, with hints, override and a control arm |
Seventy tests pass. Fourteen design invariants are enforced in code rather than in a checklist, because a defect is closed when something automated fails if it comes back, never before. The invariants, and what each one caught.
03How it reaches the floor
Shadow first, then a randomised slice, then the floor. Everything needed before the system touches a real borrower already exists: a calibrated risk model with reason codes, an allocator that beats the status quo, a coaching layer inside the latency budget, an experiment framework that can prove or disprove value, and a decision log of every score, hint and override.
Stage 1 · shadow, 4 to 6 weeks. Both lenses run alongside live calls and show nothing to agents. The queue the system would have built is compared against the one that was worked, and the hints it would have fired are logged. This is where the models meet real contact data and real ASR for the first time, at no risk to anyone.
Stage 2 · limited live, 8 to 12 weeks. Coaching switches on for a randomised subset of agents, against the permanent control arm the desk already implements. Complaint rate, broken-promise rate and repeat-contact rate are hard stops rather than report lines. This is the first honest read on whether coaching moves money.
The control arm is not optional. Without it there is no way to separate the product working from the allocator simply selecting more recoverable borrowers. The arm costs almost nothing. Running blind costs the entire result.
Every logged decision carries its arm and its propensity, and a retrain aborts if either is absent. That is what stops the models quietly learning the allocator's preferences instead of borrower behaviour.
04What it will not claim yet
Each of these could have been estimated into something impressive. They carry pending instead, and the code enforces it.
- Real conversation data linked to outcomes. The largest gap. All
conversation work rests on synthetic transcripts, which validate plumbing but cannot
prove conversation features improve prediction, because the generator's own priors would
leak into any lift. Only real calls joined to real payments settle it, and
evals/metrics.pyrefuses to compute the number until then. - Contactability. Best time and best channel need contact-event history, which servicing data does not carry. It waits for live data.
- Measured uplift. The allocator's edge assumes an uplift shape from published practice. The shape is defensible. The magnitude is not a promise until the control arm measures it, which is why it carries simulated rather than backtested.
- Telephony-grade ASR. The budget was measured on 16 kHz audio with an energy VAD. Real 8 kHz telephony adds an estimated 8 to 12% word error rate, and the audio layer sits behind a swappable interface for exactly that reason.
- A second labeller. Every eval rests on one person's gold labels. That buys consistency, not correctness, and a practitioner second-labelling is the first quality upgrade available.
- Outcome support for the playbook. Every coaching strategy currently carries seeded from collections practice with a support count of zero. None is promoted until real outcomes back it above the threshold, and the desk shows that count on every hint so thin evidence looks thin.
05The standard
Three things this system refuses to fake, all of which would have been easy. It does not claim conversation features beat tabular features, because the code will not compute that number on synthetic records. It does not report recovery lift, promise-kept lift or override rate, because those need live data and carry a pending badge rather than an estimate. It does not dress a regime-shift calibration miss as a pass, and it does not bury it either. It reports the drift and points at the mechanism built to handle it.
The measure of this work is not that every number is green. It is that every number is one you could stake a lending decision on, and that where a number cannot yet be earned honestly, the system says so and shows exactly what it would take.