A classifier doesn't output "positive" or "negative" — it outputs a continuous score. Turning that score into a decision requires a threshold, and every evaluation metric you report (accuracy, precision, recall, F1, ROC AUC) is itself governed by hyperparameters: where you place that threshold, how you weight false positives against false negatives, and what curve you optimise against.
This scene shows a batch of scored samples as a 3D point cloud: the upper lane holds truly positive samples, the lower lane holds truly negative ones, and each point's position along the depth axis is its model score. A translucent plane marks your decision threshold — everything to its right is classified "positive."
On heavily imbalanced datasets, accuracy can look excellent while the model is essentially useless — a classifier that always predicts "negative" on a 1%-positive dataset is 99% accurate but has zero recall. That's exactly why precision, recall, F-β and ROC/PR AUC exist as separate hyperparameterised metrics.
A 3D confusion-matrix point cloud and a live ROC / precision-recall curve show exactly how the decision threshold, class balance, class separation and F-β weighting reshape every headline evaluation metric.
Every sample's score places it left or right of a movable threshold plane, colouring it as a true positive, false positive, true negative or false negative — and the ROC/PR curve traces how those counts trade off as the threshold sweeps end to end.
Drag the threshold slider and watch accuracy, precision, recall, F1 and F-β update instantly. Change class separation and balance to regenerate the dataset, and switch the curve panel between ROC and Precision–Recall.
ROC AUC is threshold-independent, but it can look deceptively strong on imbalanced data — that's why practitioners often pair it with Precision-Recall AUC or a task-specific F-β when positives are rare.