## 3 Data and Methods
The final feature selection was performed by combining all three results and considering the principle of parsimony. The following Machine Learning techniques were selected to build classifiers on the selected features: radial kernel SVMs [46], MLR [47], RFs [48], and XGB [49]. These methods were chosen because of their performance in previous work [27]. Each model was tuned considering 10 repeats of a 10-fold cross-validation (for each repeat, observations are separated in 10 groups or folds, and then, for each fold, a model is tuned using the remaining 9 folds as a training set and the current one to assess the model's performance). Additionally, a grid search was used for hyper-parameter tuning when needed:  
* Two hyper-parameters must be tuned for radial kernel SVMs: _cost_ (C), which penalises wrong classification, and _sigma_, which regulates the curvature of the decision border. Values of powers of two ranging from \(2^{-10}\) to \(2^{10}\) were considered for both parameters. * The selected implementation of a Random Forest only allows the _mtry_ hyper-parameter to be tuned, which regulates how many of the input features are to be considered when building a decision tree, ranging from one to the number of available features. * For XGB, the _nrounds_ parameter determines the number of trees in the final model, for which the range 100 to 2000 was considered, increasing by 50. _eta_ prevents over-fitting by adjusting feature weights and considers the following possible values: 0.025 and 0.05 to 0.5, increasing by 0.05. _max_depth_ regulates the maximum depth of a tree, ranging from one to the number of available features. _min_child_weight_ regulates the minimum number of observations in each node, ranging from 1 to 10. _colsample_bytree_ is the sub-sample ratio of columns when building each tree, ranging from 0.1 to 1 and increasing by 0.1. _gamma_ regulates the minimum loss reduction needed to further partition a node, considering the same values listed for _eta_. _subsample_ regulates the subset of observations sampled before growing the trees. This parameter was set to one since cross-validation already separates instances for model assessment. Models were built for (1) all students, (2) student subsets by programme duration, and (3) student subsets by the department that manages the programme (i.e., by engineering specialisation). All the models for a single subset considered the same data split (i.e., the same folds for each repetition of the 10-fold cross-validation). Moreover, oversampling was used when there was an important class imbalance (above 15 percentage points). Building individual models for the 20 distinct engineering programmes was ruled out in this work due to the shortage of data for some programmes and a large increase in training costs. To examine the significant effect of the type of model or group on prediction accuracy, a semi-parametric repeated measures ANOVA was conducted using the RM() function from the R-package MANOVA.RM. This function implements a non-parametric bootstrapped procedure for an ANOVA-type statistic (ATS), as proposed by [PERSON] et al. [50]. These procedures remain robust even when there are violations of the assumptions of normality and homogeneity of covariance. Subsequently, a post hoc analysis was performed to calculate the corresponding bootstrapped means of pairwise differences and (percent) confidence intervals (CI). In all cases, 4999 bootstrap iterations and 95% confidence levels were considered.