Skip to content

At 0 (or 100%) accuracy the reported stderr is exactly 0.0 at any N, so null results claim infinite precision; a boundary-aware interval or flag would fix it #4070

Description

@fabio-rovai

Summary

mean_stderr returns 0.0 for an all-zero score vector at any sample size, and
bootstrap_stderr agrees, because every resample of zeros is zeros. End to end, a model
that scores 0 on a task is reported as 0.0 +- 0.0000: a 25-question run and a
5000-question run claim identical, infinite certainty that the capability is absent. The
same holds symmetrically at perfect scores. This is expected behavior of CLT/Wald
standard errors at the boundary, but the harness's numbers are quoted directly in model
cards and leaderboards, where +- 0.0000 reads as precision rather than as a degenerate
estimator.

Relation to open issues

#3966 documents stderr = 0.0 for scores strictly between 0 and 1 and correctly concludes
those records are internally inconsistent; its analysis notes in passing that stderr can
only legitimately be 0 "when the score is exactly 0 or exactly 1". This report is about
that remaining, legitimate case: the value is internally consistent and still the wrong
thing to publish, because at the boundary the estimator degenerates exactly where the
claim (capability absent, or saturated) is strongest. #4017 and #4019 propose Wilson CIs
at the output layer; the boundary case here is arguably the sharpest argument for them,
since it is where the missing interval is not merely narrow but absent entirely.

Reproduction

lm-eval 0.4.12 (release) and 0.4.13.dev0 (current main), Python 3.13.14, macOS. Unit
level, identical on both versions:

input mean_stderr
0/10 0.0
0/25 0.0
0/100 0.0
0/1000 0.0
0/5000 0.0
517/1000 control 0.0158 (correct)
bootstrap_stderr, 0/1000, 1000 iters 0.0

End to end:

res = lm_eval.simple_evaluate(model="dummy", tasks=["gsm8k"], limit=25, random_seed=0)
# results.gsm8k: exact_match 0.0, exact_match_stderr 0.0 (both filters)

Why this matters

  1. The null result is the case that matters for capability rule-outs, and it is the one
    case where the reported uncertainty is maximally wrong: the true 95% upper bound at
    0/25 is about 13.7% (Clopper-Pearson) or 9.5% (Jeffreys), not 0.
  2. Sample size becomes invisible exactly at the boundary. Downstream readers cannot
    distinguish a cheap null from an exhaustive one, though the two support very
    different claims.
  3. Aggregations inherit the zero: pooled and combined stderrs over subtasks treat a
    boundary subtask as contributing zero variance, tightening group intervals.

Possible directions

Happy to PR either variant with tests if there is appetite.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions