Home▸Articles▸Property Prediction

ADMET Properties Prediction

Build ML models to predict absorption, distribution, metabolism, excretion, and toxicity from molecular structure. Covers key datasets, featurization, DeepChem, multitask learning, and evaluation benchmarks.

mysimulator teamUpdated January 2026≈ 9 min read▶ Open the simulation

In drug discovery, a compound's biological activity against a target is only one dimension of its drug candidacy. The vast majority of drug candidates fail in clinical trials not because they are inactive, but because they have unfavorable pharmacokinetic or safety properties. ADMET prediction aims to predict these properties in silico, early in the pipeline, before expensive in vitro or in vivo experiments are conducted.

ADMET stands for Absorption, Distribution, Metabolism, Excretion, and Toxicity. Together, these properties determine how a drug moves through the body, whether it reaches its target at therapeutic concentrations, and whether it is safe to administer. ML models for ADMET prediction are now standard components of hit-to-lead and lead optimization workflows at pharmaceutical companies.

What ADMET Means and Why It Matters in Drug Discovery

The drug development pipeline is famously expensive and failure-prone. It costs an estimated $2 billion and 10-15 years to bring a single drug to market. Approximately 90% of drug candidates that enter phase I clinical trials ultimately fail. Of these failures, roughly 40% are due to unfavorable pharmacokinetic properties and 20% are due to toxicity. Predicting ADMET properties computationally before synthesis can dramatically reduce this failure rate.

Letter Property Area Key Questions Example Endpoints
A Absorption Does the drug reach systemic circulation? Caco-2 permeability, oral bioavailability (%F), Papp
D Distribution Does the drug reach target tissues? Volume of distribution, plasma protein binding, BBB penetration
M Metabolism How quickly is the drug broken down? CYP inhibition (3A4, 2D6, 2C9), half-life, microsomal stability
E Excretion How is the drug eliminated from the body? Renal clearance, total clearance, biliary excretion
T Toxicity Is the drug safe at therapeutic doses? hERG inhibition, DILI (drug-induced liver injury), Ames mutagenicity

Key ADMET Properties

Caco-2 Permeability

Caco-2 cells are a human colorectal adenocarcinoma cell line whose permeability characteristics closely mimic the intestinal epithelium. Caco-2 Papp (apparent permeability coefficient) is one of the most widely measured ADMET endpoints. It predicts how well a drug is absorbed through the gut wall. Values above 10 x 10^-6 cm/s are generally considered high permeability. LogPapp is often predicted by ML models since the raw values span orders of magnitude.

LogP and LogS (Lipophilicity and Solubility)

LogP (octanol-water partition coefficient) measures lipophilicity. High LogP compounds are more lipophilic: better at crossing membranes but often less soluble and more prone to CYP metabolism. Aqueous solubility (logS) is a critical absorption prerequisite. Many ML models predict logS from SMILES using Morgan fingerprints or GNNs, with datasets like the Huuskonen or ESOL benchmark.

hERG Inhibition

The hERG (human ether-a-go-go-related gene) potassium channel regulates the heart's electrical activity. hERG inhibition prolongs the QT interval and can cause fatal cardiac arrhythmias. hERG blockers have caused several drug withdrawals (terfenadine, cisapride). Predicting hERG liability early is critical. This is a binary classification problem (inhibitor vs. non-inhibitor) with IC50 cutoff typically at 10 micromolar.

CYP Inhibition

Cytochrome P450 enzymes are the primary metabolic pathway for most drugs. Inhibiting CYP isoforms (3A4, 2D6, 2C9, 1A2, 2C19) can lead to drug-drug interactions by reducing the metabolism of co-administered drugs. The Tox21 and ChEMBL datasets contain CYP inhibition data. Modeling CYP inhibition is typically framed as binary classification (inhibitor at a given IC50 threshold).

Plasma Protein Binding (PPB)

Only the unbound fraction of a drug is pharmacologically active. High PPB (above 95%) reduces the free drug available for target engagement and can affect both efficacy and clearance. PPB is typically modeled as a regression task, predicting the percentage bound.

Available Datasets

