A four-state ROC card — one curve per model with its AUC, the chance diagonal, and a draggable, keyboard-reachable threshold handle that reads TPR, FPR and the counts behind them at every cutoff.
Preview in your theme
Loading preview…
This component is part of Pro
The install command, prompt and concept map are included with a Pro license — one purchase unlocks every Pro component, forever.
status="ready" · three models on one November holdout, each with its own threshold handle sitting on its maximum-Youden-J point. Drag a curve, or tab to a handle and use the arrow keys — up and down switch model and land on the nearest equivalent false positive rate, so the comparison stays like for like. Colour is never the only channel: each curve carries its own dash pattern and its own marker shape.
Payment fraud · November holdout
Gradient boosting v7 AUC 0.910 · Logistic baseline AUC 0.792 · Rules engine AUC 0.651. True positive rate against false positive rate on a square plot; the dotted diagonal is chance, AUC 0.500, and a curve nearer the top-left corner separates the classes better. Exact values follow in the data table.
Drag a curve, or tab to its handle: left and right arrows step the threshold, up and down switch model, Page Up and Page Down move in bigger steps, Home and End jump to the ends of the curve.
3 curves on the unit square · Gradient boosting v7 AUC 0.910, Logistic baseline AUC 0.792, Rules engine AUC 0.651 · the dotted diagonal is chance, AUC 0.500; a curve nearer the top-left corner separates the classes better · Exact values follow in the data table. Each curve lists up to 12operating points, evenly spaced by rank, plus the point of maximum Youden J; every point in between is reachable by moving that curve's threshold handle with the arrow keys.
One model, with the class balance attached · 412 fraudulent payments among 24,000, so the readout turns the two rates into the counts an on-call rota argues about — how many frauds this cutoff catches, how many false alarms it costs, and the precision that follows. With a single curve there is nothing to switch to, so up and down step the threshold under the plain ARIA slider map.
Payment fraud · picking the cutoff
Gradient boosting v7 AUC 0.910. True positive rate against false positive rate on a square plot; the dotted diagonal is chance, AUC 0.500, and a curve nearer the top-left corner separates the classes better. Exact values follow in the data table.
Drag a curve, or tab to its handle: left and right arrows step the threshold, up and down step it too, Page Up and Page Down move in bigger steps, Home and End jump to the ends of the curve.
1 curve on the unit square · Gradient boosting v7 AUC 0.910 · the dotted diagonal is chance, AUC 0.500; a curve nearer the top-left corner separates the classes better · Exact values follow in the data table. Each curve lists up to 12operating points, evenly spaced by rank, plus the point of maximum Youden J; every point in between is reachable by moving that curve's threshold handle with the arrow keys.
Coarse grid, showBest={false} · the same model shipped as seven operating points. The reported AUC is 0.910, from the full threshold set; the six straight chords drawn here enclose 0.854, because a chord cuts the corner off a curve — and the card says so instead of printing a figure nobody else will reproduce. The max-J ring is off here: Youden weights a missed fraud and a false alarm equally, which almost no deployment does.
Payment fraud · coarse threshold grid
Gradient boosting v7 (7 cutoffs shipped) AUC 0.910. True positive rate against false positive rate on a square plot; the dotted diagonal is chance, AUC 0.500, and a curve nearer the top-left corner separates the classes better. Exact values follow in the data table.
Drag a curve, or tab to its handle: left and right arrows step the threshold, up and down step it too, Page Up and Page Down move in bigger steps, Home and End jump to the ends of the curve.
Gradient boosting v7 (7 cutoffs shipped) reports AUC 0.910 but the 7 operating points drawn here enclose 0.845. The reported figure is the one shown; a coarse threshold grid always reads lower, because straight segments cut the corners off a curve.
1 curve on the unit square · Gradient boosting v7 (7 cutoffs shipped) AUC 0.910 · the dotted diagonal is chance, AUC 0.500; a curve nearer the top-left corner separates the classes better · Exact values follow in the data table. Each curve lists up to 12operating points, evenly spaced by rank, plus the point of maximum Youden J; every point in between is reachable by moving that curve's threshold handle with the arrow keys.
2,400 operating points · past maxDots (40 by default) the per-point glyphs stop, because at that density they fuse into a band and hide the curve. Nothing leaves the geometry: the line still runs through every cutoff, the handle still snaps to every cutoff, and the card names what it stopped drawing. Page Up and Page Down move in 5% jumps, which is how you cross 2,400 thresholds without 2,400 keystrokes.
Payment fraud · full threshold set
Gradient boosting v7 (every cutoff) AUC 0.910. True positive rate against false positive rate on a square plot; the dotted diagonal is chance, AUC 0.500, and a curve nearer the top-left corner separates the classes better. Exact values follow in the data table.
Drag a curve, or tab to its handle: left and right arrows step the threshold, up and down step it too, Page Up and Page Down move in bigger steps, Home and End jump to the ends of the curve.
Gradient boosting v7 (every cutoff) carries 2,400 operating points, past the 40 this card dots individually. The line still runs through every one of them and the handle still snaps to every one of them — only the markers stop, because at that density they fuse into a band and hide the curve.
1 curve on the unit square · Gradient boosting v7 (every cutoff) AUC 0.910 · the dotted diagonal is chance, AUC 0.500; a curve nearer the top-left corner separates the classes better · Exact values follow in the data table. Each curve lists up to 12operating points, evenly spaced by rank, plus the point of maximum Youden J; every point in between is reachable by moving that curve's threshold handle with the arrow keys.
Awkward evaluations · a model shipped at one cutoff is still a point plus its two assumed corners, drawn dashed. A queued model that returned nothing keeps its legend row and says so, rather than vanishing as though nobody asked. A ranking read upside down sits under the diagonal and the card names the likely cause. The unvalidated feed has a NaN threshold, a rate above 1, a rate below 0 — all three dropped and counted — plus a step backwards in TPR that no single ROC can make. The last curve only covers the low-FPR regime, so its closure to (1, 1) is dashed and disclosed. Its 66-character name elides on the plot and stays whole in the legend and the table.
Awkward evaluations
Champion (one cutoff shipped) AUC 0.777 · Ranker with the score sign flipped AUC 0.173 · nightly-batch-holdout-export-2024-11-18 (all segments, unvalidated) AUC 0.763 · Low-FPR regime only AUC 0.854. True positive rate against false positive rate on a square plot; the dotted diagonal is chance, AUC 0.500, and a curve nearer the top-left corner separates the classes better. 3 operating points could not be placed. Exact values follow in the data table.
Challenger v3 · evaluation queued· no operating points
Drag a curve, or tab to its handle: left and right arrows step the threshold, up and down switch model, Page Up and Page Down move in bigger steps, Home and End jump to the ends of the curve.
Champion (one cutoff shipped), Low-FPR regime only do not reach both corners of the square, so the dashed segments close them onto (0, 0) and (1, 1). Those corners are geometry, not measured thresholds — no handle stops there, and the area they add is assumed rather than observed.
Ranker with the score sign flipped sits below the chance diagonal. Check the polarity of the label and the sign of the score — a ranking read upside down draws exactly this, and flipping it would give AUC 0.827.
nightly-batch-holdout-export-2024-11-18 (all segments, unvalidated) steps down in TPR 1 time. A real ROC cannot do that — both rates are monotone in the cutoff — so these points are not one curve. They are drawn exactly as given rather than sorted into a shape the data never had.
3 operating points were dropped: a rate outside 0–1, or a threshold or rate that was not a finite number.
4 curves on the unit square · Champion (one cutoff shipped) AUC 0.777, Ranker with the score sign flipped AUC 0.173, nightly-batch-holdout-export-2024-11-18 (all segments, unvalidated) AUC 0.763, Low-FPR regime only AUC 0.854 · the dotted diagonal is chance, AUC 0.500; a curve nearer the top-left corner separates the classes better · 3 operating points could not be placed · Exact values follow in the data table. Each curve lists up to 12operating points, evenly spaced by rank, plus the point of maximum Youden J; every point in between is reachable by moving that curve's threshold handle with the arrow keys.
Low-FPR regime only — AUC 0.854, 15 operating points
4.6
0.000
0.000
0.000
Low-FPR regime only
3.6257
0.021
0.000
0.021
Low-FPR regime only
3.1569
0.060
0.001
0.059
Low-FPR regime only
2.8598
0.104
0.002
0.102
Low-FPR regime only
2.5758
0.165
0.005
0.160
Low-FPR regime only
2.4113
0.209
0.008
0.201
Low-FPR regime only
1.9425
0.366
0.026
0.340
Low-FPR regime only
1.6483
0.481
0.050
0.431
Low-FPR regime only
1.4231
0.570
0.077
0.493
Low-FPR regime only
1.209
0.652
0.113
0.539
Low-FPR regime only
0.6892
0.819
0.245
0.574 (maximum)
Low-FPR regime only
0.3968
0.886
0.346
0.540
status="empty" · a valid contract with no operating points at all, worded so it cannot be mistaken for a failed fetch.
Payment fraud · November holdout
fraudulent payments against legitimate payments, at every score cutoff
No operating points to plot
A ROC needs the rates at each score cutoff — the (fpr, tpr, threshold) triples an evaluation job emits, not a single confusion matrix and not raw scores.
status="loading" · a square skeleton holding the plot box and a concave curve silhouette over its diagonal, aria-hidden, honouring prefers-reduced-motion, with no timer involved.
Payment fraud · November holdout
fraudulent payments against legitimate payments, at every score cutoff
Loading ROC curves
status="error" · the fetch failed. Try again only appears when onRetry is passed, and clicking it flips the card to ready.
Payment fraud · November holdout
fraudulent payments against legitimate payments, at every score cutoff