Results

Synopsis

The telecommunications industry is fiercely competitive, with customer retention being a pivotal aspect of maintaining a sustainable business model. For Regork, the advent into this arena comes with its unique challenges and opportunities. Retaining existing customers is notably cost-effective compared to attracting new ones, highlighting the significance of understanding and predicting customer churn. This report aims to unravel the patterns that contribute to customer retention and predict future behaviors that may affect Regork’s customer base stability.

Business Problem

Regor’s strategic expansion into telecommunications requires an effective customer retention strategy. The high costs associated with acquiring new customers necessitate a shift in focus towards retaining the existing clientele. The business problem centers on identifying key factors that influence a customer’s decision to stay with or leave Regork Telecom. Recognizing these factors can empower Regork to implement targeted retention strategies that can lead to increased customer loyalty and reduced churn rates.

Analytic Methodology

To tackle this problem, we delved into the customer_retention.csv dataset, aiming to discern critical factors influencing customer retention. Our approach was twofold:

  1. Data Exploration: We initiated the process by scrutinizing the data through visual analytics, identifying pivotal trends and relationships.
  2. Predictive Modeling: Subsequently, we developed three distinct machine learning models—logistic regression, regularized regression, and random forest. These models underwent rigorous training and testing, with the area under the receiver operating characteristic curve (AUC) serving as the primary metric for performance evaluation.

Throughout this analysis, we adhered to a robust machine learning protocol, ensuring that our results are both reproducible and reliable.

Expected Outcomes and Benefits

The culmination of this analysis is anticipated to provide Regork Telecom with actionable insights into customer behavior. By understanding the attributes that contribute to customer churn, Regork can refine its retention strategies, leading to enhanced customer satisfaction and loyalty. Furthermore, our findings can serve as a cornerstone for various departments within Regork, from marketing to finance, aiding in the development of targeted campaigns, risk assessment, and revenue forecasting.

In the ensuing sections, we will outline the technical prerequisites of our analysis, delve into our exploratory data analysis, detail our machine learning methodology, and conclude with strategic recommendations based on our predictive modeling outcomes.

Data Preparation

In order to reproduce the results contained within this report you will need to install and load the following packages:

library(tidymodels)
library(tidyverse)
library(baguette)
library(vip)
library(pdp)
library(here)
library(kernlab)
library(ggplot2)
library(ranger)
library(earth)
library(yardstick)

The following data will also need to be stored into the global environment:

df <- read.csv("customer_retention.csv")
df <- mutate(df, Status = factor(Status))
df <- na.omit(df)

Exploratory Data Analysis

Understanding the behavior of Regork Telecom’s customer base and the factors influencing their loyalty is paramount. The following visual analyses shed light on the interplay between demographic characteristics, service usage, and contract preferences, potentially hinting at underlying causes of customer churn.

Internet Service and Contract Length

Investigating the choice of internet service in relation to contract length can offer insights into customer preferences and potential churn risk.

ggplot(df, aes(InternetService)) +
  geom_bar(fill = "orange", color = "red") +
  facet_wrap(~Contract) +
  coord_flip() +
  ggtitle("Customer Internet Service and Length of Contract") +
  labs(y = "Count of Contract Type", x = "Customer Internet Service")

This visualization indicates that customers with Fiber Optic service predominantly prefer month-to-month contracts, which could suggest a higher churn risk as these contracts allow for greater flexibility to switch providers.

Payment Method and Contract Type

Next, we assess the association between payment methods and contract types to determine if there is a correlation with customer loyalty.

ggplot(df, aes(PaymentMethod)) +
  geom_bar(fill = "orange", color = "red") +
  facet_wrap(~Contract) +
  ggtitle("Payment Method vs. Type of Contract") +
  theme(axis.text.x = element_text(angle = 50, hjust = 1)) +
  labs(y = "Count of Customers", x = "Payment Method")

The plot reveals that electronic checks are prevalent among month-to-month contracts, suggesting that ease of payment could be an influential factor in contract choice.

Partner Status and Contract Length

The presence of a partner may affect a customer’s decision-making process regarding contract commitment.

ggplot(df, aes(Partner)) +
  geom_bar(fill = "orange", color = "red") +
  facet_wrap(~Contract) +
  ggtitle("Partner vs. Length of Contract") +
  labs(y = "Count of Contract Type", x = "Partner")

