GPCR Foundation Model

Methods

Build of 12 September 2026. Every figure on this page is transcribed from the build artifacts, not from notes.

Data

Measurements come from ChEMBL together with Eidogen-curated data. The training endpoints are IC50, Ki, Kd, EC50 and Kb, so "more potent" spans binding affinity and functional potency together.

The curated set is our own, assembled and checked in house, and it is folded into the training set on the same footing as the public data rather than held alongside it. It is the reason this build reads better than the one before it.

Activity is derived from the reported value and unit rather than read from a precomputed field, because in this data the precomputed column appears only on erroneous rows. Duplicate readings collapse by median per target, structure and endpoint, never by the most potent value, because the best value selects unit errors.

The funnel

StageRows
Measurements read from all sources1,151,162
After scope, endpoint, assay class and unit filters, then duplicate collapse389,013
Distinct compounds in that set225,676
Distinct targets in that set284
Fitting side of the measuring split350,097
Held-out side of the measuring split38,916

This build applies no assay-quality threshold. An earlier build required an assay to carry at least ten compounds and a pActivity standard deviation of at least 0.5, which discarded about a third of the rows. The split holds out 10 percent of compounds, stratified so each target contributes about a tenth of its own: per-target share ran 0.08 to 0.11, median 0.10, and no target with 20 or more compounds was left with nothing held out. A compound appears on one side only. The split is not temporal.

The two models the site serves are fitted on the whole 389,013 measurements with nothing held back. Every accuracy quoted here comes from a second pair of models built by the identical pipeline on the fitting side of the split and scored on the held-out side, so no number on this site comes from a model scored on data it was fitted on.

Endpoint mix

EndpointMeasurements
Ki161,771
IC50131,601
EC5087,493
Kd4,760
Kb3,388

Comparisons are matched by endpoint, so a functional reading is never ranked directly against a binding one.

Targets covered

The bundle carries 400 targets, each addressable by gene symbol or UniProt accession, but a target being listed is not the same as the model having been fitted on it. A target that was not fitted cannot be scored: the interface refuses it and so does the API.

ModelTargets fittedWith a held-out scoreNames recognizedLigands in fitting
Potency259235400215,838
Selectivity27121140066,662

The ranking pages group fitted targets separately from merely recognized ones, and show each fitted target's own held-out accuracy beside its name. The full list, with per-target measurement counts and accuracies, is on the targets page.

Accuracy varies widely between targets

ModelTargets scoredMedianWith 50+ comparisonsMedian of thoseOf those, below 0.60
Potency2350.791960.790
Selectivity2110.831040.820

A headline accuracy is a comparison-weighted average, so targets carrying many held-out comparisons dominate it. Both headline figures reconcile exactly with the per-target table above.

Featurization

A comparison is one row of three concatenated blocks. Nothing is scored on its own and subtracted.

BlockDimensionsContents
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
Sequence480ESM2 esm2_t12_35M_UR50D, mean pooled over residues with the start and end tokens excluded, full-length UniProt canonical sequence rather than a domain slice

Potency rows are ligand, sequence, ligand, so 2×1,038 + 480 = 2,556 columns. Selectivity rows are sequence, ligand, sequence, so 2×480 + 1,038 = 1,998. The width is checked when a model loads and a mismatch raises.

The models

Random forests, 300 trees, square-root feature sampling. Minimum leaf size 20 for potency and 8 for selectivity, set by the comparison counts.

Every comparison is entered twice, once as given and once with the two outer blocks exchanged and the label inverted, so no answer depends on which side a ligand was written on. 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 1.

ModelComparisons fittedRows after the swapHeld-out comparisonsAccuracy
Potency2,259,8104,519,620762,4930.77
Selectivity238,378476,75624,7410.80