Rightshold™ Sign up

Answers · AI evidence

How do I report false-positive rates with confidence intervals on a frozen holdout?

Last updated

TL;DR: Publish per-category false-positive (and false-negative) rates with confidence intervals on a holdout set that was frozen and labeled before you scored it — not on a slice you reshuffled after seeing results. Blind scorers to labels (and preferably to which system produced each output). Prefer Wilson score intervals or bootstrap intervals for binomial rates; NIST's Dataplot guidance defaults to Wilson for proportion confidence limits and notes better coverage than the plain normal (Wald) interval, especially for small n or rates near 0 or 1. Pin the harness version and a hash of the target set (and label file) in the report so a reviewer can tell whether the numbers still match the bytes. Never retrain, retune thresholds, or pick prompts on the holdout. Seal the eval package with record_ai_run; use verify_recorder when you disclose a hash-chained log that should end at a committed head.

What should I check, step by step?

1. Freeze the holdout: write-protect or content-address the item ids, inputs, and gold labels before any scoring run. Record holdout_set_sha256 and labels_sha256.

  1. Freeze the harness: pin eval code commit, scorer version, model snapshot (or classifier build), decoding/threshold settings, and random seeds. Record harness_version (git SHA or release tag).
  2. Blind scorers: humans or LLM judges must not see gold labels (and ideally not the system under test's identity) while assigning predictions or error tags.
  3. Score once on the frozen set. Count TP/FP/FN/TN per category (or per task type). Do not drop hard items after seeing scores.
  4. For each category rate (e.g. FP / (FP+TN) or FP / scored_negatives — state the denominator), report the point estimate and a 95% Wilson or bootstrap CI. Avoid bare Wald intervals when n is small or the rate is near 0/1.
  5. Publish n, FP, FN, the CI method, and the pinned harness_version + holdout_set_sha256 beside the rates. If you bootstrap, publish the seed and number of resamples.
  6. Never retrain, calibrate thresholds, or select prompts on the holdout. If you must iterate, carve a separate tuning split and keep the holdout sealed.
  7. Hash the final metrics table and eval log; call record_ai_run with those hashes and params. Optionally commit a recorder head and later verify_recorder on a disclosed chain.

Freeze and blind before you score

NIST's AI Technology Evaluation (AITE) program scores models on sequestered, blind data specifically to mitigate train/test contamination. Your internal holdout should follow the same idea: inaccessible for training and tuning until the report is locked.

Rates with intervals, not bare percentages

A false-positive rate without n and a CI looks precise and is not. NIST Dataplot's proportion confidence-limits documentation describes Wilson, adjusted Wald, Jeffreys, and exact binomial methods, defaults to Wilson, and cites Agresti–Coull and Brown–Cai–DasGupta on coverage — including recommending Wilson or Jeffreys for n ≤ 40.

What can go wrong?

Holdout items were used to pick the decision threshold last week; today's FP% is an in-sample fit dressed as a test.

How do I ask Rightshold about this (free, no key)?

Add the MCP server https://www.rightshold.com/mcp to Claude, Cursor, ChatGPT, Grok or VS Code, then ask: “Record a signed receipt for this frozen-holdout eval: harness version, holdout-set hash, per-category FP/FN counts, and the CI method — without uploading the raw items.”

One-click setup

{
  "tool": "record_ai_run",
  "arguments": {
    "model": "detector/policy@harness-sha",
    "provider": "eval-harness",
    "prompt_sha256": "<sha256 of holdout ids + labels file>",
    "output_sha256": "<sha256 of metrics table + eval log>",
    "params": {
      "harness_version": "<git sha>",
      "holdout_set_sha256": "<sha256>",
      "labels_sha256": "<sha256>",
      "categories": [
        {
          "name": "pii_leak",
          "n": 200,
          "fp": 3,
          "fn": 5,
          "fp_rate": 0.015,
          "fp_ci_wilson_95": [
            0.0051,
            0.0433
          ]
        }
      ],
      "ci_method": "wilson",
      "confidence": 0.95
    },
    "ran_at": "2026-11-06T22:00:00-05:00"
  }
}

Rightshold records signed AI-run receipts and can verify disclosed recorder chains for agents that call it. It does not run your eval, compute Wilson or bootstrap intervals, blind your scorers, or stop a team that retrains on the holdout. Enforce freeze/blind/CI reporting in your harness and review process. Not legal advice.

What are the sources?

Related

Not legal advice. JSON · Markdown · All answers

Get a free API key in one call

No card and no email needed. 100 free credits; the license and policy checks stay free without a key.

curl -s -X POST https://www.rightshold.com/v1/accounts/signup -H "Content-Type: application/json" -d '{"accept_terms":true}'
export RIGHTSHOLD_API_KEY=rs_...   # the api_key from the reply (shown once)
curl -s https://www.rightshold.com/v1/licenses/check -H "Authorization: Bearer $RIGHTSHOLD_API_KEY" \
  -H "Content-Type: application/json" -d '{"license":"MIT","intended_use":{"commercial_use":true}}'