Interestingly, we observe that customers in longer-term contracts often have a partner, potentially indicating a tendency towards stability in both personal and service commitments.

Tenure and Contract Type

Lastly, we explore the tenure of customers relative to their contract type, as tenure could be a strong indicator of loyalty and churn.

ggplot(df, aes(Tenure)) +
  geom_bar(fill = "blue") +
  facet_wrap(~Contract) +
  ggtitle("Tenure vs. Type of Contract") +
  labs(y = "Count of Customers", x = "Length of Tenure (months)")

The trend observed suggests that longer tenure is associated with a higher likelihood of being in a one or two-year contract, which aligns with a lower churn risk.

Through these analyses, patterns start to emerge, painting a picture of how service choices, payment methods, partnership status, and customer tenure intertwine with contract length — a crucial element when considering customer retention strategies.

Machine Learning

A predictive model that identifies customers most likely to churn can significantly inform retention strategies at Regork Telecom. We will compare three different modeling approaches to ascertain which best predicts customer churn.

Data Splitting

We begin by splitting the dataset into a training set for developing our models and a test set for evaluation.

set.seed(123)
data_split <- initial_split(df, prop = .7, strata = Status)
train_data <- training(data_split)
test_data <- testing(data_split)

Logistic Regressions

Our baseline model is a logistic regression, chosen for its interpretability and simplicity.

set.seed(123)
logistic_kfolds <- vfold_cv(train_data, v = 5, strata = Status)

logistic_reg_model <- logistic_reg() %>%
  fit_resamples(Status ~ ., logistic_kfolds) %>%
  collect_metrics()
## → A | warning: prediction from rank-deficient fit; attr(*, "non-estim") has doubtful cases
## 
There were issues with some computations   A: x1

There were issues with some computations   A: x3

There were issues with some computations   A: x5

There were issues with some computations   A: x5
logistic_reg_model
## # A tibble: 2 × 6
##   .metric  .estimator  mean     n std_err .config             
##   <chr>    <chr>      <dbl> <int>   <dbl> <chr>               
## 1 accuracy binary     0.799     5 0.00401 Preprocessor1_Model1
## 2 roc_auc  binary     0.845     5 0.00521 Preprocessor1_Model1

The logistic regression model shows reasonable performance with an AUC of r logistic_reg_model\(roc_auc\)mean

Multivariate Adaptive Regression Splines (MARS)

We also consider a MARS model for its flexibility in capturing non-linear relationships.

set.seed(123)
mars_split <- initial_split(df, prop = .7, strata = Status)
mars_train <- training(mars_split)
mars_test <- testing(mars_split)
mars_recipe <- recipe(Status ~ ., data = mars_train)
mars_kfolds <- vfold_cv(mars_train, v = 5, strata = Status)
mars_mod <- mars(num_terms = tune(), prod_degree = tune()) %>%
  set_mode("classification")
mars_grid <- grid_regular(num_terms(range = c(1,30)), prod_degree(), levels = 50)
mars_wf <- workflow() %>% add_recipe(mars_recipe) %>% add_model(mars_mod)
mars_results <- mars_wf %>% tune_grid(resamples = mars_kfolds, grid = mars_grid)
mars_results %>%
  collect_metrics() %>%
  filter(.metric == "roc_auc") %>%
  arrange(desc(mean))
## # A tibble: 60 × 8
##    num_terms prod_degree .metric .estimator  mean     n std_err .config         
##        <int>       <int> <chr>   <chr>      <dbl> <int>   <dbl> <chr>           
##  1        18           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
##  2        19           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
##  3        20           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
##  4        21           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
##  5        22           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
##  6        23           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
##  7        24           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
##  8        25           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
##  9        26           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
## 10        27           1 roc_auc binary     0.851     5 0.00566 Preprocessor1_M…
## # ℹ 50 more rows

The MARS model outperforms logistic regression with a higher AUC, indicating it captures the complexity of customer churn more effectively.

Random Forest

Lastly, we employ a random forest model for its robustness and ability to handle interactions.

set.seed(123)
rf_recipe <- recipe(Status ~ ., data = train_data)
rf_mod <- rand_forest(mode = "classification", trees = tune(), mtry = tune(), min_n = tune()) %>%
  set_engine("ranger", importance = "impurity")
