Graph-transformer pre-training · 5×5 cross validation · two data sets

KERMT v2 and the two GROVER checkpoints it descends from, fine-tuned on the same folds

KERMT1 is NVIDIA's GPU-optimised reimplementation of GROVER3, the dual-view graph transformer that pre-trains on 11 million unlabelled molecules by predicting masked subgraph motifs; KERMT v22 re-pretrains that encoder with a contrastive, probabilistic objective and is the checkpoint NVIDIA released. All three are fine-tuned here by KERMT's own main.py finetune, one multitask model per fold, on the same fifteen ExpansionRx and Biogen endpoints, folds and held-out test sets as the rest of this site, and v2's frozen 512-d latent is also read by TabPFN 36 exactly as Monroe is. The re-pretraining earns its keep inside the family: fine-tuned v2 beats fine-tuned GROVER base 30–13–2 and GROVER large 33–12–0 over 45 endpoint × metric calls, and all three clear LightGBM and fine-tuned CheMeleon7. Scaling the original checkpoint does not: GROVER large goes 3–26–16 against GROVER base. But none of the three reaches the front of this field. Fine-tuned v2 trails fine-tuned Atom-JEPA4 7–11–27, wins no Biogen call against Monroe + TabPFN 35 (0–2–16), and is never best alone on either data set. Frozen, v2's latent loses 38 of 45 calls to Monroe's vector. And the comparison carries a caveat the GROVER arms exist to expose: v2 was pre-trained on a corpus that contains every molecule in both test sets.

8arms compared
15endpoints
5×5cross validation
150fine-tuned fold models
149GPU hours

The released checkpoint has seen these molecules

The NV-KERMT-70M-v2 checkpoint records the corpus it was pre-trained on, and that corpus includes both data sets used here: its train_data_path is a hybrid of ZINC15, ChEMBL, Biogen, OpenADMET and ChEMBL-MT. Structures only, with no labels, and the objective is contrastive rather than supervised — but every test molecule was in the pre-training set, so the test split is not blind to the encoder in the way the protocol assumes. That is the reason the two original GROVER checkpoints are here. Both pre-date these data sets, so they have never seen a test molecule in any form, and they share the encoder, the fine-tuning code and the recipe with v2. Read the v2 result as an upper bound and the GROVER results as the clean ones; the gap between them mixes better pre-training with whatever structural exposure is worth, and this design cannot separate the two. What can be said is that the gap is small — a mean +0.023 R² over GROVER base — and that it does not move v2 past Atom-JEPA or Monroe.

KERMT's own fine-tuning, on these folds

Each of the 150 fold models is one call to main.py finetune at commit 8828743, with nothing of ours inside the training loop. The fold's four training fifths, the held-out fifth and the fixed test set go in as three CSVs with a matching feature file each; KERMT fits its target scaler on the training CSV only, trains for 100 epochs, keeps the epoch that scored best on the held-out fifth, and predicts the test set with it. One model covers every endpoint of its data set at once, labels masked where unmeasured, the multitask setting CheMeleon and Atom-JEPA are also fine-tuned in. The recipe is the v2 paper's Appendix E: Noam-scheduled Adam from 1e−4 to 2e−5, batch 32, a 2-layer shared trunk under a 3-layer head per endpoint, every MLP 700 wide. Molecule-level features are descriptastorus' CDF-normalised RDKit 2D descriptors9, the repository default, computed once for every molecule — the normalisation is fitted by descriptastorus on a reference set, not on these data, so nothing passes between folds.

One thing to know about running this code as released: load_checkpoint copies the pre-trained checkpoint's own saved model arguments over the command line (task/train.py:249), so a few settings are the checkpoint's rather than ours, and they differ between the arms. Each fold records what it actually trained with, and that is what the table below reports. The two that matter: v2 trains with dropout 0.1 and keeps the epoch with the best validation MAE, while both GROVER checkpoints train with no dropout and keep the epoch with the best validation loss. The code was left unmodified rather than forced to agree, so the arms differ a little in more than their weights.

