Train Validation Test Split

A train/validation/test split separates model fitting, model selection, and final evaluation. Without this separation, the reported number can silently become a training signal.

The intended separation is:

More precisely, the split should be disjoint at the unit that matters for generalization:

where maps an example to its split unit, such as molecule scaffold, protein family, patient, time period, source, or document group.

Training chooses parameters:

Validation chooses hyperparameters or checkpoints:

Test evaluation estimates the final claim:

Split Contract

A split is part of the claim. The same metric means different things under different split units.

Split fieldDefines
example unitone row, molecule, protein, structure, document, assay
split unitwhat must not cross train/val/test
selection unitwhat validation is allowed to tune
claim unitwhat final performance is supposed to generalize to

The contract should satisfy:

If the claim is performance on new scaffolds, the split cannot be random row-level. If the claim is performance on future data, the split should respect time.

Split Units

  • Row split: useful only when rows are independent examples.
  • Group split: required when examples share a molecule, protein, subject, scaffold, family, source, or time period.
  • Temporal split: required when the claim is future performance.
  • Domain split: required when the claim is transfer to a new source or deployment environment.

Common Split Failure Modes

FailureConsequence
duplicate entities cross splitsmemorization appears as generalization
preprocessing fit before splitvalidation/test distribution leaks into train
hyperparameters tuned on testfinal metric becomes model selection signal
random rows for grouped biology dataanalogs, scaffolds, proteins, or assays leak
validation easier than testselected model may not match final claim
temporal order ignoredfuture-performance claim is unsupported

What Belongs Where

UseSplit
fit parameterstrain
choose hyperparameters, checkpoint, thresholdvalidation
choose final claim after all decisions fixedtest
estimate uncertainty after final choicebootstrap or repeated splits over test protocol

Threshold selection is model selection. It belongs on validation unless the test protocol explicitly includes a nested threshold rule.

Checks

  • Is the test set used exactly once for final reporting?
  • Are preprocessing, imputation, and normalization fit only on train data?
  • Does the split group related molecules, proteins, structures, or time periods correctly?
  • Does validation select the same kind of generalization expected at test time?
  • Is the split unit documented alongside the metric?
  • Are threshold selection, calibration, and early stopping all kept off the test set?
  • Does the split support the exact wording of the generalization claim?