rf_hyper_grid <- grid_regular(trees(range = c(100, 1000)), mtry(range = c(1, 50)), min_n(range = c(1, 20)), levels = 5)
rf_kfold <- vfold_cv(train_data, v = 5, strata = Status)
rf_results <- tune_grid(rf_mod, rf_recipe, resamples = rf_kfold, grid = rf_hyper_grid)
## → A | warning: 25 columns were requested but there were 19 predictors in the data. 19 will be used.
## 
There were issues with some computations   A: x1

There were issues with some computations   A: x2

There were issues with some computations   A: x3

There were issues with some computations   A: x4

There were issues with some computations   A: x5

                                                 
→ B | warning: 37 columns were requested but there were 19 predictors in the data. 19 will be used.
## There were issues with some computations   A: x5

There were issues with some computations   A: x5   B: x1

There were issues with some computations   A: x5   B: x2

There were issues with some computations   A: x5   B: x3

There were issues with some computations   A: x5   B: x4

There were issues with some computations   A: x5   B: x5

                                                         
→ C | warning: 50 columns were requested but there were 19 predictors in the data. 19 will be used.
## There were issues with some computations   A: x5   B: x5

There were issues with some computations   A: x5   B: x5   C: x1

There were issues with some computations   A: x5   B: x5   C: x2

There were issues with some computations   A: x5   B: x5   C: x3

There were issues with some computations   A: x5   B: x5   C: x4

There were issues with some computations   A: x5   B: x5   C: x5

There were issues with some computations   A: x6   B: x5   C: x5

There were issues with some computations   A: x7   B: x5   C: x5

There were issues with some computations   A: x8   B: x5   C: x5

There were issues with some computations   A: x9   B: x5   C: x5

There were issues with some computations   A: x10   B: x5   C: x5

There were issues with some computations   A: x10   B: x6   C: x5

There were issues with some computations   A: x10   B: x7   C: x5

There were issues with some computations   A: x10   B: x8   C: x5

There were issues with some computations   A: x10   B: x9   C: x5

There were issues with some computations   A: x10   B: x10   C: x5

There were issues with some computations   A: x10   B: x10   C: x6

There were issues with some computations   A: x10   B: x10   C: x7

There were issues with some computations   A: x10   B: x10   C: x8

There were issues with some computations   A: x10   B: x10   C: x9

There were issues with some computations   A: x10   B: x10   C: x10

There were issues with some computations   A: x11   B: x10   C: x10

There were issues with some computations   A: x12   B: x10   C: x10

There were issues with some computations   A: x13   B: x10   C: x10

There were issues with some computations   A: x14   B: x10   C: x10

There were issues with some computations   A: x15   B: x10   C: x10

There were issues with some computations   A: x15   B: x11   C: x10

There were issues with some computations   A: x15   B: x12   C: x10

There were issues with some computations   A: x15   B: x13   C: x10

There were issues with some computations   A: x15   B: x14   C: x10

There were issues with some computations   A: x15   B: x15   C: x10

There were issues with some computations   A: x15   B: x15   C: x11

There were issues with some computations   A: x15   B: x15   C: x12

There were issues with some computations   A: x15   B: x15   C: x13

There were issues with some computations   A: x15   B: x15   C: x14

There were issues with some computations   A: x15   B: x15   C: x15

There were issues with some computations   A: x16   B: x15   C: x15

There were issues with some computations   A: x17   B: x15   C: x15

There were issues with some computations   A: x18   B: x15   C: x15

There were issues with some computations   A: x19   B: x15   C: x15

There were issues with some computations   A: x20   B: x15   C: x15

There were issues with some computations   A: x20   B: x16   C: x15

There were issues with some computations   A: x20   B: x17   C: x15

There were issues with some computations   A: x20   B: x18   C: x15

There were issues with some computations   A: x20   B: x19   C: x15

There were issues with some computations   A: x20   B: x20   C: x15

There were issues with some computations   A: x20   B: x20   C: x16

There were issues with some computations   A: x20   B: x20   C: x17

There were issues with some computations   A: x20   B: x20   C: x18

There were issues with some computations   A: x20   B: x20   C: x19

There were issues with some computations   A: x20   B: x20   C: x20

There were issues with some computations   A: x21   B: x20   C: x20

