Evaluation data must simulate future unknown cases.
Repeatedly choosing against test results makes the test part of training. Google calls out that validation and test sets can “wear out” through repeated use.[1]
Random rows work only when examples are independent and future data resembles the sample. Split by customer when one customer has many rows. Split by time when predicting future periods. Duplicates and preprocessing learned before splitting leak information.
Read Google: Dividing the original dataset, then scan scikit-learn’s cross-validation guide.