Problem
Predicting small-molecule / protein binding for unseen chemistry
Given a protein target and a small molecule (SMILES), predict whether and how strongly it binds (and ideally the bound pose), for chemical scaffolds and pockets that are not in the training data. Commercially this is the core of computational hit-finding and lead optimisation: a model that generalises would replace large parts of wet-lab screening (DEL, HTS) and physics-based free-energy calculations in every small-molecule drug program. Today's models mostly memorise: BELKA winners scored well on shared building blocks but performed at roughly random-pick level on a held-out novel library, and co-folding models lose much of their accuracy on complexes dissimilar to training. A reasonable 'solved' criterion: on prospectively tested, scaffold-novel chemistry (e.g. a held-out DEL library or a CACHE-style blind round), top-100 predicted binders confirm at a hit rate far above the library base rate (e.g. >=10x enrichment, or >=10% confirmed hits vs the ~0.7% seen in CACHE #2), and affinity predictions reach FEP-level accuracy (~1 kcal/mol MAE) on targets with <30% similarity to training complexes.
Funding
Raised by the 7 companies working on it.
Why it is still open
Independent benchmarks published through 2026 show binding/pose predictors still largely memorise: Runs N' Poses (Nature Structural & Molecular Biology, May 2026) finds AlphaFold3, Chai-1, Boltz-1 and Protenix accuracy drops sharply on complexes dissimilar to training; the BELKA winner found 2/100 true binders on one novel-library target and 0/100 on the other two, i.e. random-pick level. Isomorphic's IsoDDE (Feb 2026) reports only ~50% pose accuracy on the <20%-similarity bucket and is not independently benchmarked.
Source: nature.com
Who is working on it
Also active
Funding for these is not counted: the problem is a small part of what they do, or they contribute data and tools.
Prizes
| Prize | Status | Pays for | Amount |
|---|---|---|---|
| NeurIPS 2024 - Predict New Medicines with BELKA (Kaggle) | Awarded | Ranking | $12k |
| ASAP-Polaris-OpenADMET Antiviral Challenge 2025 | Awarded | Ranking | $0 |
| CACHE challenges | Open | Ranking | — |
What counts as solved
import Mathlib /-! # Predicting small-molecule / protein binding for unseen chemistry Modelled on Leash Bio BELKA (Kaggle): classify binders vs non-binders per protein target from DNA-encoded-library screens, scored by average precision (AP), with the hard part being test molecules built from building blocks / scaffolds absent from training. Polaris/ASAP-style affinity tracks can be added as a second board. Concrete in Lean: the submission (target × SMILES → score), average precision over a finite labelled list, mean AP over targets, and "beats pinned baseline by δ on the novel-chemistry split, and on every target individually does not fall below baseline". Opaque oracle (`Split`): the hidden molecules and binder labels (DEL enrichment calls or measured affinity past a cutoff), and the attestation that the split is truly out-of-distribution (no shared building blocks / Bemis–Murcko scaffolds with training). Attester: the data owner (Leash, Polaris, CACHE organisers). Units: AP dimensionless in [0, 1]. -/ namespace OpenSpur.Problems.SmallMoleculeBinding structure Molecule where smiles : String abbrev Model (nT : ℕ) := Fin nT → Molecule → ℝ noncomputable section /-- Average precision over (score, isBinder) pairs: mean over positives i of precision among items scoring ≥ score_i. -/ def averagePrecision (xs : List (ℝ × Bool)) : ℝ := let pos := xs.filter (·.2) (pos.map fun p => ((xs.filter fun q => decide (p.1 ≤ q.1) && q.2).length : ℝ) / ((xs.filter fun q => decide (p.1 ≤ q.1)).length : ℝ)).sum / pos.length /-- Hidden novel-chemistry split for one target (oracle). -/ structure Split where molecules : List (Molecule × Bool) -- label: binder baselineAP : ℝ def ap (s : Split) (f : Molecule → ℝ) : ℝ := averagePrecision (s.molecules.map fun m => (f m.1, m.2)) def meanAP {nT : ℕ} (splits : Fin nT → Split) (f : Model nT) : ℝ := (∑ t, ap (splits t) (f t)) / nT def meanBaseline {nT : ℕ} (splits : Fin nT → Split) : ℝ := (∑ t, (splits t).baselineAP) / nT structure Thresholds where margin : ℝ -- δ on mean AP, e.g. 0.05 minPositives : ℕ -- per target def Solved {nT : ℕ} (T : Thresholds) (splits : Fin nT → Split) (f : Model nT) : Prop := 0 < nT ∧ meanBaseline splits + T.margin ≤ meanAP splits f ∧ ∀ t, T.minPositives ≤ ((splits t).molecules.filter (·.2)).length ∧ (splits t).baselineAP ≤ ap (splits t) (f t) def rung (T : Thresholds) (k : ℕ) : Thresholds := { T with margin := T.margin + (k : ℝ) / 50 } end theorem rung_mono {nT : ℕ} (T : Thresholds) (s : Fin nT → Split) (f : Model nT) {j k : ℕ} (hjk : j ≤ k) (h : Solved (rung T k) s f) : Solved (rung T j) s f := by have hc : (j : ℝ) ≤ k := by exact_mod_cast hjk obtain ⟨h0, h1, h2⟩ := h refine ⟨h0, ?_, h2⟩ simp only [rung] at h1 ⊢ linarith end OpenSpur.Problems.SmallMoleculeBinding
Public resources
- BELKA (Leash) Kaggle competition, ~100M DEL measurements x 3 targets
- BELKA results write-up (memorisation vs generalisation)
- Runs N' Poses co-folding generalisation benchmark (also on Polaris)
- Polaris Hub benchmarks incl. ASAP-Polaris-OpenADMET antiviral potency/pose/ADMET 2025
- CACHE prospective hit-finding challenges
- Leash Hermes paper (DEL-trained binding predictor, 2026)