Dataset Endpoint(s) Size Task Type Source
TDC (Caco-2) Caco-2 logPapp 906 Regression Wang et al. 2016
TDC (ESOL) Aqueous solubility (logS) 1,128 Regression Delaney 2004
TDC (Lipophilicity) LogD7.4 4,200 Regression AstraZeneca 2018
TDC (hERG) hERG inhibition 648 Classification Multiple sources
TDC (CYP P450) CYP 1A2, 2C9, 2C19, 2D6, 3A4 ~12,000 each Classification ChEMBL
TDC (BBB Martini) Blood-brain barrier penetration 1,975 Classification Martini et al. 2012
TDC (HIA Hou) Human intestinal absorption 578 Classification Hou et al. 2007
ChEMBL Many endpoints (curated) Millions Both EBI

The Therapeutics Data Commons (TDC) is the recommended starting point. It provides pre-split benchmarks with standardized evaluation protocols for over 20 ADMET endpoints, accessible via the PyTDC Python package. This prevents data leakage from inconsistent splitting practices.

Featurization Approaches for ADMET

The choice of featurization significantly impacts ADMET model performance:

Model Architectures

Random Forest and XGBoost Baseline

For datasets with fewer than 5,000 compounds (which is most ADMET benchmarks), Random Forest or XGBoost on Morgan fingerprints is a strong and stable baseline. These models are fast to train, easy to interpret with SHAP, and resistant to overfitting through regularization. In TDC leaderboard comparisons, gradient boosting often matches GNN performance on small ADMET datasets.

Multitask Neural Networks

ADMET prediction benefits particularly well from multitask learning. Many ADMET properties share underlying physicochemical causes: lipophilicity influences both membrane permeability (absorption) and CYP metabolism. Training a single neural network with multiple output heads for related tasks allows the model to share low-level representations, effectively increasing the training data per task.

A multitask architecture uses shared lower layers (computing a molecular representation) and separate task-specific output layers. This is natively supported in DeepChem through MultitaskClassifier and MultitaskRegressor.

Graph Neural Networks

AttentiveFP and MPNN (Message Passing Neural Network) architectures from DeepChem have shown strong performance on several TDC ADMET benchmarks. They process molecular graphs directly, learning atom and bond representations through message passing. For ADMET tasks with 1,000-5,000 compounds, GNNs do not consistently outperform fingerprint-based models, but on larger aggregated datasets they tend to generalize better across scaffold diversity.

Code Example: ADMET Prediction with DeepChem

import deepchem as dc
import numpy as np
from deepchem.models import AttentiveFPModel
from sklearn.metrics import roc_auc_score, mean_absolute_error

# -------------------------------------------------------
# 1. Load an ADMET dataset from TDC via DeepChem loaders
# -------------------------------------------------------
# Example: hERG inhibition (binary classification)
# Install: pip install PyTDC deepchem

from tdc.single_pred import ADME, Tox

# Load hERG dataset
data = Tox(name='hERG')
split = data.get_split()  # default scaffold split

train_df = split['train']
valid_df = split['valid']
test_df  = split['test']

print(f"Train: {len(train_df)}, Valid: {len(valid_df)}, Test: {len(test_df)}")

# -------------------------------------------------------
# 2. Fingerprint-based baseline: XGBoost on ECFP4
# -------------------------------------------------------
from rdkit import Chem
from rdkit.Chem import AllChem
import numpy as np
from xgboost import XGBClassifier

def smiles_to_ecfp4(smiles_list, n_bits=2048):
    X = np.zeros((len(smiles_list), n_bits), dtype=np.uint8)
    for i, smi in enumerate(smiles_list):
        mol = Chem.MolFromSmiles(smi)
        if mol is not None:
            fp = AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, nBits=n_bits)
            fp.ToNumpyArray(X[i])
    return X

X_train = smiles_to_ecfp4(train_df['Drug'].tolist())
X_valid = smiles_to_ecfp4(valid_df['Drug'].tolist())
X_test  = smiles_to_ecfp4(test_df['Drug'].tolist())

y_train = train_df['Y'].values.astype(int)
y_valid = valid_df['Y'].values.astype(int)
y_test  = test_df['Y'].values.astype(int)

clf = XGBClassifier(
    n_estimators=300,
    max_depth=6,
    learning_rate=0.05,
    subsample=0.8,
    use_label_encoder=False,
    eval_metric='logloss',
    random_state=42
)
clf.fit(X_train, y_train, eval_set=[(X_valid, y_valid)], verbose=False)

