TL;DR. Pulled twice from the Kaggle API today (05:20 and 13:59 UTC): 2,703 teams, rank 1 = 0.481, median 0.328, and a third of all teams (885) sit on one of sixteen exact scores produced by re-running public notebooks — the biggest pile-up is 149 teams at exactly 0.425 (ranks 79–227), which is also the derived silver-medal line. The public LB is scored on roughly a third of the hidden set (~130 molecules, second-hand), so one molecule moves it by up to 0.0076 and a byte-identical rerun of one notebook moved 0.335→0.328; nothing below ~0.01 is signal. Every open write-up that reports both numbers says the same thing: ranking inside a found list is good (within-hit MRR ≈ 0.75–0.95), and the missing half of the score is molecules whose truth never enters the 25.
1. Leaderboard anatomy (own API pull)
Source: kaggle competitions leaderboard enveda-CASMI26-molecule-id-mass-spectra --download (CLI 2.2.4), zip member …publicleaderboard-2026-10-07T13:59:36.csv, saved as lb_snapshot_2026-10-07.csv beside this file. Columns: Rank, TeamId, TeamName, LastSubmissionDate, Score, SubmissionCount, TeamMemberUserNames. A second pull from 05:20:19 UTC the same day (2,673 teams) is used for the intra-day diff.
| Statistic | Value (13:59 UTC) | Value (05:20 UTC) |
|---|---|---|
| Teams | 2,703 | 2,673 |
| Rank 1 / 2 / 3 | 0.481 (pikachu, 84 subs) / 0.466 (MarvinTMB, 12) / 0.452 (Oliver Ford, 60) | 0.480 / 0.466 / 0.450 |
| Rank 5 / 10 / 20 | 0.448 / 0.441 / 0.435 | 0.443 / 0.441 / — |
| Rank 50 / 100 / 250 | 0.429 / 0.425 / 0.421 | — |
| Rank 500 / 1000 / 1500 / 2000 | 0.413 / 0.357 / 0.319 / 0.166 | — |
| p50 / p75 / p90 / p95 / p99 | 0.328 / 0.406 / 0.421 / 0.425 / 0.432 | p50 0.328 |
| Mean | 0.2857 | — |
| n ≥ 0.45 / 0.44 / 0.43 / 0.42 | 3 / 12 / 49 / 317 | 3 / 12 / 35 / 266 |
| n ≥ 0.41 / 0.40 / 0.35 / 0.30 | 616 / 762 / 1,035 / 1,584 | — / 729 / — / — |
| n = 0.000 | 106 (3.9 %) | — |
| Solo teams / teams ≥ 2 / max size | 2,568 (95.0 %) / 135 / 5 | — |
The q7 digest figures (2,673 teams, max 0.480, 263 ≥ 0.42, 35 ≥ 0.43) are reproduced exactly by the 05:20 file; they were simply eight hours old. In 8.6 hours the board gained 30 net teams (31 new), 187 teams improved, the ≥ 0.43 club grew from 35 to 49 and the ≥ 0.42 club from 266 to 317; 580 teams had already submitted on 2026-10-07 by 14:00 UTC (383 on 10-06, 224 on 10-05) — the public-notebook wave is accelerating, not plateauing.
Medal cut-offs (Kaggle rule for competitions with > 1,000 teams: gold = top 10 + 0.2 % of teams, silver = top 5 %, bronze = top 10 %; I use floor on the percentages): gold = rank 15 → 0.436; silver = rank 135 → 0.425; bronze = rank 270 → 0.421. The silver line passes through the middle of the 149-team 0.425 cluster (ranks 79–227) and the bronze line sits on the 0.421 cluster (ranks 245–283); Kaggle breaks exact ties by earlier submission time, so which clone lands inside the medal zone is decided by the clock, not by the model.
Exact-score clusters (the "tutorial / public notebook" signature). 885 of 2,703 teams (32.7 %) score one of these sixteen values to three decimals:
| Score | n teams | Ranks | Median subs | Teams with ≤ 3 subs | Most likely source (evidence) |
|---|---|---|---|---|---|
| 0.425 | 149 | 79–227 | 20 | 18 | bobthebot369/enveda-casmi-2026-v18-sovereign-zenith — "our unchanged Bob replay scored 0.425 (submission 56876882)" (uninhibitedscholar kernel) |
| 0.421 | 39 | 245–283 | 16 | 2 | huseyinemreaksoy/casmi26-v4n-fusion-pubchem-on-public-0-421 (title) |
| 0.420 | 34 | 284–317 | 10 | 5 | same notebook, Version 1 ("Version 1 scored 0.420"); gnshx README |
| 0.417 | 74 | 344–417 | 11 | 17 | imranarif536/casmi26-v44-pairtail-locked-top1 (reproduced twice at 0.417 by leesirleesirlee-star) |
| 0.413 | 53 | 464–516 | 10 | 11 | gengsr/casmi26-fusion-glacier-mh-lb-0-413; lehau007 V26 "0413" |
| 0.411 | 77 | 522–598 | 14 | 14 | unidentified public notebook (unverified) |
| 0.409 | 35 | 617–651 | 13 | 8 | huseyinemreaksoy/casmi26-sub-v4b-0-409-on-the-public |
| 0.399 | 36 | 763–798 | 10 | 4 | seyitkaangunes/casmi26-v4n-engine-fusion-union-lb-0-399 |
| 0.341 | 48 | 1106–1153 | 8 | 12 | llccqq624/casmi26-next-direct-w088 (LB 0.341 per V44 lineage list) |
| 0.339 | 31 | 1161–1191 | 10 | 10 | haideptry/…fast-spectral-cosine-baseline V17 (0.339 per lineage list) |
| 0.328 | 106 | 1347–1452 | 4 | 49 | prvsiyan/analog-propagation-casmi-2026-baseline rerun ("re-run of the 0.335 row scored 0.328"); nghianguyen7171 re-implementation also 0.328 |
| 0.163 | 7 | 2004–2010 | 1 | 5 | haideptry V10–V11 library cosine + COCONUT fallback (0.163) |
| 0.151 | 19 | 2110–2128 | 3 | 11 | library-search-only probe (prvsiyan stage 1 = 0.151; kitopl flat-10-ppm = 0.151) |
| 0.146 | 14 | 2169–2182 | 1 | 13 | unidentified single-submission baseline (unverified) |
| 0.000 | 106 | 2598–2703 | 2 | 73 | failed/empty runs; the host inversion de-novo tutorial advertises no score and no public write-up reports its LB, so its landing band is unknown (inference: ≤ 0.05) |
Submissions vs score. Spearman(SubmissionCount, Score) = 0.54. Band medians: ≥ 0.44 → 57 submissions (n = 12); 0.43–0.44 → 36 (n = 37); 0.42–0.43 → 20 (n = 268); 0.40–0.42 → 14; 0.35–0.40 → 11; 0.30–0.35 → 7; < 0.20 → 3; zero scores → 2. 377 teams have exactly one submission, 842 have ≤ 3, 123 have ≥ 50; the busiest team (kglctf, 113 submissions) sits at 0.411, i.e. volume without a new idea buys a clone score. The top-12 average 55 submissions in 23 days (~2.4/day of the 5 allowed).
2. Top-voted public kernels (API, kernels list --sort-by voteCount, 200 rows saved as kernels_2026-10-07.csv)
| # | Kernel (owner/slug) | Votes | Last run | Public LB | One-line method |
|---|---|---|---|---|---|
| 1 | inversion/casmi-denovo-tutorial-notebook |
288 | 2026-09-14 | not advertised | Host-side tutorial: peak-token transformer → autoregressive SMILES; trains on ≤ 200k spectra (~22 min on T4, batch 128, MAX_LEN 128, vocab 512); excludes enveda-180 (ingest_lib != 'enveda-180'); validates with Morgan-r2 Tanimoto |
| 2 | haideptry/enveda-casmi-2026-fast-spectral-cosine-baseline (V17) |
234 | 09-17 | 0.163 (V10) → 0.193 → 0.205 → 0.300–0.339 (V17) | 4 channels: entropy library search over 2.54 M spectra (incl. enveda-180), ±200 Da analog propagation sim⁴·Tanimoto, MetFrag-lite, FPNet 6,930-bit f·z; pool COCONUT 2.0 (462k) ∪ train (275k); ±8.5 ppm (median 56 candidates; "+1.4 ppm systematic timsTOF offset"); Morgan r2/r3 4096 + MACCS |
| 3 | evgendvorkin/enveda-casmi-2026 ("Forensics Lab") |
160 | 10-04 | not stated (same text as V44 = 0.417 lineage) | Three-engine RRF + ICEBERG/GLACIER forward cascade + PubChem popularity prior; lists its ten public ancestors with their LBs (0.335/0.339/0.337/0.341/0.373/0.386/0.399) |
| 4 | prvsiyan/analog-propagation-casmi-2026-baseline |
124 | 09-21 | 0.335 best, 0.328 rerun; family mean 0.329 ± 0.004 | The root of the whole public tree: 711,705-structure pool, ±10 ppm, HGB ranker on 31 features; measured PubChem as catastrophic (class-2 sim 0.732 → 0.379 with top-25 PubChem isomers); DreaMS tried, "does not help this channel" |
| 5 | bobthebot369/enveda-casmi-2026-v18-sovereign-zenith |
92 | 10-05 | 0.425 on replay (title claims "target 0.440+") | v4n + prvsiyan two-ranker RRF (α 0.6, k 3), GLACIER-only rerank on [M+H]+, popularity prior (λ 0.25, union 200), library lock at lib_max ≥ 0.90, DreaMS "tail channel" to fill sparse lists |
| 6 | wangpenghua/casmi26-v29-fusion-pop-glmh |
90 | 10-02 | not pulled | fusion + popularity (title) |
| 7 | dmitriigluzdov/casmi-26-from-spectra-to-structures |
88 | 10-07 | 0.410 (V31/V33); table 0.326→0.341→0.366→0.373→0.386→0.401→0.406→0.410 | 710,701 pool ±10 ppm, 105.9 M PubChem channel in a subprocess, 160 features × 4 LightGBM, ICEBERG + GLACIER, documented-compound bonus; most careful ablation table on the site |
| 8 | beraterolelk/0-336-sota-enveda-casmi26-analog-ranker |
80 | 10-01 | 0.336 (title) | prvsiyan fork |
| 9 | imranarif536/casmi26-v44-pairtail-locked-top1 |
75 | 10-03 | 0.417 | "don't let a new ranker destroy a proven top-1; LambdaRank the tail"; 775k pool, PubChem tier limited to 5 tail slots |
| 10 | flexonafft/casmi26-public-baseline-adaptation-experiments |
68 | 10-06 | — | adaptation experiments |
| 12 | seyitkaangunes/casmi26-v4n-engine-fusion-union-lb-0-399 |
52 | 09-30 | 0.399 | v4n (0.384) + two-ranker engine via weighted RRF + ICEBERG/GLACIER on the union; 3.5–4.5 h on T4; budgets ICE 5400 s / GL 4000 s |
| 13 | huseyinemreaksoy/casmi26-v4n-fusion-pubchem-on-public-0-421 |
46 | 10-05 | 0.420 (v1) / 0.421 | 0.399 → 0.404 (popularity μ 0.15 + gap fragment rescoring) → 0.404 (ICE/GL off for library hits) → 0.409 (μ 0.25) → 0.420 (PubChem join, N 50, gate lib_max < 0.7) |
| 15 | denpugovkin/casmi-2026-protected-bio-db-tail |
42 | 10-02 | parent 0.347, new "unknown" | GLACIER isomer resolver inside formula slots; explicit kernel_sources: prvsiyan fork |
| 16 | llccqq624/casmi26-next-direct-w088 |
39 | 09-20 | 0.341 | two-ranker blend w = 0.88; post-mortem of "cap, dedup, FPNet leak" traps |
| 18 | josefreitasalvesneto/casmi-2026-a-complete-statistical-tour |
33 | 09-15 | EDA | first to publish that visible test = 100 % enveda-180 rows (exact peak-array match) |
| 20 | megayak/casmi26-two-rankers-one-engine |
30 | 09-17 | 0.337 | adduct-shifted library + two-ranker blend; "honest negative on DreaMS" |
Method-tool census over the 200 listed titles plus 14 pulled notebooks: DreaMS — used as a tail filler (bobthebot369 V18, uninhibitedscholar own153), as a demo port of the HF space with internet ON (hengck23/dreams-structure-from-spectrum-retrival-demo, 7 votes, MassSpecGym embeddings), and in three zero-vote titles (rajrajak99 "v115 DreaMS Foundation", haideptry "Mass DreaMS Champion", imranarif536 "V42 DreaMS ICE Cap10"); two independent negatives (prvsiyan, megayak; corentinlaudicina on GitHub: 0.811 vs 0.867 cosine). MIST: one title (franciscoangulo/enveda-casmi-v60-qtof-msbuddy-mist-dedup, 1 vote). FIORA: lehau007 "V32 FIORA Tri-Forward 0420" (1 vote). ICEBERG/GLACIER (MIT ms-pred): in every ≥ 0.37 kernel. MS2DeepScore, SIRIUS, PRISM: zero kernels in 200 titles or pulled code. Library search of enveda-180: every retrieval kernel indexes it (it is 45 % of train); only the host tutorial excludes it. Decoy exploitation: none scores against it; the ≥ 0.38 family detects it (MD5 of spectrum_id = 654e030e…, or SHA-256 of test.parquet = 2fa29c4a…, or env KAGGLE_IS_COMPETITION_RERUN) to run a 12-molecule smoke commit and the full 400 only on the scoring rerun — the decoy is exploited for wall-clock, not for score. Forks: Kaggle's kernel_sources field is empty on 19 of 20 pulled kernels, so lineage is only recoverable from markdown attribution (the V44/"Forensics Lab" text names ten ancestors); the AmanDubal repo is the only explicit fork of the inversion tutorial I found, and it fixes the tutorial's "same-token reconstruction objective" and "generation passes only the most recent token without a KV cache".
3. GitHub write-ups (raw READMEs fetched; Kaggle facts therein are mirrors)
| Repo | Public LB (best, dated) | Local CV | Recall@25 | Pool | Mass window | Fingerprint | Model | Local-vs-public gap |
|---|---|---|---|---|---|---|---|---|
| leesirleesirlee-star/Enveda_CASMI-2026… | 0.417 (V44 repro, refs 56839982 & 56854098, 2026-10-05); 0.418 pc_adaptive (56877838, 10-06); 0.416 claw |
ranking-only 0.765 (grouped CV, recall forced to 1) | 0.545 back-solved (0.417/0.765) | ~775k (train ∪ COCONUT ∪ ChEBI/LIPID MAPS) + PubChem tier ~100 M (7.2 GB, 5 tail slots) | ±10 ppm | FPNet A+B | 160 feat × 4 LightGBM LambdaRank, 600 rounds; ICE/GL fixed wall-clock budgets | "0.417 decomposes into recall × ranking"; ICE scored 18 % of molecules at budget 300 s |
| gnshx/Enveda-CASMI-2026… | 0.087→0.145→0.335→0.358→0.384→0.399→0.404→0.409→0.420 | none reported | — | ~710k + PubChem slice N₁ = 5,000 | ±10 ppm | Morgan 4096, MACCS, ECFP4 | HGB Ranker A (31) + B (51, 540k sim rows); LightGBM 160 | pure neural FPNet plateaued at 0.145 |
| nghianguyen7171/casmi26 | 0.328 (v1 and v7 identical) | class-2 seed noise ±0.01 | pool median 107 cands; 70.8 % share true formula | 712,199 (COCONUT ∪ train) | ±10 ppm, 30 ppm fallback | FPNet 6,930-bit | HGB 31 feat; +62,744 ChEBI/LIPID MAPS = +0.000 | "published numbers do not reproduce: byte-identical reruns 0.011 and 0.105 below advertised" |
| Isaackjoshua/casmi-2026 | 0.063→0.075→0.138 (09-18)→0.194→0.214→0.229→0.232→0.236→0.240→0.245 | hard set 0.4586–0.4998; timsTOF holdout 0.566–0.592 | COCONUT holds 39 % of hard-val truths; PubChem 94,043,986 holds 95 % of the rest; ±1 mDa PubChem window median 4,652 cands (p90 14,727) | 729,387 curated; PubChem tiered | 1 mDa adaptive ×10 to 1 Da | Morgan r2 2048 → +r3 +MACCS (3,239 bits, +0.005) | 61.8 M-param MLP + 4.6 M peak transformer | ~0.49 local vs 0.19–0.245 LB; paired per-molecule test resolves 0.003–0.005 |
| corentinlaudicina/enveda-casmi-2026 | 0.098 (cosine) → 0.112 (MLP + ranking loss, train+COCONUT); 0.079 with PubChem | 0.46 on held-out train pool; NP 0.138 vs 0.107 random | — | 275,810 train + 480k COCONUT; PubChem 90 M | 10 ppm | Morgan r2 2048 | MLP on 10,000 × 0.1 Da bins; DreaMS input variant | 0.46 → 0.112; "9 in 10 hidden molecules have no train spectrum" |
| yasumorishima/kaggle-competitions (enveda-casmi26/CLAUDE.md) | 0.275 (09-26)→0.283→0.294 (09-29)→0.297→0.299 (10-03)→0.303 (10-05, own COCONUT 474,231) | class-4 NP CV 0.526; FP-alone NP 0.494 / random-enveda 0.875; LGB 5-fold 0.647–0.660 | — | train + COCONUT (~710k, median 107–116); Enamine tier 4.73 M tested | ±10 ppm (±5 ppm identical: 0.302 vs 0.303) | Morgan r3 counts | analog + FP MLP, weak tie-break | LGB CV 0.65 → LB 0.279 (worse than no LGB); popularity prior monotone loss (μ 0.01→0.293 … 0.2→0.228); Enamine tier −0.013 |
| billylu24/Enveda-CASMI-2026… | 0.140 (09-24, rank 1128/1452) → 0.176 hybrid (rank 950/1453) → 0.162 → 0.169 → 0.171 (PubChemLite) | known-spectrum 0.90–0.92; unknown 0.008–0.022 | unknown-candidate recall 8.25 % → 12.0 % with PubChemLite 469,579 | train + COCONUT Sep-2026 + PubChemLite | 35 ppm | Morgan | 10.7 M residual MLP; logistic H/F routing | known 0.92 vs unknown 0.02 locally; LB 0.17 |
| mxm-1x/Enveda-CASMI-2026 | none stated | retrieval 0.9261 (250 NP); closed-world exact-mass 0.1438 → frag 0.3129 → HGB 0.5096; COCONUT pilot 0.2876 → 0.4051 → 0.5631 | hit@25 0.585 / 0.755 / 0.879; pilot 0.761 / 0.826 / 0.913; COCONUT-only 250-NP 0.724 | 273,681 train structures; 8,851 COCONUT window cands | — | — | HGB reranker on CPU (M3, 8 GB) | cites discussion 741404 as "host clarification" |
| chiparon/enveda-casmi26 | none | cross-library cosine 0.934 (top-1 89.6 %, top-25 99.2 %) | 0.992 | train only | 20 ppm, 0.02 Da peaks | — | greedy 1:1 cosine, 128 peaks | explicitly "not hidden-test generalisation" |
| shiferaxa/casmi26 | runs the public pipeline | the only split that predicted LB order = 250 enveda-np-examples under three masks; random held-out train structures predicted the opposite ranker order | — | ~712k | 8.5 ppm | own FP model | public prvsiyan/haideptry pipeline | — |
| AmanDubal/… | not scored | — | — | all 11 sources, 277,566 SMILES | 15 ppm, 0.003 Da floor | — | fragment + neutral-loss cosine; fixed inversion de-novo fork |
audited: all 1,213 visible test spectra match enveda-180 |
| kabir0774/Enveda-Casmi-2026 | none (synthetic only) | retrieval quality dominates: fp_acc 0.52→0.80 takes 0.30→0.73; one-sided gate 0.08 vs 0.30 | — | — | — | Morgan | PeakFormer | — |
| AayanShabbir/casmi26 | ~0.335 ladder | F-ANALOG 0.212, F-RANKER 0.267 | — | ~711k | ±200 Da analog | — | 20-feature GBM | — |
| NoName7n11/Enveda_CASMI_2026 | none | none | — | — | — | — | OVERVIEW/WORKFLOW only; mirrors the official pages (prizes $16k/12k/9k/7k/6k) | — |
| dalloliogm/kaggle_competitions | none | — | — | — | — | — | verbatim mirror of the Data page (used for the ~1,500-spectra quote) | — |
4. Organiser statements and contested facts (all second-hand; forum unreachable by API)
- Decoy thread 741404: cited by
mxm-1xREADME as "host clarification" that the visible file "is a dummy test file" replaced at rerun. No quote of the host's text survives in any README or kernel I opened. The Data-page mirror (dalloliogm; same text indreaddevelopmentkernel) says the visible file "is comprised of examples from the training dataset; it will be replaced by the hidden test set during re-run, and will be approximately the same size." - Public/private fraction:
kitoplkernel table: "Public LB ~33 % of the hidden set … roughly 130 molecules; a single molecule moves it by up to 0.0076, so differences around 0.005 are noise." Attribution is not stated (reads like the Kaggle LB-page banner); treat as plausible but unverified. Corroborated by prvsiyan's identical-code rerun 0.335 → 0.328 (Δ 0.007). - Rerun limit: "CPU/GPU notebook ≤ 9 h, internet off" appears in NoName7n11, corentinlaudicina, yasumorishima; seyitkaangunes reports actual hidden-test runtime 3.5–4.5 h on T4 ×2; leesirleesirlee-star measured ~18 s/molecule end-to-end.
- ~1,500 vs ~1,213 spectra: Data page says "~1,500 spectra of ~400 molecules" for the hidden set; the visible decoy has 1,213 spectra/400 molecules; leesirleesirlee-star notes the graded submission file is 530,716 bytes vs 393,908 bytes for the public run — the hidden set has different molecule_ids (not the same 400). The ten-adduct list on the Data page vs seven in the decoy (kitopl) is a related discrepancy. I found no mention of "~2,500" anywhere.
- Pretrained weights: prvsiyan: "The host has confirmed that open pretrained weights are allowed provided they are distributed in compliance with the licence of the data they were trained on." Instrument: mohammadhmozafary: "the competition organizer has mentioned that the test set only contains [timsTOF]." Both unquoted paraphrases.
- Class shares: nobody has them; the forum back-solved class 1 ≈ 16–17 % from library-only = 0.151 (0.151/0.873 = 17.3 %, kitopl). nghianguyen7171 estimates 16/45/39; yasumorishima 16/27/55 — the class-2/3 split is genuinely contested (Δ 18 points), and it decides whether retrieval caps at ~0.45 or ~0.61.
5. How fast has the top moved? (dated snapshots, all second-hand except today's)
| Date (UTC) | Teams | Rank 1 | Other dated marks | Source |
|---|---|---|---|---|
| 2026-09-24 | 1,452–1,453 | — | 0.140 = rank 1128; 0.176 = rank 950 | billylu24 README |
| 2026-09-26 | — | 0.425 | rank 10 = 0.383, rank 20 = 0.370 | yasumorishima CLAUDE.md |
| 2026-09-27 | — | — | bronze line 0.342 | yasumorishima |
| 2026-10-01/02 | — | — | public 0.399–0.409 notebooks appear; "~170 teams line up at 0.399–0.401" | yasumorishima |
| 2026-10-03 | — | — | bronze line 0.401 | yasumorishima |
| 2026-10-05 | 2,470 | 0.471 | gold (14) 0.426, silver (123) 0.416, bronze (247) 0.411, median 0.328; 0.417 = rank 111 "of ≥ 800" | yasumorishima; leesirleesirlee-star LEADERBOARD.md |
| 2026-10-07 05:20 | 2,673 | 0.480 | ≥ 0.42: 266; ≥ 0.43: 35 | own pull |
| 2026-10-07 13:59 | 2,703 | 0.481 | gold (15) 0.436, silver (135) 0.425, bronze (270) 0.421, median 0.328 | own pull |
Rank 1 moved 0.425 → 0.471 → 0.481 in 11 days (+0.056), the bronze line 0.342 → 0.401 → 0.411 → 0.421 (+0.079 in 10 days), while the median has been frozen at 0.328 since at least 10-05 — the prvsiyan-rerun cluster. The same 0.417 score was rank 111 on 10-05 and is ranks 344–417 today: a public-notebook score decays ~30 ranks/day.
Forced analogy: law of evidence — standard of proof and burden allocation
Statement. A submission row is a 25-seat jury that must convict exactly one defendant; MRR pays 1/seat-number of the first correct conviction and nothing for acquittals. The "primary hypothesis" H (chosen formula / curated pool / adduct) is the prosecution's theory; "hedges" A (second formula, other adduct, PubChem-only isomer, derivative) are alternative theories. The burden question is: how many seats must the prosecution's theory fill before an alternative theory earns a seat, as a function of P = P(H true)?
Derivation. Let f(k) be the probability that, given its theory is true and the truth is in its list, a theory's ranker puts the truth at list-rank k. Fit f(k) ∝ k^−s on 1..25 to the one measured within-hit curve we have (leesirleesirlee-star: ranking-only MRR 0.765) → s = 2.073, which implies 64.4 % of hits at rank 1, 15.3 % at rank 2, 6.6 % at rank 3, 92.3 % within top-5. Expected MRR of any seating is Σ_i π_i / i where π_i is the probability the item in seat i is the truth; because exactly one item is true, the rearrangement inequality makes the optimum simply sort every candidate from every theory by its posterior π. For block seating (m primary seats then hedges) the m-th primary seat is worth P·R_H·f(m)/m and the first hedge seat (1−P)·q·R_A·f(1)/m, so the hedge enters at seat m* = ⌊(P·R_H / ((1−P)·q·R_A))^{1/s}⌋ + 1 (q = P(alternative theory true | H false); R = within-theory recall@25). Numerically with R_H = R_A, q = 1 (ev_model.py in scratch):
| P(H) | odds | first hedge at seat | best block m | EV block | EV all-25-primary | EV optimal interleave | seating pattern |
|---|---|---|---|---|---|---|---|
| 0.50 | 1 | 2 | 1 | 0.526 | 0.383 | 0.551 | HAHAHAHA… |
| 0.70 | 2.3 | 2 | 2 | 0.589 | 0.536 | 0.619 | HAHHAHAHHA… |
| 0.80 | 4 | 2 | 3 | 0.638 | 0.612 | 0.655 | HAHHAHHAHH… |
| 0.90 | 9 | 3 | 6 | 0.696 | 0.689 | 0.704 | HHAHHHAHHH… |
| 0.95 | 19 | 5 | 12 | 0.729 | 0.727 | 0.732 | HHHHAHHHHA… |
| 0.98 | 49 | 7 | — | — | — | — | — |
If the alternative theory's list is only half as good (q·R_A/R_H = 0.5): best m = 2 / 4 / 11 at P = 0.5 / 0.7 / 0.9, EV 0.431 / 0.553 / 0.691 vs all-primary 0.383 / 0.536 / 0.689. Rule: unless the primary theory is > 90 % certain, the second seat belongs to the best alternative theory, and the primary's own rank-2 candidate goes to seat 3; "preponderance" (P ≈ 0.5–0.7) means strict alternation; only "beyond reasonable doubt" (P ≥ 0.95) justifies four or more consecutive primary seats. The hedge is cheap because f(k) falls as k^−2: the primary's third candidate carries 6.6 % of its mass, the alternative's first carries 64 % of its. Testable: on the enveda-np-examples backtest, replace block seating (curated top-25, PubChem only in slots 4/8/12 or 5 tail slots — exactly what V44 does) with posterior-sorted interleave; the model predicts +0.02–0.04 when the gate P is miscalibrated below 0.9, and ≈ 0 when the library lock (lib_max ≥ 0.9) is already correct.
Back-solve check against write-ups (within-hit MRR = MRR / recall@25; implied top-1 share from the fitted Zipf):
| Write-up / setting | MRR | recall@25 | within-hit MRR | fitted s | top-1 share of hits | top-1 share of all |
|---|---|---|---|---|---|---|
| leesirleesirlee V44, public LB (recall back-solved) | 0.417 | 0.545 | 0.765 | 2.07 | 0.64 | 0.35 |
| mxm-1x closed-world exact-mass | 0.144 | 0.585 | 0.246 | 0.46 | 0.11 | 0.06 |
| mxm-1x closed-world fragment reranker | 0.313 | 0.755 | 0.414 | 0.98 | 0.26 | 0.19 |
| mxm-1x closed-world HGB | 0.510 | 0.879 | 0.580 | 1.43 | 0.43 | 0.37 |
| mxm-1x COCONUT pilot exact-mass → frag → HGB | 0.288 / 0.405 / 0.563 | 0.761 / 0.826 / 0.913 | 0.378 / 0.490 / 0.617 | 0.88 / 1.19 / 1.54 | 0.22 / 0.33 / 0.47 | 0.17 / 0.27 / 0.43 |
| mxm-1x 250-NP holdout, COCONUT-only | 0.275 | 0.724 | 0.379 | 0.89 | 0.22 | 0.16 |
| mxm-1x 250-NP spectral retrieval | 0.926 | 0.996 | 0.930 | 3.39 | 0.88 | 0.87 |
| chiparon 250-NP cross-library cosine (measured top-1 0.896) | 0.934 | 0.992 | 0.942 | 3.61 | 0.90 (meas. 0.90) | 0.89 |
| prvsiyan class-2 sim, ±10 ppm, recall 1.00 | 0.521 | 1.00 | 0.521 | 1.27 | 0.36 | 0.36 |
| prvsiyan COCONUT+train class-2 sim | 0.732 | 1.00 | 0.732 | 1.93 | 0.60 | 0.60 |
Consistency: the Zipf fit reproduces chiparon's measured top-1 (0.90 predicted vs 0.896 measured) — the only place the shape can be checked — and leesirleesirlee's independent "head p ≈ 0.30–0.35" rank-1 share matches the 0.35 implied here. The public LB's 0.765 lies between prvsiyan's class-2 ranking (0.52–0.73, recall forced to 1) and the near-perfect class-1 numbers (0.93), which is what a 17 % class-1 / 83 % class-2+3 mixture should give. So the claim "~45 % of hidden molecules never reach the 25" is arithmetically consistent across three independent write-ups, though it rests on one simulated 0.765. Random-ranker reference: MRR@25 = H₂₅/n = 0.153 (n = 25), 0.068 (56), 0.036 (107), 0.0008 (4,652) — the PubChem window of Isaackjoshua is a jury of 4,652 with no judge.
Where the analogy holds, partially holds, breaks. Holds: seats are scarce, early seats are worth more, and the burden shifts with the prior exactly as the odds formula says. Partially: a jury convicts once; here a later correct seat still pays (1/k), so the "standard of proof" is continuous, not a threshold. Breaks: (i) there is no cost to a wrong conviction — Isaackjoshua's "tiered" PubChem fill "cannot lose ground" because empty seats score zero anyway, so every row should carry 25 distinct InChIKey14s (377 single-submission teams and many baselines leave seats empty); (ii) a duplicate InChIKey14 (two tautomer spellings, stereoisomers, Kekulé vs aromatic) is a juror who has already voted — dariushafshar measured 10.42 % of COCONUT keys change under the scorer's canonicalisation, 2.30 % can disagree, costing 0.0004 MRR when keyed naively on COCONUT but +0.105 on the affected molecules; (iii) the "jurors" are not independent — same-formula isomers are the entire problem (70.8 % of window candidates share the true formula; median 46 isomers), so hedging across formulas is cheap while hedging across isomers within one formula is where f(k) is flat and expensive.
Gotchas — what could silently fool a modeller or a reader
- The public LB is a 130-molecule sample. One molecule = up to 0.0076; identical code reran 0.335 → 0.328; nghianguyen7171's byte-identical reruns landed 0.011 and 0.105 below advertised scores. Any delta < 0.01 is noise; the top-50 (0.429–0.481) spans 7 "molecules".
- Exact-score clusters are clones, not convergence. 32.7 % of teams sit on sixteen values; the silver line is the 0.425 clone score. A team count or "rank 100 = 0.425" tells you about notebook popularity, not about the difficulty of the problem.
- Submission count correlates with score (ρ = 0.54) because clones need ≥ 1 submission and real work needs 50 — not because iteration on the public LB works; yasumorishima's log shows 30+ submissions moving 0.275 → 0.303 while local CV moved 0.52 → 0.66.
- Local validation inverts on the LB. Three independent reports: random held-out train structures predicted the opposite ranker order (shiferaxa); LGB CV 0.65 → LB 0.279 < no-LGB 0.294 (yasumorishima); "a decomposition fitted to our own anchors yields a negative class-1 weight" (nghianguyen7171). Only the 250 enveda-np-examples under three masks has predicted LB order.
- The decoy detector is a landmine. Kernels switch to full runs on
sha256(test.parquet) != 2fa29c4a…or MD5654e030e…; if Kaggle ever changes the placeholder file, those notebooks silently run the 9-h path on commit. - ICEBERG/GLACIER "worth ≈ 0" was a budget artefact: ICE scored 71 of 400 molecules (18 %) with budget 300 s and the score still read 0.417; the 0.421 notebook uses 5,400 s. Fixed wall-clock budgets do not scale with molecule count — a backtest with 2,000 queries starves them.
- Bigger pool ≠ more recall in practice: PubChem top-25 isomers took prvsiyan's class-2 sim 0.732 → 0.379; Enamine tier (92.3 % of enveda-180) cost −0.013 LB; +62,744 ChEBI/LIPID MAPS = +0.000; popularity priors are +0.004 to +0.011 in one lineage and monotonically negative in another (μ 0.2 → −0.075).
- Advertised titles lie by version: "0.421" notebook scored 0.420 on v1; "V18 Sovereign Zenith [Target 0.440+]" replays at 0.425; "Protected Bio-DB Tail" says "new score unknown". Use the LB cluster, not the title.
- Kaggle's
kernel_sourcesis empty on 19/20 pulled kernels — fork lineage must be read from markdown; the ten-ancestor list in the V44 text is the best provenance map available and is itself a competitor's claim. - Keying candidates by the library's own InChIKey14 instead of the scorer's canonicalisation costs ~0 on COCONUT overall but 0.105 on the 2.3 % of structures where it disagrees (dariushafshar) — and more on de-novo SMILES in odd tautomeric forms.
- Ties are broken by submission time: inside the 149-team 0.425 block, medal/no-medal is decided by who ran the clone first.
- Team-merge arithmetic: 95 % of teams are solo; the 12 teams ≥ 0.44 include five-person teams (Arsokan) and a three-person team with 96 submissions (Sls2) — merging pools submission budget (5/day/team) and GPU quota (30 h/week/account, the real bottleneck per leesirleesirlee-star: "~6 variants per week").
Implications for the challenge
- Treat the public LB as a ±0.01 instrument and never select between variants on it alone; use the 250 enveda-np-examples three-mask backtest (shiferaxa, leesirleesirlee-star Tier 1, paired s.e. ±0.002) as the primary selector and the LB as a sanity check.
- Clone-floor is 0.425 today (V18 Sovereign Zenith replay) and decays ~30 ranks/day; our first real submission should reproduce 0.425 to anchor our environment (as leesirleesirlee-star did with V44), then measure every change as a paired delta on the backtest.
- Fill all 25 seats with distinct scorer-canonical InChIKey14s, every row — zero-cost, and the posterior-sorted interleave rule above says the second seat goes to the best alternative theory unless P(primary) > 0.9.
- Target recall@25 explicitly: it is ≈ 0.545 at 0.417 and nobody in the public tree optimises it; the mxm-1x and Isaackjoshua numbers show ranking inside a found list already converts 58–77 % of hits to rank-1 share.
- Budget forward models by molecule count, not wall-clock; run ICEBERG/GLACIER on the library-less molecules first (the 0.421 notebook's ordering) and verify coverage (
n_mols_scored) in logs on every scoring rerun. - Do not add PubChem as a pool; join ≤ 50 PubChem-only candidates into the main ranker under a library gate (lib_max < 0.7) — the one pool change with a reproducible +0.011.
- Keep two final picks on different theories (e.g., one library-locked, one interleaved) — the private 67 % can reorder a 0.01-wide band of 300 teams.
- Settle the class-2/3 split (16/45/39 vs 16/27/55) with a library-free probe submission (all-COCONUT retrieval, no train spectra) — it fixes the retrieval ceiling (≈0.45 vs ≈0.61) and therefore how much to invest in de novo.
Open questions
- Is the public/private split really 33/67 and ~130 molecules? (kitopl, unattributed) — readable only on the Kaggle LB page.
- What does thread 741404 actually say, and did the host address the 1,213 vs ~1,500 and seven-vs-ten-adduct discrepancies?
- What produces the 77-team 0.411 and 14-team 0.146 clusters?
- Does any team > 0.44 use anything outside the prvsiyan → v4n → fusion lineage? Rank 2 (MarvinTMB, 0.466 with 12 submissions) is the strongest hint of an independent method.
- Does the k^−2 within-list rank curve hold per class, or is class-2 flatter (prvsiyan's 0.52 at recall 1 implies s ≈ 1.3)? A per-class curve changes the interleave rule.
Sources
Kaggle API (own pulls, 2026-10-07): kaggle competitions leaderboard … --download at 05:20:19 and 13:59:36 UTC (lb_snapshot_2026-10-07.csv); kaggle kernels list --competition enveda-CASMI26-molecule-id-mass-spectra --sort-by voteCount|scoreDescending|dateRun --page-size 100 -v pages 1–2 (kernels_2026-10-07.csv); kaggle kernels pull of: inversion/casmi-denovo-tutorial-notebook, haideptry/enveda-casmi-2026-fast-spectral-cosine-baseline, evgendvorkin/enveda-casmi-2026, prvsiyan/analog-propagation-casmi-2026-baseline, bobthebot369/enveda-casmi-2026-v18-sovereign-zenith, dmitriigluzdov/casmi-26-from-spectra-to-structures, seyitkaangunes/casmi26-v4n-engine-fusion-union-lb-0-399, huseyinemreaksoy/casmi26-v4n-fusion-pubchem-on-public-0-421, imranarif536/casmi26-v44-pairtail-locked-top1, uninhibitedscholar/enveda-casmi-2026-own153-public-lb-0-417, hengck23/dreams-structure-from-spectrum-retrival-demo, denpugovkin/casmi-2026-protected-bio-db-tail, kozykappa/enveda-0-37-lb-score, dariushafshar/casmi26-10-4-of-keys-change-0-48-cost-you, plus earlier pulls of kitopl/casmi-2026-data-pitfalls-that-break-your-cv, josefreitasalvesneto/casmi-2026-a-complete-statistical-tour, mohammadhmozafary/casmi-2026-domain-knowledge-for-non-chemists, dreaddevelopment/casmi-2026-data-metric and the official metric notebook metric/casmi-mean-reciprocal-rank (read, never executed).
GitHub (raw READMEs/docs, mirrors of Kaggle facts): https://github.com/leesirleesirlee-star/Enveda_CASMI-2026_Molecule-ID-From-Mass-Spectra (README, docs/LEADERBOARD.md, docs/PLAYBOOK.md); https://github.com/gnshx/Enveda-CASMI-2026---Molecule-ID-From-Mass-Spectra (README, progress/ROADMAP_AND_PROGRESS.md); https://github.com/nghianguyen7171/casmi26; https://github.com/Isaackjoshua/casmi-2026; https://github.com/corentinlaudicina/enveda-casmi-2026; https://github.com/yasumorishima/kaggle-competitions (enveda-casmi26/CLAUDE.md); https://github.com/billylu24/Enveda-CASMI-2026---Molecule-ID-From-Mass-Spectra; https://github.com/mxm-1x/Enveda-CASMI-2026; https://github.com/chiparon/enveda-casmi26; https://github.com/shiferaxa/casmi26; https://github.com/AmanDubal/Enveda-CASMI-2026---Molecule-ID-From-Mass-Spectra; https://github.com/kabir0774/Enveda-Casmi-2026; https://github.com/AayanShabbir/casmi26; https://github.com/NoName7n11/Enveda_CASMI_2026 (OVERVIEW.md, WORKFLOW.md; README 404); https://github.com/dalloliogm/kaggle_competitions (Data-page mirror); https://github.com/OfficialBhattacharya/kaggle_CASMI_2026; https://github.com/Clyde0513/CASMI-2026; https://github.com/bobownYAO/Enveda-CASMI-2026-Molecular_Formula; https://github.com/ibnmarzuk/casmi26-molecule-id; https://github.com/tyofthestars11-lab/casmi26-molecule-id.
Not reachable: https://www.kaggle.com/competitions/enveda-CASMI26-molecule-id-mass-spectra/discussion/741404 (JS shell; title only). Kaggle medal rule as applied: gold = top 10 + 0.2 %, silver = top 5 %, bronze = top 10 % for > 1,000 teams (Kaggle progression rules, applied from memory of the published table — verify on kaggle.com/progression).