PXR Induction Ensemble โ trained weights
Fine-tuned model weights for an ensemble predicting human PXR (pregnane X receptor) activation potency (pEC50) from SMILES, built for the OpenADMET PXR Induction Challenge.
These are the large trained weights only. Full method, the lightweight base models
(LightGBM / Ridge), the ensemble + calibration pipeline, and reproduction instructions live in
the code repo: https://github.com/ASinanSaglam/OpenADMET_PXR_challenge (see WRITEUP.md).
What's in this repo
| Path | Model | Family | Files |
|---|---|---|---|
unimol/fold{0..4}/ |
Uni-Mol | 3D transformer, end-to-end fine-tuned | 25 ร .pth (5 outer folds ร 5 internal CV models) |
M07_ac/ |
Chemprop (M07_ac) | 2D message-passing GNN, CheMeleon backbone | 7 ร .ckpt (5 folds + 2 alt checkpoints) |
Each unimol/foldN/ also carries its config.yaml, target_scaler.ss, conformer cache, and
CV data needed by unimol_tools to load the model.
Not hosted here (small โ retrain from the code repo's scripts): M10 (LightGBM) and M05
(Ridge/ECFP4). The unimol_p1eval/ Phase-1 evaluation artifacts are intentionally omitted.
The full ensemble
Four diverse base learners blended with Set 1-calibrated weights, then a linear-stretch tail calibration. Diversity across model families is deliberate so errors decorrelate.
| Model | Family | Blend weight | Blind (Set 1) RAE |
|---|---|---|---|
| M10 | LightGBM | 0.416 | 0.6254 |
| M07_ac | Chemprop 2D GNN | 0.221 | 0.7310 |
| M05 | Ridge / ECFP4 | 0.187 | 0.7288 |
| Uni-Mol | 3D transformer | 0.176 | 0.6224 |
Final blind (Analog Set 1) RAE: 0.5945 (4-model fixed weights + linear-stretch calibration), vs 0.6033 v1 baseline. Scored by Relative Absolute Error = ฮฃ|pred โ true| / ฮฃ|true โ mean(true)|.
Training setup
- Task: pEC50 regression from SMILES.
- Data: challenge
train + unblinded Analog Set 1(4392 compounds, 10ร SMILES augmentation), not redistributed here. - Leakage-free weights: ensemble weights are fit on the unblinded Set 1 holdout only, then all models are retrained on the full 4392 for the blind Set 2 submission.
- Uni-Mol:
unimol_tools.MolTrain, regression, 20 epochs, lr 1e-4, batch 16,remove_hs=False, per-fold for clean OOF; inference averages 10 SMILES augmentations. - Chemprop: Lightning, CheMeleon backbone, MAE loss + activity-cliff triplet term, early stopping (patience 15) on val_loss with best-checkpoint selection.
Loading
Uni-Mol (per fold):
from huggingface_hub import snapshot_download
from unimol_tools import MolPredict
local = snapshot_download("ASinanSaglam/pxr-induction-ensemble", allow_patterns="unimol/fold0/*")
pred = MolPredict(load_model=f"{local}/unimol/fold0")
y = pred.predict({"SMILES": ["CCO"]})
Chemprop checkpoints load via the standard chemprop/Lightning load_from_checkpoint path; see
scripts/01_train_chemprop_gnn.py in the code repo for the matching model definition.
License
MIT (see the code repository). Challenge data is not included and is governed by the OpenADMET challenge terms.