As for the neural network model, we used Bayesian optimization using the HyperOpt and Hyperas Python packages , to find the optimal number of hidden layers, the number of nodes in each layer, and the dropout amount. We searched over a space of 1 to 3 hidden layers, 20 to 200 nodes per layer, and dropout between 0 to 0.5. We found that 2 hidden layers, size 127 and 109 nodes respectively, and the dropout For cross-validation, each model was trained on three different train-test split sets, using the Scikit-learn train test split function 32 using random state values of 0, 42, and 420. We saw that the random forest model outperformed all other models in both the R 2 value and the root mean square error (RMSE) (Table ). We therefore used the random forest model as our model of choice for the remaining work.