CLINICAL ML / EXPLAINABILITY

Recurra — Thyroid Cancer Recurrence, Estimated Without the Leak

Estimates differentiated thyroid cancer recurrence from 15 features known at diagnosis, explains every estimate, and scores its own explanations. It reports 89% where most work on this dataset reports ~98%, because the 98% comes from a feature recorded after treatment. Not a medical device.

Public demo

0.892 — test PR-AUC, features known at diagnosis (base rate 0.286)

The problem

The public dataset (383 patients) records 'Response to initial therapy', assessed after treatment. Patients with a structural incomplete response recurred 97.8% of the time — solo AUC 0.979 — so a model given that feature is reading the outcome back under a different name.

The approach

Profiling caught the leak before any modelling code was written, so every model is trained under a named feature track: post_treatment (16 features, contains the leak, and the model registry refuses to serve it), at_diagnosis (15, the default) and raw_clinical (10, every derived clinical score removed). Estimates are calibrated, with the operating threshold chosen by F2 because a missed recurrence costs more than a false alarm. Each estimate gets SHAP contributions in clinical feature space, a deterministic narrative with no language model in it, and counterfactuals constrained to features that could differ; the explanations themselves are scored for fidelity, stability, method agreement and a model-randomisation sanity check.

The results

Test PR-AUC 0.892 on the at_diagnosis track against a base rate of 0.286 (0.988 with the leaking feature; 0.785 with every derived score removed). 120 configurations benchmarked with paired significance tests over identical folds; 284 Python tests. Trained on 383 patients from a single public dataset and not clinically validated.

Stack: Python, FastAPI, SQLAlchemy, PostgreSQL 16, SHAP, React, Vite, Docker, Render, Vercel