There were issues with some computations   A: x22   B: x20   C: x20

There were issues with some computations   A: x23   B: x20   C: x20

There were issues with some computations   A: x24   B: x20   C: x20

There were issues with some computations   A: x25   B: x20   C: x20

There were issues with some computations   A: x25   B: x21   C: x20

There were issues with some computations   A: x25   B: x22   C: x20

There were issues with some computations   A: x25   B: x23   C: x20

There were issues with some computations   A: x25   B: x24   C: x20

There were issues with some computations   A: x25   B: x25   C: x20

There were issues with some computations   A: x25   B: x25   C: x21

There were issues with some computations   A: x25   B: x25   C: x22

There were issues with some computations   A: x25   B: x25   C: x23

There were issues with some computations   A: x25   B: x25   C: x24

There were issues with some computations   A: x25   B: x25   C: x25

There were issues with some computations   A: x26   B: x25   C: x25

There were issues with some computations   A: x27   B: x25   C: x25

There were issues with some computations   A: x28   B: x25   C: x25

There were issues with some computations   A: x29   B: x25   C: x25

There were issues with some computations   A: x30   B: x25   C: x25

There were issues with some computations   A: x30   B: x26   C: x25

There were issues with some computations   A: x30   B: x27   C: x25

There were issues with some computations   A: x30   B: x28   C: x25

There were issues with some computations   A: x30   B: x29   C: x25

There were issues with some computations   A: x30   B: x30   C: x25

There were issues with some computations   A: x30   B: x30   C: x26

There were issues with some computations   A: x30   B: x30   C: x27

There were issues with some computations   A: x30   B: x30   C: x28

There were issues with some computations   A: x30   B: x30   C: x29

There were issues with some computations   A: x30   B: x30   C: x30

There were issues with some computations   A: x31   B: x30   C: x30

There were issues with some computations   A: x32   B: x30   C: x30

There were issues with some computations   A: x33   B: x30   C: x30

There were issues with some computations   A: x34   B: x30   C: x30

There were issues with some computations   A: x35   B: x30   C: x30

There were issues with some computations   A: x35   B: x31   C: x30

There were issues with some computations   A: x35   B: x32   C: x30

There were issues with some computations   A: x35   B: x33   C: x30

There were issues with some computations   A: x35   B: x34   C: x30

There were issues with some computations   A: x35   B: x35   C: x30

There were issues with some computations   A: x35   B: x35   C: x31

There were issues with some computations   A: x35   B: x35   C: x32

There were issues with some computations   A: x35   B: x35   C: x33

There were issues with some computations   A: x35   B: x35   C: x34

There were issues with some computations   A: x35   B: x35   C: x35

There were issues with some computations   A: x36   B: x35   C: x35

There were issues with some computations   A: x37   B: x35   C: x35

There were issues with some computations   A: x38   B: x35   C: x35

There were issues with some computations   A: x39   B: x35   C: x35

There were issues with some computations   A: x40   B: x35   C: x35

There were issues with some computations   A: x40   B: x36   C: x35

There were issues with some computations   A: x40   B: x37   C: x35

There were issues with some computations   A: x40   B: x38   C: x35

There were issues with some computations   A: x40   B: x39   C: x35

There were issues with some computations   A: x40   B: x40   C: x35

There were issues with some computations   A: x40   B: x40   C: x36

There were issues with some computations   A: x40   B: x40   C: x37

There were issues with some computations   A: x40   B: x40   C: x38

There were issues with some computations   A: x40   B: x40   C: x39

There were issues with some computations   A: x40   B: x40   C: x40

There were issues with some computations   A: x41   B: x40   C: x40

There were issues with some computations   A: x42   B: x40   C: x40

There were issues with some computations   A: x43   B: x40   C: x40

There were issues with some computations   A: x44   B: x40   C: x40

There were issues with some computations   A: x45   B: x40   C: x40

There were issues with some computations   A: x45   B: x41   C: x40

There were issues with some computations   A: x45   B: x42   C: x40

There were issues with some computations   A: x45   B: x43   C: x40

There were issues with some computations   A: x45   B: x44   C: x40

There were issues with some computations   A: x45   B: x45   C: x40

There were issues with some computations   A: x45   B: x45   C: x41

