What is a confidence threshold?

A confidence threshold is the score an automated decision must clear before it is acted on, sending anything below it to a person instead.

A confidence threshold turns a number into a policy. A model returns a score between 0 and 1. The threshold is the line your code compares it against, and the comparison decides what happens next: act on it, ask a person to confirm, or hand the item over untouched.

The number belongs to the model. The line belongs to you.

Three bands, not one line

One threshold gives two outcomes, which is usually too blunt. Two thresholds give three bands, and the middle one carries most of the value:

BandWhat the code doesWho sees it at the timeCost of being wrong
ActPerforms the actionNobody, until someone reviewsA wrong action, already taken
ConfirmPrepares it, waits for a yesThe person askedA minute of somebody's attention
EscalateStops, routes the itemWhoever owns the queueA delay, and a queue to clear

The bands are not equal in weight. Moving an item from confirm to act saves seconds. Moving one from escalate to act can cost you a customer. Size them by consequence, not by volume.

Where a published ladder fits

A vendor that returns a confidence number often publishes suggested bands beside it. TypeSafe's documentation for its System One model describes three in words rather than numbers: high confidence means a clear read you can proceed on without human involvement, medium means proceed with caution, and low means do not act, but route to a human or fall back to another system. Its worked example uses 0.9 and 0.5 as the lines, and the branch above 0.9 still confirms with the user before executing, because that example's action is a high stakes one.

The vendor states both caveats itself: the right values depend on your domain and on how the model performs there, and different actions inside one system should be gated at different levels according to the consequences of getting each wrong. A published ladder is a worked example to evaluate, not a setting to copy.

How to set one, as a procedure

A threshold is derived, not chosen, and deriving it takes an afternoon:

  1. Take a real sample. One to three hundred items you actually received, awkward ones included. Invented examples are always easier than real ones.
  2. Label it by hand first. Decide the right answer before you see any score. Labelling afterwards quietly turns into agreeing.
  3. Run the sample and keep each score beside its item and your label.
  4. Sort by score, highest first.
  5. Find the disagreement line, the point walking down that list where the model's answer starts differing from your label.
  6. Set the act floor above it, with room to spare, and the escalate floor where disagreement stops being occasional.
  7. Keep the sample and re-run it after a model or prompt change. A threshold is only valid for the setup it was measured on.

If disagreement is spread evenly through the sorted list instead of clustering at the bottom, the score is not separating easy items from hard ones and no threshold will fix that. The property being tested there has a name, calibrated confidence.

Both directions cost something

Floor setWhat you buyWhat it costsHow you find out
Too lowVolume handled automaticallyWrong actions taken unattendedA complaint, or a receipt someone reads
Too highAlmost no wrong actionsA queue nobody clearsSlowly, or never

Only one of those failures is visible. A wrong send arrives in somebody's inbox and gets reported. A queue growing faster than it is cleared just sits there, and the usual ending is people approving in batches without reading, which is having no threshold, with paperwork on top.

A probability is not a severity score

This is the commonest mistake, and easy to make because the numbers look alike.

For a yes-or-no question the returned probability is the answer, not a measure of how much. A 0.55 on "is this request fraudulent" means yes and no are close to equally likely, not "mildly fraudulent". Thresholded as an intensity it gives you a system that treats its most uncertain items as its moderate ones. TypeSafe's wire makes the distinction structural: choice and score answers carry a confidence derived from the shape of the answer's probability distribution, and yes-or-no answers carry no confidence field at all.

When you want intensity, ask for intensity, which the vendor's own advice puts as using a score question measuring along defined levels. One reason structured output is worth having is that it forces you to say which of the two you are asking for.

Escalation has to land somewhere a person looks

A threshold routing low scores into a queue nobody owns is decoration. The path needs four things before the line means anything: a named owner rather than a team alias, a place they already work such as an inbox or a helpdesk view, a time limit, and a stated default for when that limit passes, because "it sat there" is also a decision, just not one anybody made.

When a threshold is the wrong tool

A floor is a way of spending a number you already trust. Five situations where there is no such number, and adding a line to your code only hides that:

What this looks like on WorkerKit today

WorkerKit runs two shapes of worker, and only one has a number to threshold on.

A decision worker judges each item with typed questions and routes on the answer in code, with no agent loop in between. A confidence floor is required, and below it the worker does not act: the item escalates to a person.

An agent worker returns work rather than a calibrated number, so its three bands are built out of controls instead of a score.

BandHow it is built on an agent workerWhere it surfaces
ActInstruction says do it, app held at WriteA run receipt
ConfirmInstruction says draft and stop, app held at ReadA draft waiting in your own account
EscalateInstruction says ask, contact rules cap who it may reachA message to you, item untouched

The load-bearing row is the middle one. Holding an app at Read in the app firewall makes the worst case a wrong draft instead of a wrong send, and unlike a line in an instruction it is enforced outside the model, which is the subject of an instruction is not a control. A decision worker's reads and actions go through that same door, one tool call on its own key.

Support Inbox Triager is the shape in practice: it reads, sorts and drafts on its schedule, and a person sends. Receipts make each run reviewable, which is how you learn whether your floor sits near right, and the order to roll that out in is in rolling out an AI worker safely.

FAQ

What is a good confidence threshold to start with?

There is no portable number. A threshold is a property of your items and your model together, so it has to be measured: label a sample of your own real items by hand, score them, sort by score, and find where the model starts disagreeing with you. Set the floor above that point. A vendor's published ladder is an example to evaluate against that sample, not a setting to copy.

Can I use one confidence threshold for everything a system does?

You should not. Different actions carry different consequences and deserve different floors: reading a record can be gated far lower than sending a message or moving money. One global threshold is either too loose for the risky actions or too tight for the cheap ones, usually both at once.

Does a high confidence score mean the answer is correct?

No. A confidence score is derived from the shape of the model's own probability distribution, so it says the answer is concentrated rather than spread. That is agreement with itself, not with the world. A confident model can be confidently wrong, which is why the escalation path still matters.

What does a 0.5 mean on a yes-or-no question?

It means yes and no are close to equally likely, not that the thing is half true. A yes-or-no probability is not a severity score, and reading it as an intensity is the commonest error with these systems. If you want to know how much rather than whether, ask a question that measures along defined levels instead.

How does a confidence threshold work on a WorkerKit worker?

A decision worker declares a required confidence floor and does not act below it: the item escalates to a person. An agent worker returns work rather than a score, so its equivalents are structural: the instruction telling it when to stop and ask, the app firewall holding an app at Read so the worst case is a wrong draft, contact rules limiting who it can reach, and a receipt per run.