y_pred_proba = clf.predict_proba(X_test)[:, 1]
auroc = roc_auc_score(y_test, y_pred_proba)
print(f"XGBoost ECFP4 hERG AUROC: {auroc:.4f}")

# -------------------------------------------------------
# 3. DeepChem AttentiveFP for GNN-based ADMET prediction
# -------------------------------------------------------
# Prepare DeepChem dataset
featurizer = dc.feat.MolGraphConvFeaturizer(use_edges=True)

train_smiles = train_df['Drug'].tolist()
train_labels = train_df['Y'].values.astype(float)

X_dc_train = featurizer.featurize(train_smiles)
X_dc_valid = featurizer.featurize(valid_df['Drug'].tolist())
X_dc_test  = featurizer.featurize(test_df['Drug'].tolist())

dataset_train = dc.data.NumpyDataset(X=X_dc_train, y=train_labels.reshape(-1,1))
dataset_valid = dc.data.NumpyDataset(X=X_dc_valid, y=valid_df['Y'].values.reshape(-1,1))
dataset_test  = dc.data.NumpyDataset(X=X_dc_test,  y=test_df['Y'].values.reshape(-1,1))

# Define AttentiveFP model for binary classification
model = AttentiveFPModel(
    mode='classification',
    n_tasks=1,
    num_layers=3,
    num_timesteps=2,
    graph_feat_size=200,
    dropout=0.2,
    learning_rate=1e-3,
    batch_size=64,
    model_dir='./attentivefp_herg'
)

# Train
model.fit(dataset_train, nb_epoch=50, deterministic=True)

# Evaluate
metric = dc.metrics.Metric(dc.metrics.roc_auc_score)
train_score = model.evaluate(dataset_train, [metric])
test_score  = model.evaluate(dataset_test,  [metric])
print(f"AttentiveFP hERG Train AUROC: {train_score['roc_auc_score']:.4f}")
print(f"AttentiveFP hERG Test  AUROC: {test_score['roc_auc_score']:.4f}")

Multitask Learning Example

import deepchem as dc
import numpy as np

# -------------------------------------------------------
# Multitask prediction on 5 CYP P450 isoforms
# -------------------------------------------------------
# Tasks: CYP1A2, CYP2C9, CYP2C19, CYP2D6, CYP3A4 inhibition

# Load multiple TDC tasks and align by SMILES
from tdc.multi_pred import CYPReaction  # or load each individually

# Simpler approach: use CYP450 dataset from DeepChem
tasks, datasets, transformers = dc.molnet.load_cyp450(
    featurizer='ECFP',
    splitter='scaffold'
)

train_dataset, valid_dataset, test_dataset = datasets

print(f"Tasks: {tasks}")
print(f"Train size: {len(train_dataset)}")

# Multitask classifier (shared ECFP features, 5 output heads)
model = dc.models.MultitaskClassifier(
    n_tasks=len(tasks),
    n_features=1024,
    layer_sizes=[1000, 500],
    dropouts=[0.25, 0.25],
    learning_rate=1e-3,
    batch_size=64,
    model_dir='./multitask_cyp'
)

model.fit(train_dataset, nb_epoch=30)

metric = dc.metrics.Metric(dc.metrics.roc_auc_score, np.mean)
test_scores = model.evaluate(test_dataset, [metric], transformers)
print(f"Multitask CYP Mean AUROC: {test_scores['mean-roc_auc_score']:.4f}")

Evaluation Metrics and Practical Benchmarks

Task Type Primary Metric Secondary Metric Notes
Binary classification (hERG, CYP) AUROC AUPRC, F1 Class imbalance makes AUPRC important
Regression (logS, logP, Caco-2) MAE or RMSE R2, Pearson r Report units (log scale)
Multi-label (Tox21 CYPs) Mean AUROC across tasks Per-task AUROC Watch for high variance on small tasks

Representative TDC benchmark scores to contextualize your results:

Common Pitfalls in ADMET Modeling

Further Reading

Try it live

Explore a related model hands-on: open ADMET Predictor Dashboard (AI) and change its parameters while it runs. Everything stays in your browser.

▶ Open ADMET Predictor Dashboard (AI) simulation

What did you find?

Add reproduction steps (optional)