Your model adapts to the training data and might overfit, so we test it on validation data in order to check whether it is overfitting.
So we train, then we validate, then we revise the model and we repeat the process. But it is possible for the train-validation-revision loop to pick up an undiscovered bias present in both the training and validation datasets that allows good performance on both, but bad generalisation.
That is why it is always a good idea to have a test dataset distinct from the training and validation datasets in order to infrequently verify whether our models generalise beyond the training and validation sets.
@QuantScientist Kaggle must have labelled test data because otherwise they would be unable to calculate the test leaderboard. They just don’t show us the test dataset.