Prefer repeated evidence over one lucky split.
from sklearn.model_selection import cross_validate
scores = cross_validate(
model, X_train, y_train, cv=5,
scoring="roc_auc", return_train_score=True,
)
Each fold fits the entire pipeline on different training rows and evaluates on its held-out fold. Report the score distribution, not only its mean.[1]
Model quality is conditional on the split. Time and grouped data need matching cross-validators; ordinary random folds can give false confidence.
Read scikit-learn’s cross-validation guide, especially grouped and time-series sections.