In effectKERMT v2 FTGROVER-B FTGROVER-L FT
Encodergtransdualtransdualtrans
Hidden width8008001200
Dropout0.10.00.0
Distance coefficient0.10.10.1
Bond drop rate000
Best epoch picked onvalidation MAEvalidation lossvalidation loss

Eight arms

The four comparators are imported unchanged from the nine-method foundation-model comparison and the Atom-JEPA study on the identical fold assignments: LightGBM on 2,048-bit Morgan counts10 (the classical floor), ChemProp8 fine-tuned from CheMeleon7 (the strongest 2D message-passing arm), Monroe + TabPFN 35 (the strongest frozen encoder read in context), and fine-tuned Atom-JEPA4 (a 39M-parameter 3D EquiformerV3 pre-trained by latent prediction). The frozen KERMT arm (kermt_tabpfn) takes v2's 512-d projected cMIM latent for every molecule and hands each fold's training vectors to TabPFN 3 with Monroe's exact call: one TabPFNRegressor, 8 estimators, softmax temperature 0.9, no PCA, the mean as the point estimate. The latent was chosen before any fold was scored.

The scoreboard

Tukey HSD per endpoint and metric, counted the same way across every study on this site: a method is on top if Tukey's simultaneous correction cannot separate it from the best mean at α = 0.05, and it is only best alone if no other arm shares the top group. MAE is in the log units of each endpoint, followed by R².

ExpansionRx11

