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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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