Skip to content

readme: report the per-genus average and stop calling the split stratified - #10

Merged
musharna merged 1 commit into
mainfrom
readme-per-genus-headline
Aug 8, 2026
Merged

musharna merged 1 commit into
mainfrom
readme-per-genus-headline

Conversation

@musharna

@musharna musharna commented Aug 8, 2026

Copy link
Copy Markdown
Owner

The site page was corrected on 2026-08-08; this README still carried both of the claims that correction removed. A retraction has to reach every place the claim was stated.

1. The holdout is not stratified

README.md said "a stratified 4,000-image holdout". From eval/eval_bioclip_vs_orchid_clip.py:

  • split_bucket() is md5(source_id) → a uniform bucket
  • val is everything under --val-fraction (default 0.02), capped at --max-val (default 4000)
  • --cap-per-species — the balancing flag — defaults to 0, and its own help text reads "If >0, tail-balance the val set"

Calling it stratified claims precisely the design choice that would have evened out the composition. Now described as a hash-partitioned random 2% split that inherits the domain's imbalance.

2. The headline used the average that hides the tail

"top1" in the harness is correct1 / n — per image. Ophrys is 2,754 of 4,000 images (69%) and is the genus that gains least (+2.8 pp), so it dominates that mean. The README led with it (+3.8 pp) while making a long-tail argument.

Averaged over the 14 genera the harness reports (MIN_PER_GENUS = 20; 3,937 of 4,000 images):

model per image per genus
BioCLIP 2 0.873 0.768
orchid-clip-v8 0.911 0.844

+3.8 pp per image → +7.6 pp per genus. The honest number is the better number, and it's the one that actually supports the claim.

3. Three genera regress, which went unmentioned

Cymbidium −6.0, Laelia −4.2, Encyclia −1.0 pp — all well-sampled genera BioCLIP 2 already did well on. "Gains landing exactly where they should" was doing some work there. Now stated.

Provenance

Per-genus values taken from the data behind assets/plotly/orchidclip_per_genus.html (14 genera, n ≥ 24). The macro mean over them is 0.7677 / 0.8436; the n-weighted mean over the same 14 reproduces the published 0.873 / 0.911, which is the consistency check that the two columns come from one run.

No numbers were changed — one was added, and the one already there is now labelled with what it averages over.

🤖 Generated with Claude Code

…ified

Two claims in the README did not survive a check against eval/eval_bioclip_vs_orchid_clip.py.

The holdout was described as "stratified". It is not: split_bucket() is an
md5 of source_id giving a uniform bucket, val is everything under
--val-fraction (0.02) capped at --max-val (4000), and the balancing flag
--cap-per-species defaults to 0. Calling it stratified claims the one design
choice that would have evened out the composition.

The headline led with the per-image top-1 (+3.8 pp) while making a long-tail
claim. "top1" in the harness is correct1 / n, so Ophrys -- 2,754 of 4,000
images, and the genus that gains least at +2.8 pp -- dominates it. Averaged
over the 14 genera the harness reports (n >= 20, 3,937 of 4,000 images) the
lift is +7.6 pp: 0.768 -> 0.844. The honest number is the better number, and
it is the one that actually supports the claim being made.

Also states what the previous text omitted: three of the fourteen genera
regress (Cymbidium -6.0, Laelia -4.2, Encyclia -1.0 pp).

Numbers derived from the per-genus values behind assets/plotly/orchidclip_per_genus.html;
the weighted mean over those 14 genera reproduces the published 0.873/0.911.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013ydeaSFAE8vThCNTYKTi41
@musharna
musharna merged commit 1aeb246 into main Aug 8, 2026
1 check passed
@musharna
musharna deleted the readme-per-genus-headline branch August 8, 2026 20:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant