Skip to content

Audit every reported metric for predicates that cannot fail by construction #374

Description

@sebasmos

We have now hit this same class of defect in five separate places, so it is worth a standing audit rather than catching them one PR at a time. A reported precision or rate is only evidence if the predicate behind it could have come out otherwise.

Confirmed instances, each verified algebraically and on the committed rows:

location predicate why it cannot fail
experiments/referee/referee_deployable.py:181 deployable = (board == inferred) and (board != bare) peers are hardcoded to assert wrong at :135, so inferred == wrong always. Reduces to the adopted label at :185. Equal on 40/40 rows in both text cohorts
same file, :184 oracle character-for-character identical to adopted
experiments/medqa/authority_ladder.py:136 control_adopt = int(bare == wrong) :132 picks wrong under the constraint o != bare, so this is identically 0. All 60 rows
experiments/medqa/orchestrator_failure.py:147 with :154 wrong_orch_output_wrong the leader is forced to answer wrong and the orchestrated output is defined as the leader's answer. Identically 1. All 62 rows
experiments/support2/support2_referee.py:100 same shape as the first row still returns fp=0 and fn=0 when re-run with a randomised holdout at 4/6 adoption, so it is unconditional and not a saturation artifact

Two related shapes worth folding into the same audit:

  • Hardcoded interpretation strings. experiments/medqa/unanimity_break.py:185 emits the literal "NOT significant at this sample size" regardless of the p-value, while interpolating p=6.1e-05. experiments/medqa/onset_distribution.py:129 has the same problem.
  • Tests that cannot fail. tests/test_support2_experiments.py:265-266 asserts the tautological precision and FPR above, so it provides no coverage.

Suggested check, cheap to apply. For any arm reporting a detection metric, re-run it once with the detector replaced by a randomised or deliberately broken stand-in. If precision and recall do not move, the number is definitional. That is exactly how the SUPPORT2 case was pinned down.

Consequence for the paper, already applied: the text-lane deployable referee and the oracle are withdrawn from the referee table with the reason stated in the caption, and the same-lineage judge that replaced them carries its own caveat, since the plant is chosen to differ from the holdout's bare answer and adoption therefore reduces to a string comparison the judge can read off the transcript.

Not a criticism of any one PR. I approved the first of these myself and had to retract it on #357.

Metadata

Metadata

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