Problem 3 Fix — Drug Mechanism Matrix v2
What changed
| v1 (original) | v2 (this commit) | |
|---|---|---|
| Annotated drugs | 20 AML-approved/registrational | 32 |
| Clinical-filter drugs covered | 8/20 (40%) | 20/20 (100%) |
| Patient-deficit axes wired | 4 (FLT3, IDH1, IDH2, MENIN_HOX) | 7 (+ RAS_MAPK, TP53_PATHWAY, SPLICEOSOME) |
| Mutation features → deficit axis | 5 | 11 |
| BeatAML patients with ≥1 targetable deficit | 308 / 613 | 418 / 613 |
Added drugs (12 total)
Annotated via FDA labels + AML clinical-trial literature (per drug ~30-min
writeup in scripts/annotate_missing_drugs.py with notes in notes column).
| drug_id | Primary target(s) | AML use | Black-box toxicity |
|---|---|---|---|
trametinib |
MEK1/2 | FLT3-ITD overlay (RAS-MAPK parallel block) | — |
selumetinib |
MEK1/2 (weaker) | Research | — |
ruxolitinib |
JAK1/2 | Post-MPN secondary AML | Myelosuppression |
sorafenib |
FLT3/RAF/VEGFR multikinase | Historical FLT3 off-label | Hand-foot syndrome |
dasatinib |
BCR-ABL/SRC/c-KIT | Ph+AML, c-KIT-mut | Pleural effusion |
imatinib |
BCR-ABL | Rare (BCR-ABL+ AML) | — |
nilotinib |
BCR-ABL 2nd-gen | Rare (BCR-ABL+ AML) | QT prolongation |
ponatinib |
pan-TKI, FLT3 | Limited AML role | Arterial thrombosis |
crenolanib |
FLT3 (ITD + TKD) | Phase 3 R/R AML | Hepatotoxicity |
crizotinib |
MET/ALK | Alert-only (MET-ampl resistance) | — |
alisertib |
Aurora-A kinase | Phase 2/3 R/R AML | Myelosuppression |
pacritinib |
JAK2/FLT3/IRAK1 | Research | Mild QT |
Added mutation → target-axis mappings
The patient deficit derivation now maps these mutations to mechanism axes:
_MUT_TO_TGT = {
"mut_FLT3": "tgt_FLT3",
"mut_IDH1": "tgt_IDH1",
"mut_IDH2": "tgt_IDH2",
"mut_NPM1": "tgt_MENIN_HOX",
"mut_KMT2A": "tgt_MENIN_HOX",
# --- v2 additions ---
"mut_NRAS": "tgt_RAS_MAPK", # → trametinib/selumetinib/sorafenib
"mut_KRAS": "tgt_RAS_MAPK",
"mut_PTPN11": "tgt_RAS_MAPK", # SHP2 → RAS activation
"mut_TP53": "tgt_TP53_PATHWAY", # no drug yet; flags deficit for future
"mut_SRSF2": "tgt_SPLICEOSOME",
"mut_SF3B1": "tgt_SPLICEOSOME",
"mut_U2AF1": "tgt_SPLICEOSOME",
}
Added tiebreaker logic
Previous v2 tiebreaker only rewarded annotation count. Now:
tiebreaker = (
0.01 * pair_annot_count # both drugs curated (annotation bonus)
+ 0.01 * pair_axis_any # mechanistic diversity (more axes engaged)
- 0.02 * pair_both_active # same-axis redundancy penalty
)
This penalizes clinically questionable combos (dual-MEKi
Selumetinib+Trametinib, dual-FLT3i Midostaurin+Quizartinib) by 0.6 AUC
units (after 30x scale). Small but distinguishable at argsort ties.
Effect on Week 4 head-to-head
Re-ran with full 20/20 coverage + expanded deficit mapping + redundancy penalty.
| Metric | v2 (before P3) | v3 (after P3) |
|---|---|---|
| FLT3-mut Δ | +11.60 [9.27, 13.85] | +14.44 [11.95, 17.05] |
| FLT3-mut % combo wins | 80.4% | 82.1% |
| Driver-present Δ | +3.33 [0.98, 5.53] | +2.36 [-0.42, 5.23] |
| Driver-present n | 308 | 418 (NRAS/KRAS/PTPN11/TP53/SF3B1… added) |
| Overall Δ | −5.14 | −3.74 |
| % combo wins overall | 30.7% | 42.9% |
FLT3-mut effect strengthened; overall Δ less negative (driver-positive group grew and contributes positive Δ).
Effect on kit demo (Patient 1: NPM1 + FLT3-ITD AR 0.62)
Top-5 recommendations ALL annotated (★) now:
v3 (new):
1.★ Gilteritinib + Venetoclax AUC = 68.8 mech = +1.04
2.★ Quizartinib + Venetoclax AUC = 79.9 mech = +1.04
3.★ Midostaurin + Venetoclax AUC = 82.4 mech = +1.04
4.★ Gilteritinib + Trametinib AUC = 84.3 mech = +1.04 ← NEW
5.★ Gilteritinib + Midostaurin AUC = 86.0 mech = +1.01
Rank 4 is a biologically-motivated new option: FLT3i + MEKi addresses both the FLT3-ITD driver AND the downstream constitutive RAS/MAPK activation typical of FLT3-ITD AML.
Remaining artifact: FLT3-wt patients still see Selu+Tram at #5
For patients with NO targetable driver in our 11-mutation panel, the mech prior contributes ~0 and the combo ranking reverts to MLP-predicted additive AUC. For 69/613 FLT3-wt patients, that surfaces pairs like Selumetinib+Trametinib. This is a model artifact, not a recommendation: we flag it clearly in the manuscript’s limitations section.
Only way to suppress would be:
- Add an “RNA-based BCL2 dependency” feature (so Venetoclax gets credit without mut_BCL2) — requires new RNA signature work
- Add more mutation→target mappings (e.g., SRSF2/KIT → specific axes) but these drugs aren’t available yet
Files touched
src/combo_val/knowledge/drug_mechanism_v1.csv # 20 → 32 rows
src/combo_val/combo/mechanism_prior.py # BEATAML_TO_MECH_ID + _MUT_TO_TGT expanded
scripts/annotate_missing_drugs.py # reproducible curation script
tests/test_mechanism_prior.py # updated for v2 schema
docs/drug_annotation_v2.md # this file
Tests: 86/86 pass. 7 mech-prior tests + demo + Week 4 head-to-head all verified end-to-end.