Decide what happens next
A clear-looking answer still needs a policy. Use these experiments to explore the trade between automatic decisions, review effort, and mistakes.
Fictional expense claims and synthetic probabilities. Nothing on this page measures the model; it is about the policy around it.
Two numbers, two jobs
A Choice can favour “travel” while leaving a meaningful chance of “equipment.” The probabilities describe those alternatives. The API’s confidence field compresses the distribution into one measure of concentration.
Noul already has just two outcomes. Its one number is the probability of yes; subtract it from 1 to get the probability of no.
This invented response separates a category judgment from a policy check:
{
"category": {
"type": "choice",
"choice": "travel",
"probabilities": { "travel": 0.81, "meals": 0.03, "equipment": 0.01, "other": 0.15 },
"confidence": 0.61 // illustrative; the API derives this from the shape above
},
"within_policy": {
"type": "noul",
"noul": 0.88 // a Noul has no confidence field
}
}
A peaked distribution can still favour the wrong answer. Before using confidence as a routing signal, measure how often answers at similar confidence levels are correct on your own examples.
The next exercise uses invented distributions and does not assign API confidence values. It shows what the probabilities reveal on their own.
Reading a distribution
Choose an evidence shape. Compare the leading answer with its alternatives, then read the practical implication. Every example is invented for this guide.Give uncertainty somewhere to go
An expense tool has more than two possible next steps. It can propose a category immediately, ask the submitter to confirm it, or send the whole claim to a reviewer. These actions carry different costs.
Set thresholds for the action being taken. Suggesting “travel” is easy to undo. Releasing a payment needs separate checks of amount, policy, and authorization.
In a branched workflow, only inspect the answers relevant to that branch. An uncertain meal-type answer should not block a claim that is clearly about a train journey.
Routing simulator
A synthetic pool of 300 expense claims, generated in this page. Move the two thresholds and watch the bands, the error rate among automatic approvals, and the reviewer load change. Nothing here came from a model.Pick the threshold from costs, not from habit
A simplified cost model helps expose your assumptions. Let p be a validated probability of a correct decision, Cwrong the cost of an error, and Creview the cost of review.
Assume correct automatic decisions have no extra cost and review fixes every error. Then automation costs (1 − p) × Cwrong on average. Review costs Creview. The break-even rule is:
At $3 per review and $40 per mistake, the break-even is 0.925. Treat it as a planning number: if reviewers also err, or outcomes differ in cost, fold those in.
Threshold from costs
Type your two costs. The break-even threshold comes from the formula above; the curve shows the realised cost per claim on the synthetic pool from the previous lab under a two-way policy (act or review) at every threshold. Illustrative.
Measure before you trust a threshold
Calibration is a statistical property. It holds on average over a population of judgments, and only the population you test on. Before a threshold gates anything that matters, build a labelled set from your own traffic and check how accuracy moves with the number you plan to gate on.
- Label a few hundred real items. Real claims, real receipts, the messy ones included. Record the answer a careful person would give.
- Run the exact questions you will ship. Same instructions, same criteria, same state shape. Changing a criterion changes the distributions, and with them every threshold.
- Bucket by confidence, then by the winner's probability. Compare accuracy in each bucket. Keep whichever signal separates right from wrong more cleanly for your questions.
- Read the thresholds off the table. The act threshold is the lowest bucket whose accuracy clears the cost-derived p*. Set the review boundary from the errors you can accept and the capacity of your review queue; a coin flip is not a meaningful baseline for every task.
- Pin the model and re-run on change. The docs recommend pinning a versioned model ID once you have tuned thresholds, and moving to a new version on your own schedule. Re-run the table whenever criteria, state shape, or model change.
An eval sheet for the claims example might look like this (illustrative numbers):
| Confidence bucket | Claims | Accuracy | Policy at Creview = $3, Cwrong = $40 |
|---|---|---|---|
| 0.90 to 1.00 | 212 | 97% | act clears p* = 0.925 |
| 0.75 to 0.90 | 131 | 89% | confirm below p*, review required |
| 0.50 to 0.75 | 88 | 71% | confirm |
| below 0.50 | 69 | 48% | escalate review required |
Part 7 shows how to build this table from a labelled set in a few lines of code (evaluation before shipping). Part 3 covers what the distributions themselves mean for each primitive (distribution explorer), and Part 6 turns bands into a full cascade to a slower model or a person (cascades).