LightGBM + Morgan0 best alone · 0 tied for best · 27 worse
ChemProp + CheMeleon, fine-tuned0 best alone · 3 tied for best · 24 worse
Monroe + TabPFN 35 best alone · 4 tied for best · 18 worse
Atom-JEPA fine-tuned13 best alone · 6 tied for best · 8 worse
GROVER base fine-tuned0 best alone · 7 tied for best · 20 worse
GROVER large fine-tuned0 best alone · 6 tied for best · 21 worse
KERMT v2 fine-tuned0 best alone · 7 tied for best · 20 worse
KERMT v2 frozen + TabPFN 30 best alone · 1 tied for best · 26 worse
EndpointLightGBMCheMeleonMonroe/PFN3Atom-JEPA FTGROVER-B FTGROVER-L FTKERMT v2 FTKERMT v2/PFN3
LogD0.545±0.0120.427±0.0180.402±0.0150.382±0.014tied0.386±0.010tied0.386±0.014tied0.383±0.011tied0.656±0.019
LogS0.454±0.0150.358±0.0170.380±0.0090.323±0.010best0.358±0.0180.369±0.0210.352±0.0170.425±0.012
LOG_HLM0.332±0.0090.314±0.0140.293±0.0090.277±0.014best0.295±0.0170.301±0.0160.303±0.0190.355±0.006
LOG_MLM0.410±0.0140.399±0.0300.358±0.011tied0.390±0.0170.369±0.016tied0.367±0.019tied0.369±0.020tied0.378±0.008
LOG_Caco_AB0.340±0.0220.305±0.0330.248±0.011best0.314±0.0370.329±0.0290.334±0.0260.320±0.0300.325±0.017
LOG_Caco_Efflux0.432±0.0190.375±0.0340.346±0.012best0.375±0.0340.402±0.0270.410±0.0220.392±0.0330.393±0.023
LOG_MPPB0.288±0.0200.212±0.0210.259±0.0130.185±0.018best0.218±0.0180.230±0.0200.204±0.0160.226±0.011
LOG_MBPB0.223±0.0180.157±0.0180.192±0.0160.124±0.005best0.162±0.0140.165±0.0140.148±0.0110.187±0.006
LOG_MGMB0.302±0.0340.175±0.015tied0.204±0.0330.163±0.010tied0.188±0.0130.189±0.0170.169±0.011tied0.216±0.022
Tukey HSD on MAE, ExpansionRx. Each bar is a method's mean over 25 folds with a 95% simultaneous confidence interval. Blue is the best mean, grey cannot be separated from it, red is significantly worse.
Tukey HSD on MAE, ExpansionRx. Each bar is a method's mean over 25 folds with a 95% simultaneous confidence interval. Blue is the best mean, grey cannot be separated from it, red is significantly worse.
Fold-level MAE across all 25 folds (5×5 CV) on ExpansionRx.
Fold-level MAE across all 25 folds (5×5 CV) on ExpansionRx.
EndpointLightGBMCheMeleonMonroe/PFN3Atom-JEPA FTGROVER-B FTGROVER-L FTKERMT v2 FTKERMT v2/PFN3
LogD0.510±0.0210.671±0.0190.718±0.0170.754±0.015best0.721±0.0100.721±0.0130.727±0.0110.309±0.033
LogS0.335±0.0360.474±0.0290.442±0.0280.562±0.021best0.513±0.0370.486±0.0410.524±0.0370.323±0.025
LOG_HLM0.139±0.0450.221±0.0710.314±0.0490.388±0.062best0.312±0.0840.299±0.0710.274±0.1030.039±0.033
LOG_MLM0.084±0.0640.135±0.1410.290±0.048tied0.183±0.0740.262±0.063tied0.270±0.073tied0.251±0.088tied0.188±0.026
LOG_Caco_AB-0.014±0.1290.160±0.1910.471±0.041best0.103±0.2190.030±0.172-0.002±0.1640.081±0.1810.100±0.110
LOG_Caco_Efflux-0.135±0.0960.110±0.1580.275±0.054best0.112±0.158-0.014±0.133-0.061±0.1130.029±0.1580.053±0.130
LOG_MPPB0.229±0.1050.541±0.0930.300±0.0680.639±0.059best0.490±0.0840.433±0.1020.564±0.0680.462±0.041
LOG_MBPB0.477±0.0800.713±0.0610.590±0.0660.797±0.013best0.686±0.0420.675±0.0440.735±0.0270.604±0.018
LOG_MGMB0.260±0.1480.642±0.027tied0.588±0.0980.670±0.023tied0.630±0.033tied0.623±0.043tied0.663±0.030tied0.505±0.094
Tukey HSD on R², ExpansionRx.
Tukey HSD on R², ExpansionRx.

Biogen ADME12

