## 2 Methodology
### Extreme Gradient Boosting (XGBoost) Model  
XGBoost (extreme gradient boosting) is an advanced machine-learning algorithm that is particularly effective for regression and classification tasks. It belongs to the family of gradient-boosting methods and is known for its high predictive performance and ability to handle complex datasets. XGBoost builds a predictive model by iteratively combining multiple weak predictive models, called decision trees, to form a strong ensemble model [51]. The algorithm optimizes an objective function by minimizing the sum of the loss function and a regularization term, thereby reducing both bias and variance in the final model. The ensemble's predictions for each individual tree are added together and weighted by a shrinkage factor (learning rate), to produce the XGBoost model's prediction:  
\[\hat{Y}=\Sigma_{i}\,F_{i}(x) \tag{2}\]  
where:  
* \(\hat{Y}\) represents the predicted value of the dependent variable (choice),
* \(\Sigma_{i}\) denotes the summation of all individual decision trees (base learners),
* \(F_{i}(x)\) represents the prediction of the ith decision tree for the given input variables x (where the x variables are the call rate, data speed, customer service, premiums, and network coverage). In XGBoost, each decision tree is constructed progressively, with succeeding trees picking up on the mistakes (residues) of the predecessors. This method improves overall performance by allowing the model to concentrate on the patterns that the earlier trees were unable to identify. Regularization, gradient-based optimization, and tree pruning are just a few of the approaches that XGBoost uses to increase the accuracy of its predictions [52]. These methods enhance model robustness, decrease over-fitting, and enhance generalization to new data. A particular loss function, such as mean squared error (MSE) for regression or log loss for classification, is minimized during the training phase in order to determine the parameters of the XGBoost model. The performance of the model can also be improved by adjusting hyper-parameters like the learning rate, maximum depth of the trees, and regularization parameters. Due to its capacity for handling big datasets, handling missing values, and automatically handling feature selection, the XGBoost method has grown in popularity. In several industries, including finance, healthcare, and natural language processing, it is now an extensively utilized tool. Programming languages like Python, R, or Scala and specialized libraries like XGBoost or scikit-learn can be used to implement the XGBoost model. These libraries offer practical tools for developing, testing, and optimizing XGBoost models. XGBoost is therefore a strong and adaptable machine-learning algorithm that uses ensemble techniques to produce precise predictions. It is a useful tool for a variety of predictive modeling jobs since it can handle complex interactions and large-scale datasets. It is also able to provide insight into feature importance, making it possible for users to determine which features have the greatest bearing on predictions. Although XGBoost is known for its effectiveness in a wide range of predictive modeling tasks [52], it has certain limitations that should be considered, one of which is that it is not as interpretable as simpler models like linear regression although techniques like SHAP (Shapley Additive exPlanations) values or partial dependence plots can provide some insights into model behavior. XGBoost can be sensitive to noisy data, outliers, and missing values. This can impact the model's performance because noisy data can cause false splits. To address this, it is critical to preprocess the data by dealing with missing values, eliminating outliers, and using proper feature scaling or normalization methods. In addition, it can learn complex patterns in the training data resulting in extremely specific models that perform well on the training set but generalize poorly to new, unseen data.