The argument

Fewer calls. More money. Every step on the record.

Ganymede decides which delinquent borrower is worth an agent-minute, then shapes the conversation that follows. This is the case for both halves: what the evidence shows, how it reaches the floor, and the figures it refuses to estimate before it has earned them.

Ganymede. Ancient cratered ground cut across by long parallel grooves, formed where the crust pulled apart. Drawn from the palette, not photographed.

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.

recovered value against risk-ranking at the same capacity, using roughly half the contacts
of delinquent accounts return to current with no contact at all
of accounts need a diagnostic question rather than a guessed strategy

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.

CapabilityGate result
Panel -row monthly panel over loans, real dates, full roll curve, no leakage
Risk modelsL1 AUC (beats base Brier) · L2 AUC
Allocator recovered value against risk-ranking
Borrower state6 of 6 archetypes, route to a diagnostic question
Conversations PTP extractor on gold, loop closes
Coach Lenstier 1 at 0.04 ms · tier 2 demotes at 4.5 s
Evalsjudge agreement, under the reliability ceiling
Latency budget , from real turn gaps
Agent desklive 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.py refuses 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.

See every figure with its method  ·  Open the agent desk