Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Metabolic Profiling & Drug-Response Prediction in Cancer Cell Lines

An end-to-end machine-learning pipeline that asks whether a cancer cell line's metabolism alone carries enough signal to (1) identify its cancer type and (2) predict how it will respond to drugs — and then uses that signal to surface lineage-specific drug candidates.

The pipeline independently surfaced Belinostat, an FDA-approved peripheral T-cell lymphoma therapy, as a top candidate for the Lymphoid lineage — a known positive control that validates the approach — and nominated NSC319726 as a follow-up candidate for lymphoid application.

Independent graduate research project. Data: DepMap metabolomics + GDSC1/GDSC2 drug response.


Headline results

Result Value
Cell lines modeled (complete 225-metabolite panel, lineages ≥10 lines) 902 across 20 lineages
Drugs modeled (≥50 observed AUC values) 478
Best lineage classification (Elastic Net F1) Lymphoid 0.93, Myeloid 0.92
Drugs with a usable metabolite→AUC signal (R² > 0.10 & RMSE < 0.10) 60 of 478 (12.6%)
Convergent top drugs (LASSO ∩ Random Forest) Methotrexate, APO866, Molibresib — 2 of 3 literature-backed for metabolic mechanism
Lineage with most candidate drug-pairs Lymphoid (consistent with its metabolic distinctiveness)

All numbers reproduce from a clean run of the notebook (random seed fixed).


The question, in one diagram

            225 scaled metabolites per cell line
                          │
        ┌─────────────────┴──────────────────┐
        ▼                                     ▼
  CLASSIFICATION                         REGRESSION
  Which lineage?                         Which drug response (AUC)?
  ┌──────────────┐                       ┌──────────────┐
  │ OvR RandomFor│                       │ LASSO        │
  │ Elastic Net  │                       │ RandomForest │
  └──────┬───────┘                       └──────┬───────┘
         ▼                                       ▼
  per-lineage                             per-drug
  consensus fingerprint  ◀── correlate ──▶ consensus fingerprint
         │   (which metabolites align a drug to a lineage?)   │
         └───────────────────┬───────────────────────────────┘
                             ▼
            Lineage-specific candidate drugs  +  imputed AUC for untested lines

Why this design

Each task pairs a non-linear model (Random Forest) with a linear, sparse model (Elastic Net for classification, LASSO for regression). The two are fused into a consensus metabolic fingerprint — a per-lineage or per-drug vector of metabolite importances — where each model is weighted by its own validated performance (test F1 for classification, R² for regression). A model only shapes a fingerprint to the degree it can actually predict that target. This is the methodological core of the project, and it's what makes the drug→lineage correlation step meaningful: both fingerprints live in the same 225-metabolite space, so correlating them asks "does this drug's mechanism engage the same metabolites that define this cancer type?"

What the pipeline does, stage by stage

  1. Preprocess — keep cell lines with a complete 225-metabolite panel, standard-scale metabolites, drop lineages with <10 lines → 902 lines / 20 lineages. Keep drugs with ≥50 AUC values → 478 drugs.
  2. Classify — One-vs-Rest Random Forest + multinomial Elastic Net predict lineage_1 from metabolites; extract per-lineage consensus fingerprints.
  3. Regress — per-drug LASSO + Random Forest predict AUC from metabolites; extract per-drug consensus fingerprints. Most drugs show little signal; a minority show real, literature-consistent signal.
  4. Correlate & surface — align drug fingerprints to lineage fingerprints; candidates are drugs that are both fingerprint-aligned (corr > 0.30) and show greater sensitivity in that lineage (lower AUC than the drug's global median).
  5. Impute & validate — predict AUC for untested cell lines via the R²-weighted consensus; filter to model-agreeing, sensitive Lymphoid calls. Belinostat surfaces as the highest-confidence candidate.

Limitations

  • Belinostat was in the training data. It is used as a positive control, not a de-novo discovery: a known lymphoma drug should rank highly, and it did. That is the validation, not a claim of novelty.
  • Most drugs are not predictable from metabolomics alone. Only ~13% clear a modest R²/RMSE bar. The contribution is isolating the minority with real signal.
  • Classification rests mostly on Elastic Net. Random Forest alone classifies only a handful of lineages well, and the consensus weighting reflects this.
  • Single-omic, cell-line data. Findings are hypothesis-generating. Clinical relevance would require orthogonal data (genomics, expression) and validation.
  • Metabolite scaling is fit on the full modeling set. A better approach would be to fit the scaler inside each CV fold. The effect here is small (centering/ scaling only) but it is something I would correct going forward.

Repository structure

metabolomic-drug-response/
├── README.md
├── requirements.txt
├── data/
│   ├── README.md                        # how DepMap/GDSC export was obtained
│   └── meta_gcd1_and_2.csv              # the export used in this analysis
├── notebooks/
│   └── metabolomic_drug_response.ipynb  # brief narrative of analysis, demonstrating the pipeline end to end
├── src/
│   ├── data_prep.py                     # load, scale, filter
│   ├── classification.py                # OvR RF + Elastic Net + consensus fingerprints
│   ├── regression.py                    # per-drug LASSO + RF (+ result caching)
│   └── discovery.py                     # drug↔lineage correlation, candidates, AUC imputation
├── results/                             # cached drug models (git-ignored, regenerated on run)
└── report/
    └── metabolic_drug_response_report.pdf  # 26-page written analysis with further findings and figures

Reproducing

pip install -r requirements.txt

The classification stage runs in a couple of minutes. The per-drug regression loop (478 drugs × 2 models) is the expensive step and is cached to disk on first run, so reruns are fast. Delete results/drug_models.pkl to force a full recompute from scratch.

Data

Metabolomics and drug-response data are from the DepMap portal (Broad Institute) and GDSC (Sanger). The raw export used for analysis is included; data/README.md documents the exact custom-download settings so anyone can regenerate the identical input. For this project, I navigated to DepMap's 'Access Current Release' and clicked the 'Custom Downloads' tab. I checked 'Merge into a single file', 'Metabolomics', 'Drug Sensitivity AUC (Sanger GDSC1)', and 'Drug Sensitivity AUC (Sanger GDSC2)' , leaving the remain options at their default.

Report

An extensive written report detailing methodology, including additional data tables, figures, and analysis is included as report/metabolic_drug_response_report.pdf. The notebook notebook/metabolomic_drug_response.ipynb is an overview of the pipeline, while the report showcases the step-by-step investigation of the data and further findings.

About

ML pipeline linking cancer cell-line metabolomics to drug response (DepMap + GDSC).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages