Rightshold™ Sign up

Answers · AI evidence

How do I decide whether an eval score change is negligible using a pre-set equivalence margin (TOST)?

Last updated

TL;DR: You may call a score change negligible only if the confidence interval for the difference sits entirely inside an equivalence margin you chose before seeing the new scores. That is the two one-sided tests (TOST) procedure: reject both "the difference is as large as -δ or worse" and "the difference is as large as +δ or worse." A non-significant difference test does not mean the systems are equivalent — an underpowered comparison looks the same for the wrong reason. FDA's May 2026 bioequivalence guidance recommends TOST (Schuirmann 1987) and a predetermined limit: at α = 0.05, check that the 90% (that is, 1−2α) confidence interval for the difference or ratio lies entirely inside the margin. Record the pre-registered margin, α, pairing, and hashes of the eval set and judge with the run. record_ai_run seals those fields (params become params_sha256); verify_ai_run checks the receipt.

What should I check, step by step?

1. Before you score the new system — or at least before you look at the new scores — write down the metric, whether items are paired, the smallest important difference δ, α, and the interval method.

  1. Choose δ as the smallest change that would actually alter the decision (a ship gate, a cost/quality tradeoff, a risk budget). Do not pick δ after seeing the interval so that the result just fits.
  2. Prefer a paired comparison when both systems score the same frozen items: take the per-item difference, then a confidence interval for the mean difference. Use an unpaired interval only when the item sets differ, and say so.
  3. Compute one confidence interval for the difference (new minus old). Do not decide equivalence by whether two separate score intervals overlap.
  4. For TOST at level α, check that the (1−2α) interval for the difference lies entirely inside (−δ, δ). Equivalently, reject both one-sided nulls H0: Δ ≤ −δ and H0: Δ ≥ +δ at level α. At α = 0.05 that is the 90% interval inside the margin.
  5. Report the interval, δ, α, n, pairing and the method. Distinguish four outcomes: equivalent; different from zero but not equivalent; a real but practically negligible difference (the interval excludes zero and still sits inside ±δ); and undecided (the interval is too wide to fit inside the margin).
  6. Do not claim equivalence from p > 0.05 on a difference test, or from an estimated-power check after a non-significant result (the older "power approach" Schuirmann compared TOST against).
  7. Hash the plan (δ, α, pairing, metric, inclusion rules) together with the eval-set hash and judge id. Put those values in params when you record the run, and the results-file hash as output_sha256.

Why isn't a non-significant eval score change the same as a negligible one?

A usual significance test asks whether you can reject a difference of exactly zero. Failing to reject that null means the data are not surprising under "no difference." It does not mean the difference is small. Lakens (2017) notes that researchers often conclude an effect is absent from a non-significant result, and that when p > α the only formally correct conclusion is that the data are not surprising assuming the null; the test may simply have lacked power.

How do I pick an equivalence margin and test the difference between two eval scores?

δ is the smallest effect size of interest (SESOI; Lakens). For an eval, that is the smallest accuracy, F1 or win-rate change that would change your decision. Set it from product cost, risk or a historical meaningful gap — not from this run's interval.

How do I record a pre-registered equivalence margin with an eval run?

A later reader should be able to see that δ and α were fixed before the new scores, and which set and judge produced them. Hash a canonical plan file: metric, pairing, δ, α, interval method, inclusion rules, eval-set hash and judge id.

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 paired eval comparison: the pre-registered equivalence margin and alpha, hashes of the analysis plan, frozen eval set and judge, and the results-file hash.”

One-click setup

{
  "tool": "record_ai_run",
  "arguments": {
    "model": "<model or system under test, dated snapshot>",
    "provider": "<provider or eval-harness>",
    "prompt_sha256": "<sha256 of the frozen eval set file>",
    "output_sha256": "<sha256 of the per-item scores and results table>",
    "params": {
      "run": "equivalence-comparison",
      "plan_sha256": "<sha256 of the pre-registered analysis plan>",
      "baseline_model": "<baseline snapshot>",
      "judge_id": "<sha256 of rubric + judge prompt + scale + settings>",
      "eval_set_sha256": "<sha256>",
      "pairing": "paired",
      "metric": "item_accuracy_mean_diff",
      "delta": 0.015,
      "alpha": 0.05,
      "ci_method": "tost_90_percent_ci_for_mean_difference",
      "mean_diff": 0.004,
      "ci_90": [
        -0.006,
        0.014
      ],
      "n_items": 400,
      "equivalent": true
    },
    "ran_at": "2026-11-08T07:00:00Z"
  }
}

Rightshold does not run your eval, compute a TOST interval or decide whether a score change is negligible. It signs and timestamps the hashes and fields you send so a later reader can see which margin, alpha, set and judge a comparison used. A receipt does not prove the systems are equivalent. Not legal or statistical-consulting 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}}'