{
  "date": "2026-10-13",
  "models": [
    {
      "id": "m4-transcript-geometry-v2",
      "title": "M4 \u00b7 transcript geometry v2",
      "metric": "Average precision / PR-AUC",
      "trainingGenes": 9866,
      "validationGenes": 2467,
      "evaluatedGenes": 11718,
      "evaluatedRows": 275329,
      "rows": [
        {
          "method": "M4 geometry v2",
          "score": 0.9992565458423528,
          "delta": null,
          "ci": null
        },
        {
          "method": "legacy M4 on corrected inputs",
          "score": 0.9990436231436519,
          "delta": 0.0002129226987008792,
          "ci": [
            -0.00023422461008947154,
            0.0005957804204951745
          ]
        },
        {
          "method": "training prevalence",
          "score": 0.5682038579299674,
          "delta": 0.4310526879123854,
          "ci": [
            0.42428213660651554,
            0.43768624327080025
          ]
        },
        {
          "method": "50-nt annotation rule",
          "score": 0.9965295261093051,
          "delta": 0.0027270197330476753,
          "ci": [
            0.0020309620431353563,
            0.0033728161000127804
          ]
        },
        {
          "method": "55-nt rule",
          "score": 0.9961719722088637,
          "delta": 0.0030845736334891294,
          "ci": [
            0.0024450565497489405,
            0.003805180930377095
          ]
        },
        {
          "method": "scaled logistic",
          "score": 0.9987417879719583,
          "delta": 0.0005147578703944555,
          "ci": [
            3.8891452621726826e-05,
            0.0009457668026317643
          ]
        },
        {
          "method": "ExtraTrees",
          "score": 0.9994129349212053,
          "delta": -0.00015638907885251463,
          "ci": [
            -0.0005692630057323747,
            0.00020790464909000686
          ]
        }
      ],
      "runtime": [
        {
          "method": "m4-transcript-geometry-v2",
          "warmMedianMs": 0.17981249999998727,
          "warmP95Ms": 0.2173168499999156
        },
        {
          "method": "legacy M4",
          "warmMedianMs": 0.2947705000000411,
          "warmP95Ms": 0.3346233999999781
        }
      ],
      "change": "Per-candidate containing transcripts, correct strand-local exon indices, UTR-inclusive spliced stop coordinates and complete split stop codons. Excludes 28,935 human training/validation candidates and 15,739 mouse test candidates without complete containing annotation; accepted human and mouse rows have zero invalid position fractions.",
      "conclusion": "AP 0.9993 on fresh mouse annotations. Higher than the declared rule and logistic baselines; no established improvement over legacy M4 or ExtraTrees. This is annotation transfer, not experimental NMD accuracy.",
      "extractionNote": "",
      "source": "https://www.gencodegenes.org/mouse/",
      "limitations": [
        "Mouse distribution shift",
        "Shared annotation methodology and possible orthology; not independent annotation provenance",
        "Labels and stop geometry share their definition",
        "No experimental NMD or therapeutic efficacy claim",
        "Revised M4 scores are uncalibrated annotation-class scores. Human annotation development was already examined historically; the fresh test is mouse."
      ]
    },
    {
      "id": "m5-sequence-context-v2",
      "title": "M5 \u00b7 sequence context v2",
      "metric": "Spearman correlation",
      "trainingGenes": 2935,
      "validationGenes": 787,
      "evaluatedGenes": 759,
      "evaluatedRows": 0,
      "rows": [
        {
          "method": "M5 context v2",
          "score": 0.6030570249081567,
          "delta": null,
          "ci": null
        },
        {
          "method": "legacy M5",
          "score": 0.21680003902071823,
          "delta": 0.3862569858874385,
          "ci": [
            0.2915166287671966,
            0.4891484256524111
          ]
        },
        {
          "method": "Kozak-only ridge",
          "score": 0.4179175873303885,
          "delta": 0.18513943757776824,
          "ci": [
            0.09905293701353461,
            0.27031250185086275
          ]
        },
        {
          "method": "UTR length/GC ridge",
          "score": 0.2486195559735653,
          "delta": 0.3544374689345914,
          "ci": [
            0.2747478451780107,
            0.4430612295296167
          ]
        },
        {
          "method": "all-feature ridge",
          "score": 0.5717037269197899,
          "delta": 0.031353297988366835,
          "ci": [
            -0.005920478771414163,
            0.0662536541134725
          ]
        },
        {
          "method": "ExtraTrees",
          "score": 0.6027338100274829,
          "delta": 0.00032321488067377224,
          "ci": [
            -0.02150481978633775,
            0.019123623354465418
          ]
        }
      ],
      "runtime": [
        {
          "method": "m5-sequence-context-v2",
          "warmMedianMs": 0.22143750000003237,
          "warmP95Ms": 0.25654009999996896
        },
        {
          "method": "legacy M5",
          "warmMedianMs": 0.32700000000007723,
          "warmP95Ms": 0.3752563999999792
        }
      ],
      "change": "Trained on HeLa using uORF features plus main-ORF Kozak context, transcript lengths, normalized folding energy and sequence motifs. BJ study families are disjoint from HeLa; test genes also exclude earlier M5 development and the examined HeLa holdout.",
      "conclusion": "Spearman 0.603 on 759 fresh BJ genes. Higher than legacy M5 (0.217) and Kozak-only (0.418); no established superiority over all-feature ridge or ExtraTrees.",
      "extractionNote": "Full feature extraction took 205.5 seconds for 4,600 transcripts. 41 of 800 frozen test genes lacked BJ outcomes and were excluded under the declared finite-outcome rule.",
      "source": "https://doi.org/10.1038/s41587-025-02712-x",
      "limitations": [
        "Published aggregate, not independent lab execution",
        "Same compendium processing pipeline",
        "Conditional gene-bootstrap uncertainty; no per-study response rows",
        "No therapeutic construct or patient outcome claim",
        "Training source and representation both changed; gains cannot be attributed solely to added features. BJ aggregate processing shares the published pipeline."
      ]
    }
  ],
  "protocol": {
    "version": "separate-m4-m5-retraining/2",
    "seed": 20261013,
    "frozenBeforeRetrainingAndNewHoldoutEvaluation": true,
    "m4": {
      "modelId": "m4-transcript-geometry-v2",
      "trainingSource": "GENCODE human v50",
      "validationSplit": "SHA256 stable human gene ID, first 80% training, final 20% validation; no test tuning",
      "freshHoldout": "GENCODE mouse M39 chromosome annotation; newly downloaded, never used in fitting or selection",
      "endpoint": "Exon annotation class exclusive to NMD versus protein-coding transcripts; not measured NMD",
      "geometry": "Choose a containing transcript independently for EACH candidate; transcript-local index, spliced-exon stop coordinate, all stop fragments; refuse incomplete annotation",
      "selection": "Validation average precision among three fixed LightGBM configurations (15/31/63 leaves, 200 trees, lr .05); freeze before mouse extraction",
      "baselines": [
        "legacy M4",
        "training prevalence",
        "50-nt annotation rule",
        "55-nt rule",
        "scaled logistic",
        "ExtraTrees"
      ],
      "limitations": [
        "Mouse distribution shift",
        "Shared annotation methodology and possible orthology; not independent annotation provenance",
        "Labels and stop geometry share their definition",
        "No experimental NMD or therapeutic efficacy claim"
      ]
    },
    "m5": {
      "modelId": "m5-sequence-context-v2",
      "trainingSource": "Published HeLa TE aggregate, DOI 10.1038/s41587-025-02712-x",
      "freshHoldout": "Published BJ TE aggregate; BJ source-study indices audited disjoint from HeLa; outcomes not inspected before protocol",
      "geneSelection": "Eligible sequences UTR 3..1000, canonical CDS AUG, consistent lengths. Exclude all 2500 legacy development symbols and 1000 prior HeLa evaluation stable IDs from fresh test. First 800 remaining genes by SHA256('m5-v2-test:'+stableID) held out from all fitting. Remaining genes sorted SHA256('m5-v2-dev:'+stableID), first 3000 train, next 800 validation. Finite training labels only. Test missing outcomes excluded after prediction freeze.",
      "features": "Legacy 15 plus main-ORF Kozak, CDS/3UTR length, normalized folding energy, UTR mono/di/trinucleotide frequencies; all computed from published APPRIS transcript inputs",
      "selection": "Validation Spearman among three fixed LightGBM configurations (15/31/63 leaves, 200 trees, lr .05); no test tuning",
      "baselines": [
        "legacy M5",
        "Kozak-only ridge",
        "UTR length/GC ridge",
        "all-feature ridge",
        "ExtraTrees"
      ],
      "metric": "Spearman rank correlation, no cross-source raw-unit error comparison",
      "limitations": [
        "Published aggregate, not independent lab execution",
        "Same compendium processing pipeline",
        "Conditional gene-bootstrap uncertainty; no per-study response rows",
        "No therapeutic construct or patient outcome claim"
      ]
    },
    "inferenceRuntime": "30 paired warm batch-128 timings; same frozen feature inputs; report median/p95 and feature-extraction separately",
    "uncertainty": "1000 paired gene bootstrap resamples, seed 20261013; two-sided Bonferroni intervals adjusted within each model's baseline family",
    "superiorityRule": "Claim superiority on a stated cohort only when every declared baseline's adjusted delta interval is strictly positive; no guarantee or patentability inference",
    "preservation": "New paths only for model weights and evidence; original weights and historical outputs immutable"
  },
  "pairedRuntime": {
    "m4": {
      "revisionId": "m4-transcript-geometry-v2",
      "batchSize": 128,
      "pairs": 30,
      "threads": 4,
      "timings": {
        "revision": {
          "warmMedianMs": 0.17981249999998727,
          "warmP95Ms": 0.2173168499999156
        },
        "legacy": {
          "warmMedianMs": 0.2947705000000411,
          "warmP95Ms": 0.3346233999999781
        }
      },
      "medianSpeedup": 1.6535120913467685,
      "pairedSpeedupCi95": [
        1.610424568694714,
        1.6977846315717446
      ],
      "rawMilliseconds": {
        "revision": [
          0.21337499999996012,
          0.20604199999985084,
          0.22054199999987922,
          0.18895800000007235,
          0.19849999999999035,
          0.18908400000006154,
          0.1875000000000071,
          0.18662499999999582,
          0.18287499999991574,
          0.1835830000000982,
          0.18687499999980872,
          0.18324999999985714,
          0.18812499999998344,
          0.2690839999999195,
          0.18950000000006462,
          0.1767500000000588,
          0.17191700000007692,
          0.1728330000001499,
          0.17050000000007337,
          0.17325000000001367,
          0.17579200000006345,
          0.1747500000000013,
          0.16987500000009703,
          0.17466700000001723,
          0.17275000000016583,
          0.17262500000003733,
          0.17470799999985687,
          0.17166599999995924,
          0.16954200000007802,
          0.17287500000007228
        ],
        "legacy": [
          0.37887500000000074,
          0.32295900000001154,
          0.3215830000000697,
          0.3441669999999508,
          0.30641700000000327,
          0.30504099999983936,
          0.3018329999999736,
          0.29487500000002775,
          0.2946249999999928,
          0.2927090000000021,
          0.29933300000006824,
          0.2845420000001653,
          0.2910000000000412,
          0.29062500000009983,
          0.3087500000000798,
          0.3042499999998949,
          0.2932909999999733,
          0.2915000000001111,
          0.2946660000000545,
          0.2898330000000726,
          0.2963750000000154,
          0.28883299999993284,
          0.29283300000004786,
          0.2879170000000819,
          0.3189580000000358,
          0.31116599999991834,
          0.2889999999999837,
          0.29004099999996313,
          0.28962499999996005,
          0.29795899999984776
        ]
      },
      "scope": "Model inference only, excludes feature extraction, network and startup; alternating order on same input membership"
    },
    "m5": {
      "revisionId": "m5-sequence-context-v2",
      "batchSize": 128,
      "pairs": 30,
      "threads": 4,
      "timings": {
        "revision": {
          "warmMedianMs": 0.22143750000003237,
          "warmP95Ms": 0.25654009999996896
        },
        "legacy": {
          "warmMedianMs": 0.32700000000007723,
          "warmP95Ms": 0.3752563999999792
        }
      },
      "medianSpeedup": 1.5043736058007342,
      "pairedSpeedupCi95": [
        1.4578898753316833,
        1.6674904057497675
      ],
      "rawMilliseconds": {
        "revision": [
          0.25316699999988757,
          0.2374160000000458,
          0.2547079999999369,
          0.23687499999991424,
          0.229542000000027,
          0.2240420000001464,
          0.2254999999999896,
          0.34183400000009634,
          0.2574589999999599,
          0.2312500000001272,
          0.23391700000008342,
          0.22095899999996504,
          0.18970900000003788,
          0.19924999999987314,
          0.1722499999998739,
          0.1717909999998657,
          0.1595830000000742,
          0.22916699999986356,
          0.1627079999999559,
          0.16266700000011625,
          0.2219160000000997,
          0.1595830000000742,
          0.21291700000003466,
          0.16024999999997291,
          0.20870900000002912,
          0.16254199999998775,
          0.2042089999998442,
          0.2406669999999167,
          0.18720800000004978,
          0.25541699999998
        ],
        "legacy": [
          0.40229200000019283,
          0.35441699999982923,
          0.3726669999999377,
          0.3313750000000226,
          0.3636249999998675,
          0.3254580000000562,
          0.34079099999995144,
          0.32362500000004957,
          0.3681669999999748,
          0.3462920000001368,
          0.32854200000009826,
          0.3498330000000216,
          0.3205829999999299,
          0.33641699999997776,
          0.3092909999999893,
          0.3213339999998954,
          0.31837499999998187,
          0.3091250000000212,
          0.3773750000000131,
          0.34120800000003726,
          0.305541999999992,
          0.30883399999992456,
          0.30408300000006605,
          0.30237499999996587,
          0.305541999999992,
          0.30837499999991635,
          0.30362499999991854,
          0.3487920000000422,
          0.3082500000000099,
          0.3389999999998672
        ]
      },
      "scope": "Model inference only, excludes feature extraction, network and startup; alternating order on same input membership"
    }
  },
  "overallSuperiorityEstablished": false,
  "sourceGeometryAudit": {
    "candidate_exons": 291068,
    "no_complete_containing_transcript": 15739,
    "accepted_exons": 275329,
    "accepted_genes": 11718,
    "invalid_position_fractions": 0,
    "fullFeatureTableExactReplay": true
  },
  "m5StableGeneIdAudit": {
    "legacySymbols": 2500,
    "legacyStableIdsMappedFromOriginalGtf": 2503,
    "frozenTestOverlapWithLegacyStableIds": [],
    "completedAfterEvaluation": true,
    "selectionChanged": false
  }
}