Scientific MVP for lung adenocarcinoma target prioritization.
OncoTarget combines public disease-target evidence, a lightweight biomedical knowledge graph, TCGA-LUAD-derived NGS features, GraphSAGE ranking, a non-graph MLP baseline, deterministic GraphRAG evidence retrieval, and grounded LLM synthesis. It is intended to organize research evidence and generate hypotheses, not to make autonomous biological, clinical, regulatory, or investment decisions.
- Disease: lung adenocarcinoma
- Disease ID:
MONDO_0005061 - Candidate universe: top 100 Open Targets associations
- Graph: 1 disease node, 100 target nodes, 100 disease-target edges, 758 directed STRING target-target edges in the validated run
- Model task: regress the Open Targets association score
- Main interface: cleaned end-to-end notebook
- Retrieve Open Targets associations for
MONDO_0005061. - Build a heterogeneous graph with disease and target nodes.
- Add STRING functional target-target relationships in both directions.
- Compute four TCGA-LUAD NGS features for each target.
- Split targets into 70 train, 15 validation, and 15 test nodes using seed
42. - Fit the final scaler only on training targets.
- Train GraphSAGE and an NGS-only MLP baseline.
- Evaluate on the held-out test labels.
- Rank targets by GraphSAGE predicted association score.
- Retrieve traceable evidence for GraphRAG explanations.
- Expose scoring, neighbour retrieval, and explanation through FastAPI and MCP.
| Source | Contribution |
|---|---|
| Open Targets | Candidate targets, disease-target edges, association-score label |
| STRING | High-confidence human functional associations among selected targets |
| cBioPortal TCGA-LUAD | Processed somatic mutation and discrete GISTIC CNA evidence |
| UCSC Xena TCGA-LUAD | Primary-tumour and normal-tissue RNA expression matrix |
Raw mutation and CNA downloads are not included in this repository.
Node types:
disease: lung adenocarcinomatarget: 100 genes/proteins from Open Targets
Edge types:
(disease, associated_with, target)from Open Targets(target, functionally_interacts_with, target)from STRING
STRING relationships are functional associations, not proof of direct physical binding or causality. They are stored bidirectionally because PyTorch Geometric message passing follows stored edge directions.
Each target has four model input features:
mutation_frequency: unique mutation-profiled samples with at least one mutation in the gene divided by all mutation-profiled samples.amplification_frequency: unique CNA-profiled samples with GISTIC+2divided by all CNA-profiled samples.deep_deletion_frequency: unique CNA-profiled samples with GISTIC-2divided by all CNA-profiled samples.expression_change: mean primary-tumour log2 expression minus mean normal-tissue log2 expression.
Expression alias resolution keeps canonical graph symbols while reading historical expression labels:
| Canonical symbol | Expression matrix label |
|---|---|
| STN1 | OBFC1 |
| KMT2C | MLL3 |
| TUBB4A | TUBB4 |
| TUBB4B | TUBB2C |
GraphSAGE:
4 input features -> 16 hidden values -> 8-dimensional embedding -> 1 score
NGS-only MLP baseline:
4 input features -> 16 hidden values -> 8-dimensional embedding -> 1 score
The baseline uses the same NGS features but ignores STRING edges. This isolates the value of graph neighbourhood context.
- Open Targets score is the label, not an input feature.
- Test labels are not used for training or early stopping.
- Validation labels select the best epoch.
- The final scaler is fitted only on training targets.
- The test is transductive: test-node features and graph topology are available during message passing, but test labels are held out.
Validated fixed-split test results:
| Model | MAE | RMSE | Spearman | Precision@5 |
|---|---|---|---|---|
| NGS-only MLP | 0.0811 | 0.1095 | 0.2071 | 0.40 |
| GraphSAGE | 0.0660 | 0.0931 | 0.6679 | 0.60 |
GraphSAGE improved all reported metrics on this 15-target test split. Treat this as prototype evidence, not a definitive model comparison.
The target-ranking table combines canonical identifiers, raw NGS values, actual Open Targets score, GraphSAGE prediction, split label, and absolute error.
For a selected target, GraphRAG retrieval returns:
- disease and target identifiers
- GraphSAGE prediction and data split
- Open Targets association score
- mutation, amplification, deletion, and expression evidence
- strongest STRING functional neighbours
- evidence sources
- scientific limitations
The LLM uses this evidence package only for synthesis. Deterministic guardrails preserve mandatory limitations and future validation steps.
Service functions:
score_target(target_symbol)find_neighbors(target_symbol, maximum_neighbors=5)explain_target(target_symbol)
FastAPI routes:
GET /healthGET /targets/{target_symbol}/scoreGET /targets/{target_symbol}/neighborsPOST /targets/{target_symbol}/explain
MCP tools:
score_targetfind_neighborsexplain_target
pip install -r requirements.txtFor LLM explanations, provide the key outside the repository:
export GROQ_API_KEY=...On Windows PowerShell:
$env:GROQ_API_KEY = "..."Open and run:
notebooks/oncotarget_luad_end_to_end.ipynb
Recommended demo flow:
- Open the notebook and review the scope.
- Show the graph schema and four NGS feature definitions.
- Show the fixed split and training-only scaler.
- Show the model comparison table.
- Show the EGFR example in
examples/validated_egfr_graphrag_example.json. - Show service functions and FastAPI/MCP wrappers.
- Candidate universe starts from the top 100 Open Targets associations.
- The label is an association score, not experimental truth.
- Only one disease and one fixed split are reported.
- The test is small and transductive.
- STRING edges are functional associations and may be indirect.
- Druggability, safety, dependency, tractability, modality, and clinical evidence are not included.
- LLM output requires grounding controls and scientific review.
Immediate improvements include repeat-seed evaluation, exact dependency pinning, artifact versioning, cleaner standalone service packaging, and automated smoke tests. Scientific upgrades include broader candidate universes, link prediction, DepMap dependency evidence, synthetic-lethality hypotheses, tractability, safety, and experimental validation.
