CoolFace
Modelpublic

bhumika-tewari-282006/ayurvedic-drug-discovery-affinity-model

sourceHugging Facemitupdated 3d agoView on Hugging Face
0likes
Model Card

Ayurvedic Drug Discovery — Binding Affinity Model

A RandomForest regressor predicting protein-ligand binding affinity (pKd), trained as part of an AI-driven computational pipeline for Ayurvedic phytochemical drug-candidate prioritization (RCCIIT/MAKAUT Winter Project 2026).

Training data (real, not synthetic)

Trained on real PDBBind v2013-core protein-ligand complexes: real crystal structures, real experimentally-measured binding affinities. 127 training examples, 18 validation, 36 held-out test (scaffold split, not random — Bemis-Murcko scaffolds with a Tanimoto-similarity leakage check, max cross-split similarity 0.915). 14 of 195 candidate complexes were honestly excluded due to real parsing/scoring failures (RDKit ligand-SDF parse failures, a Vina exit failure, missing labels — logged, never substituted with fabricated data).

Docking-derived features came from real AutoDock Vina `--score_only` runs on each complex's crystal pose (real physics-based energy terms, not simulated).

The exact processed training set (181 rows: 39 features + real pKd label each) is published as a companion dataset: `bhumika-tewari-282006/ayurvedic-affinity-training-data`.

Metrics (real, on held-out test set)

ModelMAERMSER²PearsonSpearman
RandomForest (selected)1.351.590.010.300.31
GradientBoosting1.471.79-0.270.130.12
Ridge1.671.93-0.470.130.15
XGBoost1.641.90-0.420.080.01

These metrics are honestly modest, reflecting the small real training set (127 examples) — disclosed deliberately, not smoothed over. R² near zero means the model explains little variance beyond the mean on unseen complexes at this training-set size; MAE (≈1.35 pKd units) is the more informative number for a ranking/triage tool. This model is a computational hypothesis-generation aid, not a validated predictor — every prediction it produces should be tagged as a machine-learning-prediction-tier result with an applicability-domain check, never presented as clinical or experimental fact.

Feature schema

39 features, in this exact order:

Docking-derived (10) — real AutoDock Vina --score_only energy terms and derived contacts: vina_affinity, ligand_efficiency, intermolecular_energy, torsional_energy, desolvation_energy, num_hbonds, num_hydrophobic_contacts, num_vdw_contacts, electrostatic_score, pocket_occupancy.

RDKit QSAR descriptors (18): molecular_weight, logp, hbd, hba, tpsa, rotatable_bonds, heavy_atom_count, ring_count, aromatic_ring_count, fraction_csp3, num_aliphatic_rings, num_heterocycles, formal_charge, num_radical_electrons, bertz_ct, balaban_j, bcut2d_mwhi, qed_score.

Ayurvedic/phytochemical heuristic features (11) — mostly zero/default for this generic PDBBind training set (PDBBind complexes are not Ayurvedic phytochemicals); included so the same 39-feature vector shape applies at both training and inference time against real Ayurvedic compound data: phytochemical_class_flavonoid, phytochemical_class_alkaloid, phytochemical_class_terpenoid, phytochemical_class_phenolic, phytochemical_class_saponin, phytochemical_class_tannin, is_privileged_scaffold, traditional_use_score, ayurvedic_dosha_vata, ayurvedic_dosha_pitta, ayurvedic_dosha_kapha.

Training reproducibility

Trained on a GPU-enabled Kaggle kernel. Training data fetched and processed entirely within the training environment (never downloaded to a local machine or bundled as raw data). Four regressors were trained and honestly compared on the held-out test set (RandomForest, GradientBoosting, Ridge, XGBoost); RandomForest was selected as best by test-set MAE.

Usage

The model file is a dict with keys model, scaler, feature_names, model_name:

python
import joblib
d = joblib.load("best_regressor.joblib")
model, scaler, feature_names = d["model"], d["scaler"], d["feature_names"]

# X is a (n_samples, 39) array built in the exact feature order above,
# scaled with the same scaler used at training time
X_scaled = scaler.transform(X)
pkd_pred = model.predict(X_scaled)

Disclaimer

This is a computational research tool. Predictions are not clinical or experimental validation of any compound's efficacy or safety. Any candidate must undergo real wet-lab and clinical validation before any therapeutic claim.