There were issues with some computations   A: x45   B: x45   C: x42

There were issues with some computations   A: x45   B: x45   C: x43

There were issues with some computations   A: x45   B: x45   C: x44

There were issues with some computations   A: x45   B: x45   C: x45

There were issues with some computations   A: x46   B: x45   C: x45

There were issues with some computations   A: x47   B: x45   C: x45

There were issues with some computations   A: x48   B: x45   C: x45

There were issues with some computations   A: x49   B: x45   C: x45

There were issues with some computations   A: x50   B: x45   C: x45

There were issues with some computations   A: x50   B: x46   C: x45

There were issues with some computations   A: x50   B: x47   C: x45

There were issues with some computations   A: x50   B: x48   C: x45

There were issues with some computations   A: x50   B: x49   C: x45

There were issues with some computations   A: x50   B: x50   C: x45

There were issues with some computations   A: x50   B: x50   C: x46

There were issues with some computations   A: x50   B: x50   C: x47

There were issues with some computations   A: x50   B: x50   C: x48

There were issues with some computations   A: x50   B: x50   C: x49

There were issues with some computations   A: x50   B: x50   C: x50

There were issues with some computations   A: x51   B: x50   C: x50

There were issues with some computations   A: x52   B: x50   C: x50

There were issues with some computations   A: x53   B: x50   C: x50

There were issues with some computations   A: x54   B: x50   C: x50

There were issues with some computations   A: x55   B: x50   C: x50

There were issues with some computations   A: x55   B: x51   C: x50

There were issues with some computations   A: x55   B: x52   C: x50

There were issues with some computations   A: x55   B: x53   C: x50

There were issues with some computations   A: x55   B: x54   C: x50

There were issues with some computations   A: x55   B: x55   C: x50

There were issues with some computations   A: x55   B: x55   C: x51

There were issues with some computations   A: x55   B: x55   C: x52

There were issues with some computations   A: x55   B: x55   C: x53

There were issues with some computations   A: x55   B: x55   C: x54

There were issues with some computations   A: x55   B: x55   C: x55

There were issues with some computations   A: x56   B: x55   C: x55

There were issues with some computations   A: x57   B: x55   C: x55

There were issues with some computations   A: x58   B: x55   C: x55

There were issues with some computations   A: x59   B: x55   C: x55

There were issues with some computations   A: x60   B: x55   C: x55

There were issues with some computations   A: x60   B: x56   C: x55

There were issues with some computations   A: x60   B: x57   C: x55

There were issues with some computations   A: x60   B: x58   C: x55

There were issues with some computations   A: x60   B: x59   C: x55

There were issues with some computations   A: x60   B: x60   C: x55

There were issues with some computations   A: x60   B: x60   C: x56

There were issues with some computations   A: x60   B: x60   C: x57

There were issues with some computations   A: x60   B: x60   C: x58

There were issues with some computations   A: x60   B: x60   C: x59

There were issues with some computations   A: x60   B: x60   C: x60

There were issues with some computations   A: x61   B: x60   C: x60

There were issues with some computations   A: x62   B: x60   C: x60

There were issues with some computations   A: x63   B: x60   C: x60

There were issues with some computations   A: x64   B: x60   C: x60

There were issues with some computations   A: x65   B: x60   C: x60

There were issues with some computations   A: x65   B: x61   C: x60

There were issues with some computations   A: x65   B: x62   C: x60

There were issues with some computations   A: x65   B: x63   C: x60

There were issues with some computations   A: x65   B: x64   C: x60

There were issues with some computations   A: x65   B: x65   C: x60

There were issues with some computations   A: x65   B: x65   C: x61

There were issues with some computations   A: x65   B: x65   C: x62

There were issues with some computations   A: x65   B: x65   C: x63

There were issues with some computations   A: x65   B: x65   C: x64

There were issues with some computations   A: x65   B: x65   C: x65

There were issues with some computations   A: x66   B: x65   C: x65

There were issues with some computations   A: x67   B: x65   C: x65

There were issues with some computations   A: x68   B: x65   C: x65

There were issues with some computations   A: x69   B: x65   C: x65

There were issues with some computations   A: x70   B: x65   C: x65

There were issues with some computations   A: x70   B: x66   C: x65

There were issues with some computations   A: x70   B: x67   C: x65

