Machine learningLoading progress…

Thresholds and decisions

Compute logistic probabilities and evaluate the tradeoff introduced by a classification threshold.

The model estimates. You decide.

The fitted model produces a number for each example. A decision rule then turns it into an action: "flag it if p ≥ t". The threshold t is a policy choice, not part of the model. You can change t without refitting anything, because the probabilities are untouched. Below are 200 examples scored by a model, 68 of them truly positive.

score 0score 1threshold 0.5

Blue: examples that are really negative. Orange: really positive. Everything to the right of the line is called positive.

predicted positivepredicted notactually positiveactually not
accuracy 0.84precision 0.757recall 0.779F1 0.768flagged 70
The 200 probabilities never change. Only the line moves, and with it the labels, the counts and every metric.
Move the threshold. The probabilities (the bars) never move. The labels, counts and metrics all do.

Every threshold is a trade

Lowering t catches more real positives but also flags more negatives. Raising t does the opposite. For these 200 examples:

tflaggedcaught (TP)false alarms (FP)missed (FN)
0.39562336
0.570531715
0.74843525

Predict first. You lower the threshold from 0.5 to 0.3. What must be true about the count of false negatives?

The common mistake: 0.5 is not a law

0.5 is the default only because it is the point where the model thinks both classes are equally likely. A screening tool for a serious disease might use 0.1, because missing a case is much worse than a false alarm. An automatic account ban might use 0.95. And if you retrain with a different class balance, the best threshold can move. Choose t from the costs and capacity of your situation, which the next lessons quantify.

Chapter context

A classifier often estimates a score or probability before a decision rule turns it into a label. The decision threshold is part of the application policy; it is not the same thing as the fitted probability model.

Chapter reference: math, worked example & code

This section belongs to the whole chapter, so it is the same on every lesson in it and may cover a different lesson's topic. The code for the experiment you just ran is inside the experiment itself.

Math and notation

σ(z)=11+e−z,L=−ylog⁡p−(1−y)log⁡(1−p).\sigma(z)=\frac1{1+e^{-z}},\quad L=-y\log p-(1-y)\log(1-p). P=TPTP+FP,R=TPTP+FN,F1=2PRP+R.P=\frac{TP}{TP+FP},\quad R=\frac{TP}{TP+FN},\quad F1=\frac{2PR}{P+R}.

Define a policy for zero denominators rather than silently treating undefined metrics as universally meaningful.

Worked example

For actual labels [1,1,1,0,0] and predictions [1,1,0,1,0], TP=2, FP=1, FN=1 and TN=1. Accuracy is 3/5=0.6; precision, recall and F1 are all 2/3. Accuracy and F1 differ because they summarize different error patterns.

Reference code

The following example uses the Python standard library and does not call a remote service.

from math import isclose, log
truth, pred = [1,1,1,0,0], [1,1,0,1,0]
tp = sum(a == b == 1 for a,b in zip(truth,pred))
fp = sum(a == 0 and b == 1 for a,b in zip(truth,pred))
fn = sum(a == 1 and b == 0 for a,b in zip(truth,pred))
precision, recall = tp/(tp+fp), tp/(tp+fn)
assert isclose(2*precision*recall/(precision+recall), 2/3)
assert sum(a == b for a,b in zip(truth,pred))/len(truth) == .6
assert isclose(-log(.8), .2231435513142097)

Python examples are provided for study and local execution; this page does not execute Python.

Common mistakes

Accuracy can hide poor rare-class recall. A probability estimate does not choose the correct business threshold by itself. Ranking quality and calibration are separate properties.