LightGBM + Morgan0 best alone · 0 tied for best · 18 worse
ChemProp + CheMeleon, fine-tuned0 best alone · 0 tied for best · 18 worse
Monroe + TabPFN 313 best alone · 4 tied for best · 1 worse
Atom-JEPA fine-tuned1 best alone · 4 tied for best · 13 worse
GROVER base fine-tuned0 best alone · 0 tied for best · 18 worse
GROVER large fine-tuned0 best alone · 0 tied for best · 18 worse
KERMT v2 fine-tuned0 best alone · 2 tied for best · 16 worse
KERMT v2 frozen + TabPFN 30 best alone · 0 tied for best · 18 worse
EndpointLightGBMCheMeleonMonroe/PFN3Atom-JEPA FTGROVER-B FTGROVER-L FTKERMT v2 FTKERMT v2/PFN3
LOG_SOL0.413±0.0090.370±0.0070.322±0.004best0.340±0.0060.347±0.0060.342±0.0070.342±0.0070.408±0.006
LOG_HLM0.395±0.0050.337±0.0070.299±0.003tied0.295±0.008tied0.317±0.0040.319±0.0050.309±0.0080.384±0.004
LOG_RLM0.470±0.0050.404±0.0060.375±0.003best0.385±0.0050.389±0.0060.393±0.0060.384±0.0070.462±0.005
LOG_MDR1_ER0.385±0.0050.340±0.0040.294±0.002best0.317±0.0050.329±0.0040.331±0.0060.321±0.0050.383±0.003
LOG_HPPB0.576±0.0330.558±0.0250.438±0.017best0.500±0.0190.510±0.0200.518±0.0200.501±0.0260.589±0.029
LOG_RPPB0.554±0.0210.553±0.0230.445±0.026best0.513±0.0230.512±0.0260.504±0.0250.494±0.0250.605±0.035
Tukey HSD on MAE, Biogen ADME.
Tukey HSD on MAE, Biogen ADME.
Fold-level MAE across all 25 folds (5×5 CV) on Biogen ADME.
Fold-level MAE across all 25 folds (5×5 CV) on Biogen ADME.
EndpointLightGBMCheMeleonMonroe/PFN3Atom-JEPA FTGROVER-B FTGROVER-L FTKERMT v2 FTKERMT v2/PFN3
LOG_SOL0.275±0.0240.363±0.0210.504±0.013best0.436±0.0170.384±0.0220.396±0.0200.413±0.0270.289±0.019
LOG_HLM0.326±0.0150.474±0.0190.556±0.0090.573±0.016best0.531±0.0120.526±0.0130.558±0.0210.354±0.012
LOG_RLM0.389±0.0110.513±0.0120.569±0.007tied0.564±0.012tied0.555±0.0130.547±0.0120.561±0.011tied0.392±0.011
LOG_MDR1_ER0.449±0.0100.520±0.0090.641±0.008best0.584±0.0120.569±0.0110.565±0.0150.573±0.0140.451±0.009
LOG_HPPB0.129±0.0940.230±0.0650.478±0.036best0.390±0.0380.315±0.0550.307±0.0560.336±0.0680.143±0.079
LOG_RPPB0.118±0.0670.154±0.0610.415±0.051best0.318±0.0510.266±0.0620.279±0.0630.303±0.0530.143±0.095
Tukey HSD on R², Biogen ADME.
Tukey HSD on R², Biogen ADME.

On ExpansionRx fine-tuned Atom-JEPA is on top of 19 of 27 combinations (13 of them alone) and Monroe + TabPFN 3 of 9 (5 alone). The three arms fine-tuned here land in a band below that and close together: KERMT v2 on top of 7 combinations, GROVER base 7, GROVER large 6, and none of the three ever alone. v2's are three endpoints: LogD, LOG_MLM and LOG_MGMB. On Biogen ADME the picture is Monroe's — on top of 17 of 18 combinations, 13 of them alone — and the fine-tuned graph transformers mostly drop out: KERMT v2 reaches the top tier on 2 of them, all on LOG_RLM, and neither GROVER arm nor the frozen latent reaches it at all.

Head-to-head across all 45 endpoint × metric calls

Paired by fold, a two-sided t-test over the 25 shared folds at p < 0.05 for each endpoint and metric. Inside the family the ordering is clear and in the direction the v2 paper argues: fine-tuned v2 over fine-tuned GROVER base 30–13–2 (mean +0.023 R²) and over GROVER large 33–12–0 (+0.035 R²), with the two GROVER arms close enough that most of their calls go unmade — GROVER large against base is 3–26–16, so the bigger original checkpoint is if anything the weaker one. Outside the family it gets harder. All three beat LightGBM almost everywhere and CheMeleon more often than not. Against Monroe, v2 is ahead on ExpansionRx (15–1–11) and loses everything that is called on Biogen (0–2–16); the same split, deeper, holds for both GROVER arms. Against fine-tuned Atom-JEPA every one of the three loses clearly: v2 7–11–27, GROVER base 4–4–37, GROVER large 5–4–36.

