Healthcare AI Learning
Back to Tools

Tool · Module 3

Diagnostic Metrics Playground

A cohort of 1,000 patients. Set how common the condition is and how the model behaves on cases and non-cases, then read what a positive result actually means to the clinician who receives it.

Controls
5.0%

Share of the 1,000 patients who actually have the condition.

90%

Of patients who have the condition, the share the model flags.

90%

Of patients who do not have the condition, the share the model correctly leaves alone.

Per 1,000 patients
Has conditionDoes notTotal
Model positive45 true positives95 false positives140
Model negative5 false negatives855 true negatives860
Total509501000

Positive predictive value

32.1%

Of 140 alerts, 45 are real.

Negative predictive value

99.4%

Of 860 patients not flagged, 855 truly do not have the condition; 5 still do.

False alarms

95

Per 1,000 patients screened.

Alerts per confirmed case

3.1

Workload each true case costs the team.

The 1,000-person display is a deterministic integer allocation: whole patients are assigned to each cell so every row, column and total reconciles exactly. PPV, NPV and the alert counts are computed from those same integer counts, shown to one decimal place. Because whole patients cannot be split, the realised rates can differ from the sliders. At moderate prevalence the difference is small, but at very low prevalence it can be substantial: at the lowest prevalence setting the "has condition" column holds a single patient, so a requested sensitivity of 50% is realised as 100%. The sliders always state the requested rates; the table always shows the realised integer counts. Nothing here is simulated or random.

Interpretation challenge

Leave sensitivity and specificity at 90%. Set prevalence to 20% and note the PPV, then move prevalence to 2%, changing nothing else. PPV falls sharply. A vendor says this means the model "degraded" when it moved from a high-acuity ward to a general ward. What is the more accurate reading?