## 2 Materials and Methods
### Random Forest  
Bagging is a machine learning approach in which many \"copies\" of the training data are created, where each \"copy\" is somewhat different from the others. Each copy is then subjected to a weak learner, such as a \"decision tree.\" This generates a large number of weak models, which are subsequently merged. Random forest is a supervised learning bagging strategy in which a large number of decorrelated trees are produced and then averaged to generate a more precise and consistent prediction of the target variable [20]. It is usual practice to partition the initial dataset into two pieces, \"training\" and \"testing,\" to make the algorithm more robust. The training set is used to build the model, and the testing set is used to assess the model's performance. Random forest is a supervised machine learning technique for either classification or regression tasks. An RF classifier operates on data with discrete labels, namely classes. Also, RF can be used for regression tasks in addition to classification. Even though RF cannot be used for extrapolation tasks, RF's nonlinear nature gives it an advantage over linear methods. The response variable in the case of an RF regressor should have numerical values. For the purposes of this study, RF was used for classification. Thus, prior to using RF, the response variable had to be in the form of an ordinal scale. Thus, Cmax, Cmax/AUC, and Cmax/Tmax were transformed into ordinal scales from their original continuous scales. For the implementation of RF, the hyper-parameters must be defined before training. In general, the hyper-parameter tuning was based on trial-and-error. These hyper-parameters may refer to the number of decision trees in the forest and the number of classes into which the response variable was classified. Bootstrap samples were utilized to construct trees, while the number of trees in the forest was equal to 500. To get all features into the same scale, z-score standardization was employed with the _StandardScaler_ of _sklearn_ from the preprocessing submodule. The number of random states, which affects the randomness of sample bootstrapping when creating trees, was set to 42. No warm was used, but a completely new forest was built every time. The number of parallel jobs was set to one. The utilized criterion (loss function), to determine model classification, was the default of the _sklearn_ library, the _Gini impurity_. The max depth of each tree was set to 5. It should be stated that several settings were tested, but the final used are those presented above. The dataset was divided into training and test sets, with the latter accounting for 33% of the data (the remaining 67% referring to the training set). Following the split, the model was trained on the training set and predictions were made on the test set. The feature significance scores were generated and shown using the _Matplotlib_ tool once the random forest model was developed. The \"confusion matrix\" is employed to assess the performance of a model in a classification task (i.e., where the dependent variable is categorical). The confusion matrix is a \(M\times M\) matrix, where \(M\) refers to the number of classes in the response variable. The matrix compares the expected and true classes. This provides a detailed perspective of the categorization model's overall performance and the types of errors it makes. The correctness and misinterpretation of the predictions are measured in order to reflect the classification's performance. When utilizing random forest, it is also feasible to determine the contribution of each variable to the prediction of the response variable by studying the feature importance. Initially, the response variable was divided into four classes in order to express the conditions of \"low\", \"intermediate\", \"high\", and \"very high\" values. This hyper-parameter (i.e., number of classes) tuning was based on a trial-and-error rationale; two-, three-, and five- groups were also investigated.