KERMT v2 fine-tuned againstExpansionRx, 27Biogen, 18Gain, mean of 15
winsno calllosseswinsno calllossesΔ R²MAE drop
Atom-JEPA fine-tuned3519468−0.032−0.0070
Monroe + TabPFN 3151110216−0.037−0.0090
ChemProp + CheMeleon, fine-tuned16741800+0.045+0.0196
LightGBM + Morgan27001800+0.202+0.0751
GROVER base fine-tuned151021530+0.023+0.0081
GROVER large fine-tuned19801440+0.035+0.0113
KERMT v2 frozen + TabPFN 323401800+0.149+0.0669
GROVER base fine-tuned against Atom-JEPA fine-tuned31231314−0.055−0.0151
GROVER base fine-tuned against Monroe + TabPFN 314490018−0.060−0.0171
GROVER base fine-tuned against ChemProp + CheMeleon, fine-tuned11881800+0.022+0.0115
GROVER base fine-tuned against LightGBM + Morgan26101800+0.179+0.0670
GROVER large fine-tuned against Atom-JEPA fine-tuned31232313−0.067−0.0183
GROVER large fine-tuned against Monroe + TabPFN 312690018−0.072−0.0203
GROVER large fine-tuned against ChemProp + CheMeleon, fine-tuned93151800+0.010+0.0083
GROVER large fine-tuned against LightGBM + Morgan25201800+0.166+0.0638
GROVER large against GROVER base fine-tuned01710396−0.012−0.0032
frozen KERMT v2 + TabPFN 3 against Monroe + TabPFN 334200018−0.186−0.0759
frozen KERMT v2 + TabPFN 3 against ChemProp + CheMeleon, fine-tuned21240117−0.104−0.0473
frozen KERMT v2 + TabPFN 3 against LightGBM + Morgan1818864+0.052+0.0082
Fine-tuned KERMT v2 against each arm on ExpansionRx: mean paired MAE difference over 25 folds with 95% confidence intervals, signed so right of zero favours KERMT v2.
Fine-tuned KERMT v2 against each arm on ExpansionRx: mean paired MAE difference over 25 folds with 95% confidence intervals, signed so right of zero favours KERMT v2.
The same paired MAE differences on Biogen ADME.
The same paired MAE differences on Biogen ADME.
The re-pretraining, isolated: GROVER base against KERMT v2, the same encoder, code and recipe from two different pre-trained checkpoints, MAE paired by fold on ExpansionRx.
The re-pretraining, isolated: GROVER base against KERMT v2, the same encoder, code and recipe from two different pre-trained checkpoints, MAE paired by fold on ExpansionRx.
Scaling the original checkpoint: GROVER base (800-wide) against GROVER large (1200-wide), MAE paired by fold on ExpansionRx.
Scaling the original checkpoint: GROVER base (800-wide) against GROVER large (1200-wide), MAE paired by fold on ExpansionRx.
Against the strongest fine-tuned arm on this site: Atom-JEPA against KERMT v2, MAE paired by fold on ExpansionRx.
Against the strongest fine-tuned arm on this site: Atom-JEPA against KERMT v2, MAE paired by fold on ExpansionRx.

Frozen or fine-tuned

Reading v2 frozen through Monroe's TabPFN 3 call splits the distance from Monroe to fine-tuned v2 into two steps: first swap Monroe's vector for v2's latent, then fine-tune v2 instead of reading it.

EndpointData setSwap Monroe's embedding for KERMT v2's frozen latent, same TabPFN 3Then fine-tune KERMT v2 insteadFine-tuned KERMT v2 against Monroe
LOG_Caco_ABExpansionRx−0.371−0.018−0.389
LOG_Caco_EffluxExpansionRx−0.222−0.023−0.246
LOG_HLMExpansionRx−0.276+0.236−0.040
LOG_MBPBExpansionRx+0.014+0.131+0.145
LOG_MGMBExpansionRx−0.083+0.158+0.075
LOG_MLMExpansionRx−0.103+0.063−0.040
LOG_MPPBExpansionRx+0.162+0.102+0.264
LogDExpansionRx−0.409+0.418+0.009
LogSExpansionRx−0.119+0.201+0.082
LOG_HLMBiogen ADME−0.202+0.204+0.002
LOG_HPPBBiogen ADME−0.335+0.193−0.142
LOG_MDR1_ERBiogen ADME−0.190+0.123−0.068
LOG_RLMBiogen ADME−0.176+0.169−0.008
LOG_RPPBBiogen ADME−0.272+0.160−0.111
LOG_SOLBiogen ADME−0.215+0.124−0.091
medianExpansionRx−0.119+0.131+0.009
medianBiogen ADME−0.209+0.164−0.079