There were issues with some computations   A: x70   B: x68   C: x65

There were issues with some computations   A: x70   B: x69   C: x65

There were issues with some computations   A: x70   B: x70   C: x65

There were issues with some computations   A: x70   B: x70   C: x66

There were issues with some computations   A: x70   B: x70   C: x67

There were issues with some computations   A: x70   B: x70   C: x68

There were issues with some computations   A: x70   B: x70   C: x69

There were issues with some computations   A: x70   B: x70   C: x70

There were issues with some computations   A: x71   B: x70   C: x70

There were issues with some computations   A: x72   B: x70   C: x70

There were issues with some computations   A: x73   B: x70   C: x70

There were issues with some computations   A: x74   B: x70   C: x70

There were issues with some computations   A: x75   B: x70   C: x70

There were issues with some computations   A: x75   B: x71   C: x70

There were issues with some computations   A: x75   B: x72   C: x70

There were issues with some computations   A: x75   B: x73   C: x70

There were issues with some computations   A: x75   B: x74   C: x70

There were issues with some computations   A: x75   B: x75   C: x70

There were issues with some computations   A: x75   B: x75   C: x71

There were issues with some computations   A: x75   B: x75   C: x72

There were issues with some computations   A: x75   B: x75   C: x73

There were issues with some computations   A: x75   B: x75   C: x74

There were issues with some computations   A: x75   B: x75   C: x75

There were issues with some computations   A: x76   B: x75   C: x75

There were issues with some computations   A: x77   B: x75   C: x75

There were issues with some computations   A: x78   B: x75   C: x75

There were issues with some computations   A: x79   B: x75   C: x75

There were issues with some computations   A: x80   B: x75   C: x75

There were issues with some computations   A: x80   B: x76   C: x75

There were issues with some computations   A: x80   B: x77   C: x75

There were issues with some computations   A: x80   B: x78   C: x75

There were issues with some computations   A: x80   B: x79   C: x75

There were issues with some computations   A: x80   B: x80   C: x75

There were issues with some computations   A: x80   B: x80   C: x76

There were issues with some computations   A: x80   B: x80   C: x77

There were issues with some computations   A: x80   B: x80   C: x78

There were issues with some computations   A: x80   B: x80   C: x79

There were issues with some computations   A: x80   B: x80   C: x80

There were issues with some computations   A: x81   B: x80   C: x80

There were issues with some computations   A: x82   B: x80   C: x80

There were issues with some computations   A: x83   B: x80   C: x80

There were issues with some computations   A: x84   B: x80   C: x80

There were issues with some computations   A: x85   B: x80   C: x80

There were issues with some computations   A: x85   B: x81   C: x80

There were issues with some computations   A: x85   B: x82   C: x80

There were issues with some computations   A: x85   B: x83   C: x80

There were issues with some computations   A: x85   B: x84   C: x80

There were issues with some computations   A: x85   B: x85   C: x80

There were issues with some computations   A: x85   B: x85   C: x81

There were issues with some computations   A: x85   B: x85   C: x82

There were issues with some computations   A: x85   B: x85   C: x83

There were issues with some computations   A: x85   B: x85   C: x84

There were issues with some computations   A: x85   B: x85   C: x85

There were issues with some computations   A: x86   B: x85   C: x85

There were issues with some computations   A: x87   B: x85   C: x85

There were issues with some computations   A: x88   B: x85   C: x85

There were issues with some computations   A: x89   B: x85   C: x85

There were issues with some computations   A: x90   B: x85   C: x85

There were issues with some computations   A: x90   B: x86   C: x85

There were issues with some computations   A: x90   B: x87   C: x85

There were issues with some computations   A: x90   B: x88   C: x85

There were issues with some computations   A: x90   B: x89   C: x85

There were issues with some computations   A: x90   B: x90   C: x85

There were issues with some computations   A: x90   B: x90   C: x86

There were issues with some computations   A: x90   B: x90   C: x87

There were issues with some computations   A: x90   B: x90   C: x88

There were issues with some computations   A: x90   B: x90   C: x89

There were issues with some computations   A: x90   B: x90   C: x90

There were issues with some computations   A: x91   B: x90   C: x90

There were issues with some computations   A: x92   B: x90   C: x90

There were issues with some computations   A: x93   B: x90   C: x90

