Lender Outcomes, not reviewer verdicts, are the calibration ground truth
Status: accepted Date: 2026-09-01Decision
- The Underwriting orchestrator is calibrated against Outcomes — what lenders actually did on Settled files, read from Funding plan rows — not against human Review verdicts.
- The unit of measurement is the Outcome record (one per Settled processing engagement) and the headline is the three-layer Accuracy scorecard: Decision accuracy, Amount accuracy, Lender calibration. Every calibration proposal must cite its effect on the scorecard over the Outcome corpus.
- The Underwriting Review Console’s verdict-first flow (pick recent pulls →
record a verdict → tweak knobs against the verdicts) is retired. The
underwritingReviewLabelsandunderwritingReviewFlagstables are kept and verdicts remain available as optional annotations on an Outcome record. - Two Predictions are scored per record: the historical Prediction the Operator saw (pinned to its Ruleset version) and a current-ruleset re-run of the stored report with default thresholds. The raw engine decision is scored; Operator product overrides and Location custom thresholds are features, never the thing being scored.
- Scope is card stacking and term loan. Revenue Based products join when their estimates exist (ADR-0008).
Context
The 2026-05 review console assumed reviewers could judge a Decision’s accuracy by inspection. In practice the console went unused: a verdict is one person’s opinion, it does not scale past a handful of files a week, and it cannot tell the team whether the estimated range was right by 20,000. Meanwhile the ground truth already existed — every processed file has Funding plan rows with lender approvals, declines, and approved amounts — but was only consulted as an ungated per-contact sum (sumFundedPlans).
The orchestrator emits no per-lender prediction. The approvalProbability and
related fields on old fundingPlans rows are artefacts of a retired AI plan
generator (LEGACY_GENERATED_PLAN_FIELDS), so a “lender hit rate” against an
engine probability is not measurable. The third scorecard layer therefore
calibrates the card catalog’s stated minimumScoreRequired and
averageLimitProvided against actual approvals instead.
Term-loan Outcomes come from TL Funding plan rows only. Engine by MoneyLion
marketplace data (offers, derivedStatus, per-lender events) shows
pre-qualification and application events but never an accepted offer, so it is
at most a feature.
Considered options
- Keep verdicts as ground truth and add the funded comparison as context — rejected. Keeps the unscalable human step in the loop and leaves the dollar error unmeasured.
- Score the effective decision (override ?? engine) — rejected. Overrides hide engine error; we want to see where Operators had to correct the engine.
- Score only the historical Prediction — rejected. Ruleset bumps would make files incomparable; the current-ruleset re-run lets one build answer “would today’s engine have been right on every file we have ever processed”.
- Outcome as ground truth with verdicts demoted to annotations (accepted).
Consequences
- The review console page is rebuilt around the Outcome corpus (Scorecard → Segment diagnostics → Knob lab, with the process replay kept as the single-record drill-down). The pure libraries beneath it — knob registry, what-if override seam (ADR-0001), persona guardrail, input assembly, calibration proposal → generated prompt — are reused unchanged.
- The Knob lab never edits engine constants or thresholds. A chosen change still
ships as a code edit with a
RULESET_CODE_VERSIONbump and golden-snapshot review, exactly as ADR-0001 requires. - Records whose same-ruleset re-run does not reproduce the historical headline
carry a reconciliation flag and are excluded from re-run-based layers. Closing
that gap forward requires persisting
incomeType,monthlyBankDeposits, andbusinessDepositsonunderwritingResults(additive optional fields). - Glossary: CONTEXT.md → “Outcome analysis” section, and the revised “Underwriting review” / “Review verdict” entries. Companion decision on which files count: ADR-0013.