As a frozen vector v2's latent is behind Monroe's on 13 of the 15 endpoints — ahead only on LOG_MBPB and LOG_MPPB — by a median −0.119 R² on ExpansionRx and −0.209 on Biogen, and it wins only 3 of 45 calls against Monroe. It also loses to CheMeleon 2–2–41, though it does beat LightGBM 26–7–12, so the latent is not uninformative — just not a drop-in for an encoder built to be read frozen. Fine-tuning then lifts R² on 13 of 15 endpoints, by a median +0.131 R² on ExpansionRx and +0.164 on Biogen, and wins 41 of 45 calls against the frozen arm while losing 0. The net against Monroe is a median +0.009 R² on ExpansionRx and −0.079 on Biogen — the one data set it gains on and the one it does not. This is the same shape the Uni-Mol study found: an encoder pre-trained to reconstruct or contrast, rather than to summarise a molecule in one vector, needs its weights moved before it competes.

KERMT v2 frozen under TabPFN 3 against KERMT v2 fine-tuned, MAE paired by fold on ExpansionRx.
KERMT v2 frozen under TabPFN 3 against KERMT v2 fine-tuned, MAE paired by fold on ExpansionRx.
Monroe against frozen KERMT v2, both read by the same TabPFN 3 call, MAE paired by fold on Biogen ADME.
Monroe against frozen KERMT v2, both read by the same TabPFN 3 call, MAE paired by fold on Biogen ADME.

What it costs

The 150 fine-tuned fold models took 149 GPU hours across two machines (apollo, an RTX 5070 Ti; spark, a DGX Spark GB10). The one arm both machines ran, GROVER base on ExpansionRx, took a median 4.2× as long on spark, though that figure flatters apollo: spark ran two fine-tuning jobs at a time for most of the sweep, which raises its time per fold and its throughput together. KERMT runs its full epoch budget with no early stopping, so a fold costs the same whatever epoch it ends up keeping. The kept epoch is usually well inside the 100 available — a median of 61 for v2, 40 for GROVER base and 35 for GROVER large — so the budget is not the binding constraint, and an early-stopping patience would cut most of this bill. On ExpansionRx, the one arm pairing both ran on apollo, a GROVER large fold costs 1.4× a GROVER base one for its 1200-wide encoder, and gets nothing for it. The frozen arm needs one forward pass per molecule and then TabPFN 3, minutes rather than hours, and is not tabulated.

ArmData setMachineFold modelsMedian minutes / foldMedian best epochEpoch budgetTotal, GPU hours
GROVER-B FTBiogen ADMEspark, GB102561.16110024.7
GROVER-B FTExpansionRxapollo, GeForce RTX 5070 Ti536.1251003.0
GROVER-B FTExpansionRxspark, GB1020151.62010050.1
GROVER-L FTBiogen ADMEapollo, GeForce RTX 5070 Ti2520.5561008.5
GROVER-L FTExpansionRxapollo, GeForce RTX 5070 Ti2550.32610020.8
KERMT v2 FTBiogen ADMEspark, GB102562.85010026.1
KERMT v2 FTExpansionRxapollo, GeForce RTX 5070 Ti2536.96610015.6

Reported the way “Even More Thoughts on ML Method Comparisons” and the protocol paper it points at13 argue comparisons should be: distributions over folds, simultaneous confidence intervals, paired tests on the folds, and no bolded maxima. Where two methods cannot be separated, both are reported as tied.