There were issues with some computations   A: x94   B: x90   C: x90

There were issues with some computations   A: x95   B: x90   C: x90

There were issues with some computations   A: x95   B: x91   C: x90

There were issues with some computations   A: x95   B: x92   C: x90

There were issues with some computations   A: x95   B: x93   C: x90

There were issues with some computations   A: x95   B: x94   C: x90

There were issues with some computations   A: x95   B: x95   C: x90

There were issues with some computations   A: x95   B: x95   C: x91

There were issues with some computations   A: x95   B: x95   C: x92

There were issues with some computations   A: x95   B: x95   C: x93

There were issues with some computations   A: x95   B: x95   C: x94

There were issues with some computations   A: x95   B: x95   C: x95

There were issues with some computations   A: x96   B: x95   C: x95

There were issues with some computations   A: x97   B: x95   C: x95

There were issues with some computations   A: x98   B: x95   C: x95

There were issues with some computations   A: x99   B: x95   C: x95

There were issues with some computations   A: x100   B: x95   C: x95

There were issues with some computations   A: x100   B: x96   C: x95

There were issues with some computations   A: x100   B: x97   C: x95

There were issues with some computations   A: x100   B: x98   C: x95

There were issues with some computations   A: x100   B: x99   C: x95

There were issues with some computations   A: x100   B: x100   C: x95

There were issues with some computations   A: x100   B: x100   C: x96

There were issues with some computations   A: x100   B: x100   C: x97

There were issues with some computations   A: x100   B: x100   C: x98

There were issues with some computations   A: x100   B: x100   C: x99

There were issues with some computations   A: x100   B: x100   C: x100

There were issues with some computations   A: x101   B: x100   C: x100

There were issues with some computations   A: x102   B: x100   C: x100

There were issues with some computations   A: x103   B: x100   C: x100

There were issues with some computations   A: x104   B: x100   C: x100

There were issues with some computations   A: x105   B: x100   C: x100

There were issues with some computations   A: x105   B: x101   C: x100

There were issues with some computations   A: x105   B: x102   C: x100

There were issues with some computations   A: x105   B: x103   C: x100

There were issues with some computations   A: x105   B: x104   C: x100

There were issues with some computations   A: x105   B: x105   C: x100

There were issues with some computations   A: x105   B: x105   C: x101

There were issues with some computations   A: x105   B: x105   C: x102

There were issues with some computations   A: x105   B: x105   C: x103

There were issues with some computations   A: x105   B: x105   C: x104

There were issues with some computations   A: x105   B: x105   C: x105

There were issues with some computations   A: x106   B: x105   C: x105

There were issues with some computations   A: x107   B: x105   C: x105

There were issues with some computations   A: x108   B: x105   C: x105

There were issues with some computations   A: x109   B: x105   C: x105

There were issues with some computations   A: x110   B: x105   C: x105

There were issues with some computations   A: x110   B: x106   C: x105

There were issues with some computations   A: x110   B: x107   C: x105

There were issues with some computations   A: x110   B: x108   C: x105

There were issues with some computations   A: x110   B: x109   C: x105

There were issues with some computations   A: x110   B: x110   C: x105

There were issues with some computations   A: x110   B: x110   C: x106

There were issues with some computations   A: x110   B: x110   C: x107

There were issues with some computations   A: x110   B: x110   C: x108

There were issues with some computations   A: x110   B: x110   C: x109

There were issues with some computations   A: x110   B: x110   C: x110

There were issues with some computations   A: x111   B: x110   C: x110

There were issues with some computations   A: x112   B: x110   C: x110

There were issues with some computations   A: x113   B: x110   C: x110

There were issues with some computations   A: x114   B: x110   C: x110

There were issues with some computations   A: x115   B: x110   C: x110

There were issues with some computations   A: x115   B: x111   C: x110

There were issues with some computations   A: x115   B: x112   C: x110

There were issues with some computations   A: x115   B: x113   C: x110

There were issues with some computations   A: x115   B: x114   C: x110

There were issues with some computations   A: x115   B: x115   C: x110

There were issues with some computations   A: x115   B: x115   C: x111

There were issues with some computations   A: x115   B: x115   C: x112

There were issues with some computations   A: x115   B: x115   C: x113

There were issues with some computations   A: x115   B: x115   C: x114

