Family Foundation Model

Methods

Built as of 13 September 2026.

Data

Measurements come from ChEMBL 37. The endpoints are Ki, IC50, Kd, EC50 and Kb.

Activity is derived from the reported value and unit rather than read from a precomputed column. Duplicate readings collapse by median, never by the most potent value, because the best value selects unit errors. Only exact readings are used; censored readings are dropped.

High-throughput screening is excluded. On the sibling GPCR model, comparisons drawn from withheld screening endpoints scored 0.538 where neither compound had been seen, against 0.773 on held-out medicinal chemistry.

The funnel

StageCount
Measurements after scoping to human single-protein targets carrying a family1,263,626
Targets in that pool2,705
Ligands in that pool794,638
Cross-family comparisons formed89,888
Comparisons fitted on81,199
Comparisons held out8,689
Ligands across those comparisons22,588
Targets servable1,877
Family pairings represented290

How a comparison is formed

Four rules, and they are the substance of the method.

  1. Endpoint matched. An IC50 is only ever compared with another IC50, so the comparison is between two readings of the same kind.
  2. The two targets share no family label. That is what makes this a cross-family model rather than a wider version of the sibling ones.
  3. Ties are dropped. Two equal readings order nothing, and entering them teaches the forest that whichever side is written first wins.
  4. Which target is A is randomized, and every comparison is entered twice with the two sequence blocks exchanged and the answer inverted.

Endpoint mix of the held-out set

EndpointComparisonsAccuracy
IC506,5770.776
Ki1,4400.697
Kd5580.588
EC501140.693

The Kd row is thin and weak and should not be leaned on.

The split

The holdout is compound-disjoint: a ligand's InChIKey decides which side it lands on, so zero ligands appear on both sides. A held-out comparison therefore involves chemistry the model was never fitted on. It is not a temporal split.

Featurization

A comparison is one row of three concatenated blocks, in a fixed order. Nothing is scored on its own and subtracted.

BlockDimensionsContents
Sequence A480ESM2 esm2_t12_35M_UR50D, mean pooled over residues, full-length UniProt canonical sequence
Ligand1,038Morgan count fingerprint, radius 2, 1,024 bits, then 14 descriptors: molecular weight, heavy atom count, bond count, rotatable bonds, ring count, and per-element atom counts for C, N, O, S, F, Cl, Br, I and P
Sequence B480as sequence A

Rows are sequence, ligand, sequence, so 2×480 + 1,038 = 1,998 columns. At prediction time the same symmetry is applied as an average over both argument orders, so comparing A with B and comparing B with A return probabilities summing to exactly 1.

The model

A random forest. Every comparison is entered twice, once as given and once with the two sequence blocks exchanged and the label inverted, so no answer depends on which side a target was written on.

QuantityValue
Comparisons fitted on81,199
Rows after the swap162,398
Label balance0.5
Held-out comparisons8,689
Held-out accuracy0.750

What raising the strength cutoff buys

Two curves and two axes, because the trade is the point. Accuracy climbs as the cutoff rises, and the number of comparisons you still get an answer for falls. Either curve on its own tells half the story.

Accuracy rises from 0.750
  answering everything to 0.966 at a strength cutoff of 0.90, while the share of
  comparisons still answered falls from 100 percent to 22 percent.
Held-out comparisons, cumulative. The count under each cutoff is how many comparisons remain at that gate, from 8,689 down to 1,924.

The two baselines

Published beside the headline because a cross-family comparator can score well while knowing nothing about the compound.

What is being askedAccuracy
The model0.750
Always pick whichever family usually wins that pairing0.654
The same forest with the ligand removed0.710

The compound contributes about four points on top of target identity, reproduced at 3.9, 4.5 and 4.1 points across three independently built versions.

Environment

The serving image pins every version the forest was fitted under. RDKit computes 1,024 of every ligand block's 1,038 dimensions, so a different RDKit produces different features, scores worse, and nothing in the model detects it. The image refuses to build unless the joblib matches its manifest checksum, the 30 shipped reference predictions replay to 1e-6, and the both-orders average still returns exactly 0.5 for a target against itself.

PackagePinned
numpy2.2.6
python3.10.15
sklearn1.7.2