Code, per-fold metrics and every figure: studies/kermt.

References

  1. Adrian, C.; Mahajan, S. P.; Sirelkhatim, A.; et al. KERMT: Accelerating Molecular Property Prediction with GPU-Optimised Graph Transformers. Preprint, 2025. NVIDIA's accelerated reimplementation of GROVER, and the code that fine-tunes every arm fitted here. github:NVIDIA-BioNeMo/KERMT
  2. Xue, D.; Mahajan, S. P.; Adrian, C.; et al. Contrastive Pre-training for Molecular Property Prediction at Scale. Preprint, 2026. The re-pretrained encoder released as NV-KERMT-70M-v2, fine-tuned here as kermt_ft and read frozen as kermt_tabpfn. hf:nvidia/NV-KERMT-70M-v2
  3. Rong, Y.; Bian, Y.; Xu, T.; Xie, W.; Wei, Y.; Huang, W.; Huang, J. Self-Supervised Graph Transformer on Large-Scale Molecular Data. NeurIPS 2020. The dual-view graph transformer KERMT reimplements; its released base and large checkpoints are the two unexposed arms here. NeurIPS 2020
  4. Petersen, K. H.; Tirsgaard, R. H.; Cornet, F. R. J.; Jordahn, M.; Schmidt, M. N. Atom-JEPA: Joint-Embedding Predictive Architecture for 3D Atomistic Systems. Preprint, 2026. The 39M-parameter 3D self-supervised comparator, fine-tuned. arXiv:2610.08400
  5. Banaszewski, B.; Fitzgibbon, A. W. Monroe: A Molecular Foundation Model for In-Context Probabilistic Inference. Preprint, 2026. The frozen encoder in the strongest in-context arm. arXiv:2608.18982
  6. Grinsztajn, L.; Flöge, K.; Key, O.; et al. TabPFN-3: Technical Report. Preprint, 2026. The head of the Monroe arm and of the frozen KERMT arm. arXiv:2605.13986
  7. Burns, J. W.; Zalte, A. S.; Abreu, C. R. A.; et al. Deep Learning Foundation Models for Low-Data Regimes from Classical Molecular Descriptors. J. Chem. Inf. Model. 2026, articles ASAP. The pre-trained 2D D-MPNN comparator. 10.1021/acs.jcim.6c01546
  8. Graff, D. E.; Morgan, N. K.; Burns, J. W.; et al. Chemprop v2: An Efficient, Modular Machine Learning Package for Chemical Property Prediction. J. Chem. Inf. Model. 2026, 66 (1), 28–33. 10.1021/acs.jcim.5c02332
  9. Kelley, B. Descriptastorus. Software, 2018–. The fixed-CDF RDKit 2D descriptors KERMT concatenates to its readout. github:bp-kelley/descriptastorus
  10. Rogers, D.; Hahn, M. Extended-Connectivity Fingerprints. J. Chem. Inf. Model. 2010, 50 (5), 742–754. The LightGBM baseline's representation. 10.1021/ci100050t
  11. OpenADMET; Expansion Therapeutics. OpenADMET–ExpansionRx Blind Challenge Data. Hugging Face, 2026, CC BY 4.0. 10.57967/hf/9687
  12. Fang, C.; Wang, Y.; Grater, R.; et al. Prospective Validation of Machine Learning Algorithms for Absorption, Distribution, Metabolism, and Excretion Prediction: An Industrial Perspective. J. Chem. Inf. Model. 2023, 63 (11), 3263–3274. 10.1021/acs.jcim.3c00160
  13. Ash, J. R.; Wognum, C.; Rodríguez-Pérez, R.; et al. Practically Significant Method Comparison Protocols for Machine Learning in Small Molecule Drug Discovery. J. Chem. Inf. Model. 2025, 65 (18), 9398–9411. 10.1021/acs.jcim.5c01609