Why one train/test split is a noisy estimate
What it is
A single hold-out split reports the accuracy of one model on one particular sample of rows. Change the random seed and the number changes, often by several points on a few-thousand-row dataset, because the test set is a small sample and small samples have large sampling error.
Why it matters
Nearly every wrong modelling decision starts here: two models are compared on one split, one wins by 1%, and that 1% is entirely the split. Knowing the size of the noise is what tells you whether a difference is a difference.
In the real world: Two teams report 82% and 85% for the same churn model just because their random test sets differed.
Visual example
Split noiseThe same model, scored on ten different random splits of the same data: the spread is the error bar nobody prints.
What the scatter says
range = 0.991 - 0.930 = 0.061 — six points of pure split luck
std ≈ 0.018, so a 1-point 'improvement' is well inside the noise
mean of all ten = 0.961 — the number worth quoting
Why this matters
Every model comparison you will ever make is a comparison of two numbers like these. If you do not know how wide each one is, you cannot say which model is better.
Common misconception
Wrong idea: the test accuracy is a property of the model.
Correct idea: it is a property of the model and the particular test rows. Resampling the split resamples the answer.
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X, y = load_breast_cancer(return_X_y=True)
scores = []
for seed in range(10):
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=seed)
model = LogisticRegression(max_iter=5000).fit(X_tr, y_tr)
scores.append(model.score(X_te, y_te))
np.round(scores, 3) # the same model, ten different 'accuracies'
np.std(scores) # ~0.02 — the width of the answer you were quotingReporting the best of several seeds. Trying ten splits and keeping the highest is not a better estimate, it is the maximum of ten noisy draws — biased upward by roughly the noise you just measured.