We split the dataset (740 compounds; 3278 hydricities) by compound into a training set (80%; 595 compounds; 2607 hydricities) and a test set (20%; 145 compounds; 671 hydricities). For each ML model, we perform 5-fold random shuffled cross-validation. Within each fold, we further split the training set into a new training set (90%) and a validation set (10%). This process evaluates different models and estimates their performance. We then train the final ML model on the entire training set and evaluate it on the test set, selecting the best-performing model.