Inspiration
Malaria still kills hundreds of thousands of people every year, most of them children, and Plasmodium falciparum keeps evolving resistance to existing drugs. Natural products are a historically rich source of antimalarials — quinine and artemisinin both started as plant compounds — but the known natural-product space is enormous: the COCONUT database alone catalogues 738,794 compounds. No lab can test them one by one. We built PhytoRank-Pf to answer a practical question: if a lab could only test a few hundred natural products against P. falciparum, which ones should it test first — and why those?
What it does
PhytoRank-Pf scores and ranks all 738,790 valid COCONUT natural products by priority for experimental testing against Plasmodium falciparum. A random forest model, trained on 31,652 ChEMBL compounds with measured whole-organism activity against P. falciparum (target CHEMBL364), predicts each compound's probability of activity. Predictions are combined into one transparent score:
score = 0.55 × calibrated P(active) + 0.20 × QED + 0.15 × (1 − Lipinski violations/4) + 0.10 × scaffold novelty
Every top candidate comes with a justification card: calibrated probability, QED, Lipinski violations, scaffold novelty, its nearest active ChEMBL neighbour (ECFP4 Tanimoto similarity, with the neighbour's measured median pChEMBL), and its source organism when COCONUT documents one. The presentation list is deduplicated by connectivity (the raw top 50 contains only 22 unique connectivities — stereoisomers still dominate it), giving 100 distinct candidates; 15 of the 100 have a source organism documented in COCONUT (for example ascidiathiazone B, from the marine ascidian Aplidium sp., at rank 5), and the rest are labelled "source organism not documented in COCONUT" — never guessed.
How we built it
Public data only. Training data: ChEMBL activities against P. falciparum (CHEMBL364, IC50/EC50), one label per molecule — active if its median pChEMBL ≥ 6 (sensitivity analyses at 5 and 7). Validation uses a Bemis–Murcko scaffold split (70/15/15, seed 42, disjointness asserted in code), because random splits inflate performance when close analogues appear on both sides. We compared three representations — ECFP4 fingerprints, RDKit physicochemical descriptors, and both combined — with a 300-tree random forest, and calibrated the probabilities (Platt scaling, fitted on the validation fold only). On the held-out scaffold-split test fold (n = 4,748, prevalence 0.607), the combined model reaches ROC-AUC 0.871 and PR-AUC 0.909 (the no-skill PR baseline is the prevalence, 0.607), with precision@100 of 0.98 and Brier score improving from 0.148 to 0.142 after calibration. We report the honest nuances too: the combined model beats ECFP alone by only +0.001 ROC-AUC on this dataset, and enrichment at 1% is saturated (1.61 of a 1.65 theoretical ceiling at this prevalence), so we do not use it as evidence. Screening descriptors for all of COCONUT were recomputed with RDKit and validated against the values COCONUT ships (QED Pearson correlation 0.99993). Tooling: Python, RDKit, scikit-learn, pandas; data under COCONUT (CC0) and ChEMBL (CC BY-SA 3.0) licences; code and full methods report are public in our repository. AI disclosure: this project was built with AI assistance (an AI agent pipeline under human direction); the human team reviewed the methods, verified the results, and is responsible for this submission.
Challenges we ran into
Two stand out. First, the training data is whole-organism ChEMBL data — strains and protocols are mixed, so the model can only learn "resembles compounds reported active in those assays", and we say so wherever we present results. Second, we caught a real bug in our own first screening pass: our scaffold-novelty term compared scaffold strings written by COCONUT against scaffolds generated by RDKit, and the two generators write the same skeleton differently — so compounds were declared "novel" that were not (our v1 top hit was in fact a quinine-family compound whose scaffold is identical to a known active). In numbers: our v1 top-50 novelty read 1.00 and was in reality 0.00; across the top 500 it fell from 1.0 to 0.13. We caught it in our own audit; we recomputed novelty with a single generator on both sides, the corrected column was independently re-verified against the audit file (agreement 1.0000 over the 251 shared identifiers), and we re-ran the ranking: the v2 top 50 shares zero compounds with the flawed v1 list, and its novelty (1.0) is now real. Reassuringly, the quinine family still ranks 61st of 738,790 in the corrected ranking, with no novelty bonus — the model rediscovers a validated antimalarial chemotype without it. The full incident, mechanism and corrected numbers are documented in our methods report.
Accomplishments that we're proud of
A fully documented, reproducible pipeline from public data to an explainable ranked list of 100 distinct natural-product candidates — with validation that respects chemistry (scaffold split, asserted disjoint), calibrated probabilities, per-candidate justification cards, and an audit trail honest enough to include our own caught-and-fixed error, with the correction verified independently before this submission.
What we learned
Scaffold-split validation paints a stricter and more believable picture than random splits. Calibration changes how much a ranking can be trusted, not just its order. And the most valuable check in the project was adversarial: comparing our own intermediate claims against an independent recomputation caught the one error that would have invalidated our headline — two tools that "speak the same language" may still write it differently.
What's next for PhytoRank-Pf
Experimental validation of the top candidates is the obvious next step and is outside this hackathon's scope — our outputs are prioritization hypotheses for expert review, not activity claims. On the modelling side: multi-seed uncertainty estimates, per-assay-strain models where data allow, and extending the organism enrichment beyond COCONUT's documented subset. Our current data also do not encode traditional-use knowledge; linking candidates to ethnobotanical use records is a natural extension we have not yet made.
Built With
- chembl
- coconut
- pandas
- python
- rdkit
- scikit-learn
Log in or sign up for Devpost to join the conversation.