Every refusal your system emits is a labeled candidate waiting for a verdict. The model made a claim ("I cannot answer this from the provided sources"), and a human can check that claim in seconds because the evidence bundle is attached to the trace. That is a far cheaper annotation task than asking someone to grade a full answer for correctness.
The economics of this matter. Refusals are usually a minority of traffic, so you can afford to label every one you capture for a while, or a generous sample of them. Contrast that with the answer side, where the volume is large and the labeling task is harder. Arize's refusal evaluator makes the point explicitly: it detects whether a refusal happened, "not whether the refusal was appropriate," and recommends pairing it with a correctness evaluator to get the full picture (Arize Phoenix). Your human labels are the ground truth that turns that detection into a quality measure.
The other reason to work from real refusals is distribution. Synthetic "unanswerable" sets drift away from what your users actually ask. RefusalBench was built precisely because static benchmarks let models exploit dataset-specific artifacts and memorize test instances (RefusalBench, EACL). Your own refusal log has no such contamination.
There is a subtlety worth internalizing before you design the sampling frame. What a model says about its own certainty is a stated preference; what it actually does on the next paraphrase is revealed. The gap between the two is well documented in consumer research, where stated-preference methods predict behavior far less accurately than behavioral ones (Koji docs). The same discipline applies here: treat the model's confidence as a hint for stratification, not as evidence that the refusal was right or wrong.



