## Appendix B Hyperparameters  
Optimizing hyperparameters is crucial for enhancing the performance of ML models. In this study, we used the hyperopt algorithm [19], which is designed for efficient optimization in high-dimensional parameter spaces, to fine-tune the parameters of our models. This process was carried out using the same stratified 10-fold cross-validation approach solely on the training data of the outer-CV, ensuring the robustness and generalizability of our predictive models. Hyperopt facilitates a systematic exploration of the parameter space, replacing traditional, often subjective, manual tuning with a rigorous, reproducible method. By automating the selection of the best parameters, we aimed to achieve optimal model performance and ensure consistency in our results across all algorithmic implementations. The fmin function from the hyperopt library played a crucial role in managing the optimization process, leveraging the Tree-structured Parzen Estimator (TPE) method--a Bayesian optimization technique well suited to high-dimensional spaces [20]. We defined our loss function as the average MAE, and hyperopt marked the evaluations with STATUS_OK to confirm successful trial completions. Our decision tree model's hyperparameters were tuned over 500 trials to find the optimal settings, ensuring a thorough exploration of the hyperparameter space defined by dt_space. The trials' object in the optimization process acts as a comprehensive log, recording the outcomes of each evaluation, including the details of the hyperparameters tested and their corresponding performance metrics. To enhance the robustness of our approach, we optimized the hyperparameters within each training subset of the outer loop of our cross-validation process. This methodology incorporates two layers of cross-validation: an outer loop to evaluate the model's performance and an inner loop to optimize the hyperparameters within each training subset of the outer loop. Such a methodical setup reinforces the integrity of our model evaluation, creating more reliable and generalizable results. For our study, we used the StratifiedKFold function from the sklearn library, setting it to create 10 stratified folds. These samples were arranged in ascending order by their identification number and were not shuffled. Given the continuous nature of our outcome variable, we employed the cut function from the pandas library to categorize this variable into 10 bins of equal width. This categorization was solely for the purpose of creating stratified folds and was not used in the actual training of our models. This stratification process was consistently applied in both the outer and inner loops of our cross-validation to maintain uniformity and integrity in our model evaluation approach. The LinearRegression function did not require hyperparameter optimization to achieve an optimal performance. Although LinearRegression includes additional hyperparameters, such as fit_intercept, to determine whether an intercept should be calculated, these were not relevant to our specific analysis objectives. In the LassoLarsCV function, we specified only the cross-validation split through the cv hyperparameter, which was the same setting used for tuning all other algorithms. All other hyperparameters were left at their default values, as this algorithm incorporates its own internal optimization mechanism for estimating regularization parameter alpha. For the DecisionTreeRegressor function, the following hyperparameters were tuned:  
* The function used to evaluate the quality of a split is referred to as the criterion. Its supported criteria include squared_error, which calculates the mean squared error equivalent to the variance reduction and minimizes the L2 loss by using the mean of each terminal node. Another criterion is friedman_mse, which computes the mean squared error while incorporating [PERSON]'s improvement score for evaluating potential splits.