There were issues with some computations   A: x115   B: x115   C: x115

There were issues with some computations   A: x116   B: x115   C: x115

There were issues with some computations   A: x117   B: x115   C: x115

There were issues with some computations   A: x118   B: x115   C: x115

There were issues with some computations   A: x119   B: x115   C: x115

There were issues with some computations   A: x120   B: x115   C: x115

There were issues with some computations   A: x120   B: x116   C: x115

There were issues with some computations   A: x120   B: x117   C: x115

There were issues with some computations   A: x120   B: x118   C: x115

There were issues with some computations   A: x120   B: x119   C: x115

There were issues with some computations   A: x120   B: x120   C: x115

There were issues with some computations   A: x120   B: x120   C: x116

There were issues with some computations   A: x120   B: x120   C: x117

There were issues with some computations   A: x120   B: x120   C: x118

There were issues with some computations   A: x120   B: x120   C: x119

There were issues with some computations   A: x120   B: x120   C: x120

There were issues with some computations   A: x121   B: x120   C: x120

There were issues with some computations   A: x122   B: x120   C: x120

There were issues with some computations   A: x123   B: x120   C: x120

There were issues with some computations   A: x124   B: x120   C: x120

There were issues with some computations   A: x125   B: x120   C: x120

There were issues with some computations   A: x125   B: x121   C: x120

There were issues with some computations   A: x125   B: x122   C: x120

There were issues with some computations   A: x125   B: x123   C: x120

There were issues with some computations   A: x125   B: x124   C: x120

There were issues with some computations   A: x125   B: x125   C: x120

There were issues with some computations   A: x125   B: x125   C: x121

There were issues with some computations   A: x125   B: x125   C: x122

There were issues with some computations   A: x125   B: x125   C: x123

There were issues with some computations   A: x125   B: x125   C: x124

There were issues with some computations   A: x125   B: x125   C: x125

There were issues with some computations   A: x125   B: x125   C: x125
rf_best <- select_best(rf_results, metric = "roc_auc")
rf_best
## # A tibble: 1 × 4
##    mtry trees min_n .config               
##   <int> <int> <int> <chr>                 
## 1     1   550     1 Preprocessor1_Model003

After tuning, the random forest model yields a competitive AUC and we select the best hyperparameters accordingly.

Business Analysis

Key Insights and Strategy for Customer Retention

Based on our machine learning analysis, we’ve identified several key factors that influence customer retention significantly:

  1. Contract Type: Customers with longer-term contracts are less likely to churn. Offering incentives for customers to commit to longer terms could stabilize revenue and reduce turnover.
  2. Payment Method: Customers using electronic checks, particularly for month-to-month contracts, exhibit higher churn rates. Encouraging automated payment methods could enhance customer retention.
  3. Internet Service: Customers with fiber optic services are more likely to be in month-to-month contracts, which are prone to higher churn. Promoting benefits of longer contract terms specifically for fiber optic users could be beneficial.
  4. Partner Status: Customers with partners are more stable, suggesting family plans or partner discounts could effectively reduce churn.

Proposed Incentive Scheme

Given these insights, a multifaceted incentive scheme can be introduced:

  1. Loyalty Discounts: Provide escalating discounts or benefits the longer a customer stays, especially targeting those on month-to-month contracts to transition to annual contracts.
  2. Partner/Family Plans: Introduce or enhance family plan offerings that provide better value, encouraging commitments from households rather than individuals.
  3. Enhanced Payment Flexibility: Offer bonuses or discounts for setting up auto-renewal payments, reducing the friction of monthly decisions on whether to continue the service.
  4. Fiber Optic Upgrades: For fiber optic customers, offer promotional rates or enhanced services for commitments to longer-term contracts to reduce the higher churn seen in this group.

Conclusion and Recommendations

Our analysis, yielding an average model AUC around 0.85, suggests that the predictive models are robust and provide a solid foundation for making data-driven decisions in Regork’s telecommunications venture. By focusing on the key predictors of churn identified through our analysis, Regork can implement targeted strategies to improve customer retention and overall satisfaction.

While our models are effective, continuing to refine them with more granular demographic and usage data could reveal deeper insights, leading to even more tailored strategies. Additionally, further exploration into customer satisfaction and competitive analysis could enhance our understanding of churn drivers.