Skip to content

← Metrics & Evaluation step 4 of 7

Medium Primitives

AUC-ROC

ROC AUC measures how well scores rank positive examples above negative examples, without choosing a classification threshold. Each positive-negative pair contributes 1 if the positive score is higher, 0.5 if the scores tie, and 0 if the positive score is lower.

Your task

Implement auc_roc(scores, labels).

  • scores is a finite floating-point vector of shape (N,). Higher scores indicate stronger evidence for class 1. Scores need not be probabilities: negative values and values above 1 are valid.
  • labels has shape (N,), with true labels 0 or 1, delivered as floats.
  • Return a Python float in [0, 1], leaving both inputs unchanged.

Let n_pos and n_neg be the numbers of positive and negative examples. Compare every positive score with every negative score, then compute:

AUC = (number of wins + 0.5 * number of ties) / (n_pos * n_neg)

Use exact equality for ties; do not round scores before comparing them. The denominator counts pairs, not examples. Do not threshold the scores at 0.5 or compute classification accuracy.

If either class is absent, including an empty input, return 0.0 by this exercise's convention. ROC AUC is undefined in that situation, so this return value should not be interpreted as evidence of a completely reversed ranking.

Example

For positive scores [0.9, 0.5] and negative scores [0.5, 0.1], the four pairs contribute [1, 1, 0.5, 1]. AUC is 3.5 / 4 = 0.875.

If both classes are present and every score ties, AUC is 0.5. If every positive scores above every negative, AUC is 1. If every positive scores below every negative, AUC is 0.

Connection to the ROC curve

The ROC curve plots the fraction of negatives predicted positive (false positive rate) on the horizontal axis and the fraction of positives predicted positive (true positive rate) on the vertical axis, as the score threshold moves from above the largest score to below the smallest.

The pairwise formula gives the trapezoidal area under that curve when equal scores cross the threshold together. You may use pair counting, average ranks for tied scores, or grouped-threshold integration. Processing tied examples one at a time in an arbitrary order can give the wrong area.

AUC measures ranking, not probability calibration or performance at a specific threshold. Class imbalance does not change the pair-weighting rule, but a high AUC alone does not tell you the precision or number of false positives at an operating threshold.