How a molecule becomes a spectrum
The competition
Who runs this, what are the rules, what has worked before, and where does the leaderboard stand?
CASMI 2012–2022, the 2026 rules, Enveda and PRISM, open write-ups, and the critiques.
The queen's digest
5/5 workers reported · Tue Oct 06 2026 20:00:00 GMT-0400 (Eastern Daylight Time)
TL;DR (5 bullets a chief of staff would read)
- The public leaderboard is a 130-molecule, clone-polluted instrument. 2,703 teams (13:59 UTC pull); rank 1 = 0.481, median 0.328; 885 teams (32.7 %) sit on 16 exact scores from re-running public notebooks (149 at 0.425, 74 at 0.417, 106 at 0.328). Derived medal lines: gold 0.436 (rank 15), silver 0.425, bronze 0.421 — the silver line runs through a clone block, so ties are decided by submission timestamp. Any delta < 0.01 is noise; byte-identical reruns moved up to 0.105.
- The scorer is fully known and strict:
MolFromSmiles → TautomerEnumerator().Canonicalize → MolToInchiKey[:14]with RDKit 2026.03.3; no salt stripping; >25 tokens, NaN or duplicate ids reject the whole file; invalid or duplicate SMILES silently consume slots. 5 subs/day, team ≤ 5, entry/merge 2026-12-07, close 2026-12-14, $50k ($16k first), CC BY-NC 4.0 data, MIT required of winners. - Every CASMI precedent and every 2026 write-up say coverage, not ranking, is the ceiling: within-hit MRR is 0.75–0.95 across ten public write-ups; recall@25 back-solves to ≈ 0.545 at LB 0.417. Editions without a candidate list containing the answer collapsed (2014 unknowns 0/6 at rank 1; 2022 best automated 26–29 % top-1).
- The only local validation that predicted public-LB order is the 250 enveda-np-examples structures under three masks (three independent teams); random held-out train structures predicted the opposite ranker order. The visible test is a decoy (1,213/1,213 rows are enveda-180 train rows).
- Enveda is plaintiff, clerk and judge: it wrote the metric, chose and validated the hidden 400 on its own platform (documented stack: SIRIUS fragmentation-tree curation + NMR), revived CASMI eight days before a $311 M Series E, and states in its press release that CASMI "helps to grow PRISM". PRISM has no preprint, weights or absolute numbers. Three organisers co-authored the June-2026 MassSpecGym leakage audit — assume the answer key defeats canonicalisation and PubChem-order shortcuts.
New concrete facts (numbered; file + source count; confidence)
- LB 2026-10-07 13:59 UTC: ranks 1/5/10/50/100/250/500/1000 = 0.481/0.448/0.441/0.429/0.425/0.421/0.413/0.357; p90 0.421, p99 0.432; ≥0.45/0.44/0.43/0.42/0.40 = 3/12/49/317/762; 106 zeros; 95 % solo. (
public_leaderboard_…md, own API pull, CSV saved; high.) - Top moved 0.425 (09-26) → 0.471 (10-05) → 0.481 (10-07); bronze 0.342 → 0.401 → 0.421 in 10 days; a fixed 0.417 decays ≈ 30 ranks/day. (3 dated write-up snapshots; medium-high.)
- Public LB ≈ 33 % of hidden set (~130 molecules) — one kernel, unattributed to a host post. (low; settles only with host text.)
- Shared recipe of every ≥ 0.37 public kernel: train ∪ COCONUT 2.0 pool (~710–775k), ±10 ppm, Morgan r2+r3+MACCS / FPNet, HGB or LightGBM LambdaRank rerankers, RRF of 2–3 engines, ICEBERG/GLACIER forward models, library lock at lib_max ≥ 0.9, PubChem only as a ≤ 50-candidate gated tail (+0.011). No SIRIUS, MS2DeepScore or PRISM anywhere; DreaMS only as tail filler. (14 kernels + 20 READMEs; high.)
- Negative pool results: PubChem as a pool took class-2 sim 0.732 → 0.379; Enamine tier −0.013 LB; +62,744 ChEBI/LIPID MAPS = +0.000; popularity priors +0.004…+0.011 in one lineage, monotonically negative in another. (4 write-ups; high.)
- Scorer mechanics (metric notebook read): RDKit 2026.03.3 pinned via dataset
metric/rdkit-2026-3-3-wheel; canonicalisation after heavy-atom-composition gate; comma-separated multiple acceptable truths supported; missing ids score 0 silently. (casmi2026_rules_…md; high.) [Na+].CC(=O)[O-]≠ acetic acid under the scorer; 1.58 % of train structures shift and 1.15 % collapse under canonical keying; 2.3 % of COCONUT keys change, costing one team −0.105 on that subset. (rules + LB workers; high.)- CASMI 2016 leave-out: CSI:FingerID 70 → 36 Top-1 when training overlap removed; Dührkop 2015 58.5 % → 34.4 %. Expect local top-1 to roughly halve on honest splits. (
casmi_history_…md,critiques_…md; high.) - enveda-180 = Enamine HLL-200 on timsTOF Pro 2 at 20/40/60 eV (Zenodo, MassIVE MSV000102122, ChemRxiv 2026-06-04); "180" unexplained. enveda-np-examples has no public description beyond "purified natural products". (
enveda_…md; high / low.) - PRISM: BERT-family encoder, 20 % masked-peak objective, 1.2 B spectra / 85 B tokens (~600 M public, ~600 M internal), only relative numbers (+7–16 % R² on 12 properties, +23.3 % retrieval hits vs unnamed baselines); closed-weight; Microsoft = Azure compute. (2024-05-28 blog + press; high that nothing else exists.)
- Fiehn (C&EN 2026-09-17, DOI 10.47287/cen.612552.newsarticle): "mass spectra of isolated compounds, which is difficult enough"; Allen: CASMI "hasn't yet had its AlphaFold moment". (high, verbatim.)
- Metric noise: SE ≈ 0.02 on 400 molecules; ≈ 0.04 on a 130-molecule public subset. (critiques + LB workers, arithmetic; high.)
Forced analogies — what the law-of-evidence lens produced
- Standard of proof → seat-filling rule (paid off; corrects my interim block rule). Fitting the within-list hit curve f(k) ∝ k^−s to the measured ranking-only MRR (0.765) gives s ≈ 2.07 (64 % of hits at rank 1, 92 % in top-5). Bayes-optimal seating is sort all candidates from all hypotheses by posterior; block seating ("13–15 primary then hedges") loses 0.01–0.03 EV; the first alternative-hypothesis candidate belongs at seat 2 unless P(primary) ≥ 0.90. Back-solve across ten write-ups is consistent (LB rank-1 share ≈ 0.35 matches an independent 0.30–0.35).
- Daubert on the benchmark (paid off). "Known error rate" fails worst: no label-error rate, SE ≈ 0.02 ⇒ never promote a model on an unpaired delta < 0.04.
- Standing and motive of the plaintiff (paid off as a validation rule). Ground truth was validated by Enveda's SIRIUS + NMR stack ⇒ SIRIUS-explainable spectra are over-represented; formula assignment on the hidden set should beat wild-data rates. Defensive rule: validate only on hold-outs the host could have produced (NP-like, structure-disjoint, timsTOF, explainable).
- Duds, kept honestly. "Burden shifts to the defence" — nothing: wrong guesses cost zero. "Acquittal" — no analogue. "Gatekeeping" — Kaggle admits every method. "Double jeopardy" — the same suspect can appear twice (duplicate canonical InChIKey14) and the only penalty is a dead seat. The lens is useful for allocation and trust in evidence, useless for penalties.
Contradictions within my subdomain
- Public-LB fraction: ≈ 33 % (one kernel) vs unknown (rules worker: solution file has a Public/Private column, no fraction stated).
- Hidden spectra count 1,500 vs 2,500; adducts 10 vs 7 (official texts).
- Class-2/3 split of hidden molecules: 16/45/39 vs 16/27/55 (two write-ups) — fixes whether the retrieval ceiling is ≈ 0.45 or ≈ 0.61.
- Popularity priors: small positive in one lineage, monotonically negative in another (and 2016 vs 2017 precedents disagree). Resolution: useful only on the known class, gated by library-hit score.
Gotchas for the modeler (what could silently fool us)
- Visible test is a decoy; kernels detect commit-vs-rerun via SHA256/MD5 of
test.parquet— if Kaggle swaps the placeholder, those paths run 9 h on commit. train.inchikey14is not the scoring key; dedup and validate on the scorer's canonical key, pinned to RDKit 2026.03.3 (local box is 2026.03.6).- Salts, multi-fragment SMILES and ring-chain tautomers are not normalised by the scorer; pools must be parent-stripped by us.
- Invalid SMILES, duplicate keys and missing molecule_ids are silent zeros; > 25 tokens or NaN rejects the file and burns a daily slot.
- Local CV on train structures inverts on the LB; only the 250-NP three-mask backtest has predicted LB order.
- Fixed wall-clock budgets for ICEBERG/GLACIER starve on large query counts (18 % coverage at 300 s).
- enveda-180 is an instrument twin but a chemistry decoy (Enamine library, ~0.03–0.2 % in COCONUT): a good enveda-180 hold-out score means the instrument was learned.
- The organisers wrote the MassSpecGym leakage audit (arXiv 2606.19624; spectrum-blind PubChem order scored 49.98 %): always report a spectrum-blind baseline beside any local score.
Questions for other queens
- q7_compute_execution: copy Rules/Overview/discussion 741404 verbatim from a logged-in browser (public fraction, rerun limit, RAM, Rule 2.6). Adopt the 250-NP three-mask backtest as the primary selector?
- q6_candidate_space_retrieval: what is recall@25 of COCONUT ∪ LOTUS ∪ train at ±10 ppm on enveda-np-examples with the scorer's canonical key, after salt/ring-chain normalisation? Can a one-step NP-scaffold analog enumerator lift coverage for Enveda-style med-chem analogs absent from COCONUT?
- q5_methods_lineage: nobody in the public tree stacks calibrated log-odds (all RRF/LambdaRank); is your +0.03–0.05 reproducible on the 250-NP backtest?
- q8_serendipity: a per-hypothesis P(formula correct) calibrator with no MS1 — any eyewitness confidence–accuracy analogue for a formula claim?
Layman sentences
- The contest asks a computer to pick, from a molecule's fragmentation pattern, the right drawing out of 25 guesses, paying most when the right one is first.
- The public scoreboard is crowded with hundreds of copies of the same shared notebook, so small differences in score mean nothing; real progress shows up only when a method finds molecules nobody's candidate list contained.
- The company running the contest also made the answer key with its own tools, so the fairest practice test is one it could have made too: new natural products, measured on the same instrument.
Gaps I could not fill
- Host wording of discussion 741404, the public/private split, notebook RAM, Rule 2.6 text and the 9 h limit remain mirrored or unknown (Kaggle pages are JS/reCAPTCHA shells; forum not in the API).
- Whether the hidden 400 are isolates, purchased standards or synthesised analogs; what "180" means; any description of enveda-np-examples.
- PRISM's architecture size and any absolute retrieval number (none exist publicly).