Skip to the content.

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:

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.