This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(readr)
## Warning: package 'readr' was built under R version 4.2.3
library(C50)
## Warning: package 'C50' was built under R version 4.2.3
library(gmodels)
## Warning: package 'gmodels' was built under R version 4.2.3
set.seed(1234)
project <- read.csv("C:\\Users\\hussain7108\\Desktop\\churn (1).csv", stringsAsFactors = TRUE)
project <- subset(project, select = -c(Phone))
project <-subset(project, select = -c(State))
View(project)
str(project)
## 'data.frame': 3333 obs. of 19 variables:
## $ Account.Length: int 128 107 137 84 75 118 121 147 117 141 ...
## $ Area.Code : int 415 415 415 408 415 510 510 415 408 415 ...
## $ Int.l.Plan : Factor w/ 2 levels "no","yes": 1 1 1 2 2 2 1 2 1 2 ...
## $ VMail.Plan : Factor w/ 2 levels "no","yes": 2 2 1 1 1 1 2 1 1 2 ...
## $ VMail.Message : int 25 26 0 0 0 0 24 0 0 37 ...
## $ Day.Mins : num 265 162 243 299 167 ...
## $ Day.Calls : int 110 123 114 71 113 98 88 79 97 84 ...
## $ Day.Charge : num 45.1 27.5 41.4 50.9 28.3 ...
## $ Eve.Mins : num 197.4 195.5 121.2 61.9 148.3 ...
## $ Eve.Calls : int 99 103 110 88 122 101 108 94 80 111 ...
## $ Eve.Charge : num 16.78 16.62 10.3 5.26 12.61 ...
## $ Night.Mins : num 245 254 163 197 187 ...
## $ Night.Calls : int 91 103 104 89 121 118 118 96 90 97 ...
## $ Night.Charge : num 11.01 11.45 7.32 8.86 8.41 ...
## $ Intl.Mins : num 10 13.7 12.2 6.6 10.1 6.3 7.5 7.1 8.7 11.2 ...
## $ Intl.Calls : int 3 3 5 7 3 6 7 6 4 5 ...
## $ Intl.Charge : num 2.7 3.7 3.29 1.78 2.73 1.7 2.03 1.92 2.35 3.02 ...
## $ CustServ.Calls: int 1 1 0 2 3 0 3 0 1 0 ...
## $ Churn. : Factor w/ 2 levels "False.","True.": 1 1 1 1 1 1 1 1 1 1 ...
table(project$Int.l.Plan)
##
## no yes
## 3010 323
table(project$VMail.Plan)
##
## no yes
## 2411 922
table(project$Churn.)
##
## False. True.
## 2850 483
train_sample <- sample(3333, 3000)
str(train_sample)
## int [1:3000] 3066 3173 1004 623 2953 2693 934 400 2948 2146 ...
project_train <- project[train_sample, ]
project_test <- project[-train_sample, ]
prop.table(table(project_train$Churn.))
##
## False. True.
## 0.855 0.145
prop.table(table(project_test$Churn.))
##
## False. True.
## 0.8558559 0.1441441
project_model <- C5.0(project_train[-19], project_train$Churn.)
project_model
##
## Call:
## C5.0.default(x = project_train[-19], y = project_train$Churn.)
##
## Classification Tree
## Number of samples: 3000
## Number of predictors: 18
##
## Tree size: 27
##
## Non-standard options: attempt to group attributes
summary(project_model)
##
## Call:
## C5.0.default(x = project_train[-19], y = project_train$Churn.)
##
##
## C5.0 [Release 2.07 GPL Edition] Thu May 9 14:17:07 2024
## -------------------------------
##
## Class specified by attribute `outcome'
##
## Read 3000 cases (19 attributes) from undefined.data
##
## Decision tree:
##
## Day.Mins > 264.4:
## :...VMail.Plan = yes:
## : :...Int.l.Plan = no: False. (39/1)
## : : Int.l.Plan = yes: True. (8/3)
## : VMail.Plan = no:
## : :...Eve.Mins > 188:
## : :...Night.Mins > 126.9: True. (82/1)
## : : Night.Mins <= 126.9:
## : : :...Day.Mins <= 277: False. (4)
## : : Day.Mins > 277: True. (3)
## : Eve.Mins <= 188:
## : :...Day.Mins > 310.4: True. (8)
## : Day.Mins <= 310.4:
## : :...Eve.Charge <= 12.26: False. (13)
## : Eve.Charge > 12.26:
## : :...Night.Mins <= 196.5: False. (15/2)
## : Night.Mins > 196.5: True. (17/3)
## Day.Mins <= 264.4:
## :...CustServ.Calls > 3:
## :...Day.Mins > 174.3:
## : :...Eve.Charge > 11.48: False. (94/10)
## : : Eve.Charge <= 11.48:
## : : :...Intl.Calls <= 6: True. (10/1)
## : : Intl.Calls > 6: False. (2)
## : Day.Mins <= 174.3:
## : :...Eve.Charge <= 18.05: True. (76/3)
## : Eve.Charge > 18.05:
## : :...Day.Mins <= 134.5: True. (19/1)
## : Day.Mins > 134.5:
## : :...Intl.Calls > 3: False. (14)
## : Intl.Calls <= 3:
## : :...Day.Mins <= 163.2: True. (8/2)
## : Day.Mins > 163.2: False. (5)
## CustServ.Calls <= 3:
## :...Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (47)
## : Intl.Calls > 2:
## : :...Intl.Mins <= 13.1: False. (154/4)
## : Intl.Mins > 13.1: True. (40)
## Int.l.Plan = no:
## :...Day.Mins <= 221.8: False. (1968/53)
## Day.Mins > 221.8:
## :...Eve.Charge <= 20.5: False. (287/17)
## Eve.Charge > 20.5:
## :...VMail.Plan = yes: False. (22)
## VMail.Plan = no:
## :...Night.Mins > 172.5: True. (48/8)
## Night.Mins <= 172.5:
## :...Day.Mins <= 246.6: False. (11)
## Day.Mins > 246.6:
## :...Day.Charge <= 43.33: True. (4)
## Day.Charge > 43.33: False. (2)
##
##
## Evaluation on training data (3000 cases):
##
## Decision Tree
## ----------------
## Size Errors
##
## 27 109( 3.6%) <<
##
##
## (a) (b) <-classified as
## ---- ----
## 2543 22 (a): class False.
## 87 348 (b): class True.
##
##
## Attribute usage:
##
## 100.00% Day.Mins
## 93.70% CustServ.Calls
## 87.67% Int.l.Plan
## 21.57% Eve.Charge
## 9.33% Intl.Calls
## 9.20% VMail.Plan
## 6.47% Intl.Mins
## 6.20% Night.Mins
## 4.73% Eve.Mins
## 0.20% Day.Charge
##
##
## Time: 0.0 secs
project_pred <- predict(project_model, project_test)
CrossTable(project_test$Churn., project_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual Churn', 'predicted Churn'))
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 333
##
##
## | predicted Churn
## actual Churn | False. | True. | Row Total |
## -------------|-----------|-----------|-----------|
## False. | 281 | 4 | 285 |
## | 0.844 | 0.012 | |
## -------------|-----------|-----------|-----------|
## True. | 15 | 33 | 48 |
## | 0.045 | 0.099 | |
## -------------|-----------|-----------|-----------|
## Column Total | 296 | 37 | 333 |
## -------------|-----------|-----------|-----------|
##
##
project_boost10 <- C5.0(project_train[-19], project_train$Churn.,
trials = 10)
project_boost10
##
## Call:
## C5.0.default(x = project_train[-19], y = project_train$Churn., trials = 10)
##
## Classification Tree
## Number of samples: 3000
## Number of predictors: 18
##
## Number of boosting iterations: 10
## Average tree size: 30.2
##
## Non-standard options: attempt to group attributes
summary(project_boost10)
##
## Call:
## C5.0.default(x = project_train[-19], y = project_train$Churn., trials = 10)
##
##
## C5.0 [Release 2.07 GPL Edition] Thu May 9 14:17:07 2024
## -------------------------------
##
## Class specified by attribute `outcome'
##
## Read 3000 cases (19 attributes) from undefined.data
##
## ----- Trial 0: -----
##
## Decision tree:
##
## Day.Mins > 264.4:
## :...VMail.Plan = yes:
## : :...Int.l.Plan = no: False. (39/1)
## : : Int.l.Plan = yes: True. (8/3)
## : VMail.Plan = no:
## : :...Eve.Mins > 188:
## : :...Night.Mins > 126.9: True. (82/1)
## : : Night.Mins <= 126.9:
## : : :...Day.Mins <= 277: False. (4)
## : : Day.Mins > 277: True. (3)
## : Eve.Mins <= 188:
## : :...Day.Mins > 310.4: True. (8)
## : Day.Mins <= 310.4:
## : :...Eve.Charge <= 12.26: False. (13)
## : Eve.Charge > 12.26:
## : :...Night.Mins <= 196.5: False. (15/2)
## : Night.Mins > 196.5: True. (17/3)
## Day.Mins <= 264.4:
## :...CustServ.Calls > 3:
## :...Day.Mins > 174.3:
## : :...Eve.Charge > 11.48: False. (94/10)
## : : Eve.Charge <= 11.48:
## : : :...Intl.Calls <= 6: True. (10/1)
## : : Intl.Calls > 6: False. (2)
## : Day.Mins <= 174.3:
## : :...Eve.Charge <= 18.05: True. (76/3)
## : Eve.Charge > 18.05:
## : :...Day.Mins <= 134.5: True. (19/1)
## : Day.Mins > 134.5:
## : :...Intl.Calls > 3: False. (14)
## : Intl.Calls <= 3:
## : :...Day.Mins <= 163.2: True. (8/2)
## : Day.Mins > 163.2: False. (5)
## CustServ.Calls <= 3:
## :...Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (47)
## : Intl.Calls > 2:
## : :...Intl.Mins <= 13.1: False. (154/4)
## : Intl.Mins > 13.1: True. (40)
## Int.l.Plan = no:
## :...Day.Mins <= 221.8: False. (1968/53)
## Day.Mins > 221.8:
## :...Eve.Charge <= 20.5: False. (287/17)
## Eve.Charge > 20.5:
## :...VMail.Plan = yes: False. (22)
## VMail.Plan = no:
## :...Night.Mins > 172.5: True. (48/8)
## Night.Mins <= 172.5:
## :...Day.Mins <= 246.6: False. (11)
## Day.Mins > 246.6:
## :...Day.Charge <= 43.33: True. (4)
## Day.Charge > 43.33: False. (2)
##
## ----- Trial 1: -----
##
## Decision tree:
##
## Day.Mins > 242.1:
## :...Eve.Charge > 17.37:
## : :...VMail.Plan = no: True. (212.3/29.4)
## : : VMail.Plan = yes: False. (57.1/17.8)
## : Eve.Charge <= 17.37:
## : :...VMail.Plan = yes: False. (48.2/1.5)
## : VMail.Plan = no:
## : :...Day.Mins <= 275.4: False. (123.8/23.1)
## : Day.Mins > 275.4: True. (44.4/9.1)
## Day.Mins <= 242.1:
## :...Eve.Charge > 27.6: True. (42.4/11.4)
## Eve.Charge <= 27.6:
## :...CustServ.Calls > 3:
## :...Day.Mins <= 120.5: True. (23.5)
## : Day.Mins > 120.5:
## : :...Eve.Charge <= 15.81: True. (70/15.2)
## : Eve.Charge > 15.81: False. (144.6/46.4)
## CustServ.Calls <= 3:
## :...Night.Charge <= 5.4: False. (98/0.8)
## Night.Charge > 5.4:
## :...Eve.Calls <= 59: False. (34.2)
## Eve.Calls > 59:
## :...Int.l.Plan = yes: False. (151.9/58.5)
## Int.l.Plan = no:
## :...VMail.Message > 36: False. (103.2/29.5)
## VMail.Message <= 36:
## :...CustServ.Calls > 2: False. (249.1/25.2)
## CustServ.Calls <= 2:
## :...Eve.Charge <= 11.11: False. (101.8)
## Eve.Charge > 11.11:
## :...Eve.Charge <= 12.22: False. (110.1/51.7)
## Eve.Charge > 12.22:
## :...Eve.Charge <= 14.18: False. (156.4)
## Eve.Charge > 14.18:
## :...Intl.Calls > 9: False. (43.1/0.8)
## Intl.Calls <= 9:
## :...Night.Calls <= 115: False. (875.9/194.4)
## Night.Calls > 115: [S1]
##
## SubTree [S1]
##
## Intl.Calls > 6: False. (17.5)
## Intl.Calls <= 6:
## :...Intl.Mins <= 6.8: False. (19/0.8)
## Intl.Mins > 6.8:
## :...Night.Charge <= 10.74: False. (189.5/67.9)
## Night.Charge > 10.74: True. (84.1/23.5)
##
## ----- Trial 2: -----
##
## Decision tree:
##
## Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (133.7)
## : Intl.Calls > 2:
## : :...Intl.Mins > 13.1: True. (90.9)
## : Intl.Mins <= 13.1:
## : :...Eve.Charge > 26.24: True. (22.1/4)
## : Eve.Charge <= 26.24:
## : :...Eve.Calls <= 62: True. (9.4/1.2)
## : Eve.Calls > 62: False. (165.2/22.8)
## Int.l.Plan = no:
## :...Night.Charge <= 5.39: False. (100/4.7)
## Night.Charge > 5.39:
## :...CustServ.Calls > 4: True. (117.6/44)
## CustServ.Calls <= 4:
## :...Day.Mins > 245:
## :...Eve.Charge <= 14.16: False. (65.1/5.3)
## : Eve.Charge > 14.16:
## : :...Night.Charge <= 8.37: False. (75.2/29.3)
## : Night.Charge > 8.37: True. (166/29.7)
## Day.Mins <= 245:
## :...Eve.Calls <= 59: False. (32.5/0.6)
## Eve.Calls > 59:
## :...VMail.Message > 39: True. (68.7/30.6)
## VMail.Message <= 39:
## :...VMail.Message > 36: False. (34)
## VMail.Message <= 36:
## :...Night.Calls > 132: False. (98.5/11.6)
## Night.Calls <= 132:
## :...Eve.Charge <= 11.11: False. (108/12.5)
## Eve.Charge > 11.11:
## :...Eve.Charge <= 12.22: True. (119.8/56.3)
## Eve.Charge > 12.22:
## :...Intl.Calls > 9: False. (41.8)
## Intl.Calls <= 9:
## :...Eve.Charge <= 14.18: False. (152.2/9.7)
## Eve.Charge > 14.18:
## :...Day.Mins <= 78.3: False. (27.2)
## Day.Mins > 78.3: [S1]
##
## SubTree [S1]
##
## Night.Calls > 124: True. (122.7/58.4)
## Night.Calls <= 124:
## :...CustServ.Calls > 1: False. (509.4/124.7)
## CustServ.Calls <= 1:
## :...Day.Calls <= 77: False. (63.1/2.2)
## Day.Calls > 77:
## :...Night.Calls <= 70: False. (25.9)
## Night.Calls > 70:
## :...Night.Calls > 121: False. (27.7/0.6)
## Night.Calls <= 121:
## :...VMail.Plan = yes: False. (140.6/44.1)
## VMail.Plan = no:
## :...Day.Mins > 212.4: True. (136.6/41.3)
## Day.Mins <= 212.4:
## :...Eve.Charge <= 15.91: False. (32.7)
## Eve.Charge > 15.91:
## :...Intl.Mins <= 7.3: False. (22.9)
## Intl.Mins > 7.3:
## :...Day.Calls <= 85: False. (16.7)
## Day.Calls > 85:
## :...Eve.Charge <= 17.89: True. (125/39.6)
## Eve.Charge > 17.89: False. (149/50.1)
##
## ----- Trial 3: -----
##
## Decision tree:
##
## Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (109)
## : Intl.Calls > 2:
## : :...Intl.Mins > 13.1: True. (74.1)
## : Intl.Mins <= 13.1:
## : :...CustServ.Calls <= 3: False. (158.8/39.5)
## : CustServ.Calls > 3: True. (26.6/7.1)
## Int.l.Plan = no:
## :...Day.Mins > 259.3:
## :...VMail.Plan = yes: False. (48.1/7.2)
## : VMail.Plan = no:
## : :...Eve.Charge <= 14.21: False. (41.5/10.2)
## : Eve.Charge > 14.21: True. (140.3/26.4)
## Day.Mins <= 259.3:
## :...CustServ.Calls > 3:
## :...Day.Mins > 187.9: False. (95.9/13.8)
## : Day.Mins <= 187.9:
## : :...Eve.Charge <= 21.25: True. (182.7/41.6)
## : Eve.Charge > 21.25: False. (28.1/3.9)
## CustServ.Calls <= 3:
## :...Night.Charge <= 5.4: False. (67.4/1.4)
## Night.Charge > 5.4:
## :...Eve.Charge <= 17.04:
## :...Intl.Mins > 11.8: False. (224.7/12.1)
## : Intl.Mins <= 11.8:
## : :...Night.Calls > 127: False. (53.4)
## : Night.Calls <= 127:
## : :...Night.Calls <= 110: False. (461.4/86.4)
## : Night.Calls > 110:
## : :...CustServ.Calls > 2: False. (18.3)
## : CustServ.Calls <= 2:
## : :...Eve.Charge <= 12.1: False. (23.2)
## : Eve.Charge > 12.1: True. (141.1/63.9)
## Eve.Charge > 17.04:
## :...Night.Calls <= 68: False. (33.4)
## Night.Calls > 68:
## :...Day.Mins <= 151.8: False. (262.8/45.6)
## Day.Mins > 151.8:
## :...Intl.Calls > 8: False. (32/3.5)
## Intl.Calls <= 8:
## :...Day.Calls > 128: True. (81.7/27.8)
## Day.Calls <= 128:
## :...Night.Calls > 132: False. (29.9)
## Night.Calls <= 132:
## :...Night.Charge <= 6.79: False. (34.8)
## Night.Charge > 6.79:
## :...Night.Mins > 274.2: True. (65.6/18.3)
## Night.Mins <= 274.2:
## :...Eve.Mins <= 205.6: False. (32.2)
## Eve.Mins > 205.6: [S1]
##
## SubTree [S1]
##
## Intl.Mins <= 7.8: False. (80.7/12.5)
## Intl.Mins > 7.8:
## :...Day.Calls <= 64: True. (29.8/5.5)
## Day.Calls > 64:
## :...Intl.Calls > 5: False. (69.1/17.3)
## Intl.Calls <= 5:
## :...Night.Calls <= 73: True. (22.3/3)
## Night.Calls > 73:
## :...Account.Length > 152: True. (59.5/16.8)
## Account.Length <= 152:
## :...Day.Mins <= 166.7: False. (25.3)
## Day.Mins > 166.7:
## :...Eve.Calls > 118: False. (34.2/4.1)
## Eve.Calls <= 118:
## :...CustServ.Calls <= 0: False. (44.6/9.5)
## CustServ.Calls > 0:
## :...Eve.Charge <= 18.68: False. (20.2)
## Eve.Charge > 18.68: True. (147.2/50.1)
##
## ----- Trial 4: -----
##
## Decision tree:
##
## Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (87.6)
## : Intl.Calls > 2:
## : :...Intl.Mins > 13.1: True. (59.6)
## : Intl.Mins <= 13.1:
## : :...Day.Calls <= 66: True. (19.7/2.4)
## : Day.Calls > 66:
## : :...Intl.Calls <= 7: False. (133.2/33)
## : Intl.Calls > 7: True. (32.6/11.6)
## Int.l.Plan = no:
## :...Day.Mins > 239.5:
## :...Day.Mins > 313.8: True. (27.1)
## : Day.Mins <= 313.8:
## : :...VMail.Plan = yes: False. (75.5/8.4)
## : VMail.Plan = no:
## : :...Night.Charge > 10.47: True. (99/19.7)
## : Night.Charge <= 10.47:
## : :...Eve.Mins > 259: True. (23.4/1.4)
## : Eve.Mins <= 259:
## : :...Intl.Mins <= 7.2: False. (48.1/0.8)
## : Intl.Mins > 7.2:
## : :...Eve.Charge <= 20.43: False. (150/59.3)
## : Eve.Charge > 20.43: True. (14.6/0.4)
## Day.Mins <= 239.5:
## :...CustServ.Calls > 3:
## :...Day.Mins <= 138.6: True. (64.7/5.1)
## : Day.Mins > 138.6:
## : :...Eve.Charge > 19.7: False. (42.1)
## : Eve.Charge <= 19.7:
## : :...Night.Charge <= 6.85: True. (23.8/1.6)
## : Night.Charge > 6.85: False. (149.5/51.8)
## CustServ.Calls <= 3:
## :...Day.Calls <= 59: False. (37.2)
## Day.Calls > 59:
## :...Night.Charge <= 5.4: False. (46.9)
## Night.Charge > 5.4:
## :...Day.Mins <= 78.5: False. (36.1)
## Day.Mins > 78.5:
## :...Eve.Calls > 125:
## :...Night.Calls > 117: False. (30.2)
## : Night.Calls <= 117:
## : :...CustServ.Calls > 2: False. (16.1)
## : CustServ.Calls <= 2:
## : :...Intl.Calls <= 2: False. (19.4/1.4)
## : Intl.Calls > 2: True. (139.8/62.2)
## Eve.Calls <= 125:
## :...Eve.Calls > 117: False. (117.6/6.9)
## Eve.Calls <= 117:
## :...Intl.Mins > 15.5: False. (28.9)
## Intl.Mins <= 15.5:
## :...VMail.Message > 43: True. (31.9/15)
## VMail.Message <= 43:
## :...Account.Length <= 91:
## :...Day.Calls > 96: False. (295.1/17.7)
## : Day.Calls <= 96: [S1]
## Account.Length > 91:
## :...Account.Length <= 92: True. (27.3/8.6)
## Account.Length > 92:
## :...Night.Charge > 9.73: [S2]
## Night.Charge <= 9.73: [S3]
##
## SubTree [S1]
##
## Account.Length <= 24: True. (28.8/8)
## Account.Length > 24: False. (252/64.3)
##
## SubTree [S2]
##
## Eve.Charge <= 22.74: False. (272/20.4)
## Eve.Charge > 22.74: True. (34.7/12.8)
##
## SubTree [S3]
##
## Account.Length <= 97: False. (28.4)
## Account.Length > 97:
## :...Night.Mins <= 140: False. (28.4)
## Night.Mins > 140:
## :...Day.Calls > 119: True. (140.3/62.9)
## Day.Calls <= 119:
## :...Intl.Calls > 7: False. (33)
## Intl.Calls <= 7:
## :...VMail.Message > 33: False. (20.6)
## VMail.Message <= 33:
## :...Eve.Calls <= 83: False. (63/8.2)
## Eve.Calls > 83:
## :...Night.Charge <= 6.93: False. (11.4)
## Night.Charge > 6.93:
## :...Eve.Charge <= 20.81: False. (148.9/49.5)
## Eve.Charge > 20.81: True. (61.5/14)
##
## ----- Trial 5: -----
##
## Decision tree:
##
## Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (70.6)
## : Intl.Calls > 2:
## : :...Intl.Mins <= 13.1: False. (201/76.2)
## : Intl.Mins > 13.1: True. (48)
## Int.l.Plan = no:
## :...Day.Mins > 263.1:
## :...Eve.Charge <= 12.68: False. (15.8)
## : Eve.Charge > 12.68:
## : :...VMail.Plan = no: True. (155.5/29.9)
## : VMail.Plan = yes: False. (29.1/6.8)
## Day.Mins <= 263.1:
## :...CustServ.Calls > 3:
## :...Day.Calls > 138: True. (16)
## : Day.Calls <= 138:
## : :...Day.Mins > 201.2: False. (63.6/10.7)
## : Day.Mins <= 201.2:
## : :...Eve.Charge <= 16.18: True. (98.7/14.1)
## : Eve.Charge > 16.18: False. (133.9/59.9)
## CustServ.Calls <= 3:
## :...Eve.Calls <= 59: False. (28.9)
## Eve.Calls > 59:
## :...Eve.Calls > 147: False. (27.6)
## Eve.Calls <= 147:
## :...Day.Mins <= 223.2: False. (1678.6/352.9)
## Day.Mins > 223.2:
## :...Eve.Charge <= 22.85: False. (369.1/115.9)
## Eve.Charge > 22.85: True. (63.6/11.7)
##
## ----- Trial 6: -----
##
## Decision tree:
##
## CustServ.Calls > 3:
## :...Day.Mins <= 153.4: True. (179.9/12.7)
## : Day.Mins > 153.4:
## : :...Day.Calls > 127: True. (29.9/2)
## : Day.Calls <= 127:
## : :...Eve.Calls > 125: False. (22.7/1.2)
## : Eve.Calls <= 125:
## : :...Eve.Charge <= 11.48: True. (33.6/2.1)
## : Eve.Charge > 11.48: False. (208.8/91.6)
## CustServ.Calls <= 3:
## :...Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (46.1)
## : Intl.Calls > 2:
## : :...Intl.Mins > 13.1: True. (38.7)
## : Intl.Mins <= 13.1:
## : :...Day.Mins <= 222.1: False. (59.5)
## : Day.Mins > 222.1: True. (116/31.4)
## Int.l.Plan = no:
## :...Day.Mins > 236.3:
## :...VMail.Plan = yes: False. (79.4/21)
## : VMail.Plan = no:
## : :...Night.Charge <= 6.64: False. (56/10.7)
## : Night.Charge > 6.64:
## : :...Eve.Charge <= 15.56: False. (135.6/53.8)
## : Eve.Charge > 15.56:
## : :...Intl.Mins <= 7.4: False. (28.1/7.3)
## : Intl.Mins > 7.4: True. (206.7/25.3)
## Day.Mins <= 236.3:
## :...Night.Calls <= 68: False. (52.3)
## Night.Calls > 68:
## :...Night.Charge <= 5.4: False. (30.1)
## Night.Charge > 5.4:
## :...CustServ.Calls > 2:
## :...Eve.Mins <= 77.9: True. (11.6/0.5)
## : Eve.Mins > 77.9: False. (157.7/26.8)
## CustServ.Calls <= 2:
## :...Eve.Charge <= 10.46: False. (43.2)
## Eve.Charge > 10.46:
## :...Intl.Mins <= 6.3: False. (83.9/12.1)
## Intl.Mins > 6.3:
## :...Eve.Charge <= 12.22: True. (131.6/64.9)
## Eve.Charge > 12.22:
## :...Eve.Charge <= 14.34: False. (122.9)
## Eve.Charge > 14.34:
## :...Intl.Calls > 9: False. (25.7)
## Intl.Calls <= 9:
## :...Eve.Calls > 103:
## :...Night.Calls <= 84: False. (61/11.9)
## : Night.Calls > 84: [S1]
## Eve.Calls <= 103:
## :...Night.Charge <= 7.37: False. (62.2)
## Night.Charge > 7.37: [S2]
##
## SubTree [S1]
##
## Intl.Charge > 4.13: True. (28.1/6.6)
## Intl.Charge <= 4.13:
## :...Eve.Charge <= 15.91: False. (50.9/7.3)
## Eve.Charge > 15.91:
## :...Eve.Charge <= 17.87:
## :...Eve.Calls <= 139: True. (155/52.4)
## : Eve.Calls > 139: False. (9.8)
## Eve.Charge > 17.87:
## :...Account.Length <= 118: False. (120.5/19.5)
## Account.Length > 118: True. (122.6/55.8)
##
## SubTree [S2]
##
## Intl.Mins > 13.5: False. (38.5)
## Intl.Mins <= 13.5:
## :...Intl.Mins <= 8.2: False. (58/5.5)
## Intl.Mins > 8.2:
## :...Account.Length <= 59: False. (33.7)
## Account.Length > 59:
## :...Intl.Charge <= 2.27: True. (31.1/3.8)
## Intl.Charge > 2.27:
## :...Account.Length <= 61: True. (18.9/0.5)
## Account.Length > 61:
## :...VMail.Message > 27: False. (44.1)
## VMail.Message <= 27:
## :...Day.Mins <= 144.5: False. (28.8)
## Day.Mins > 144.5:
## :...Intl.Mins <= 9: False. (14.2)
## Intl.Mins > 9:
## :...Eve.Calls > 92: False. (48.3/9.2)
## Eve.Calls <= 92:
## :...Area.Code <= 415: True. (127/36.1)
## Area.Code > 415: False. (45/17.5)
##
## ----- Trial 7: -----
##
## Decision tree:
##
## CustServ.Calls > 3:
## :...Day.Mins <= 175.7: True. (286.3/50.5)
## : Day.Mins > 175.7:
## : :...Night.Calls <= 116: False. (113.1/33.7)
## : Night.Calls > 116: True. (56/13.1)
## CustServ.Calls <= 3:
## :...Day.Mins > 242.2:
## :...Day.Charge > 52.77: True. (36.7/0.2)
## : Day.Charge <= 52.77:
## : :...VMail.Plan = yes: False. (57.4/3.9)
## : VMail.Plan = no:
## : :...Eve.Charge > 20.84: True. (97.4/7.3)
## : Eve.Charge <= 20.84:
## : :...Night.Charge > 9.43: True. (149.4/43)
## : Night.Charge <= 9.43:
## : :...Intl.Mins <= 13.9: False. (158.3/40.7)
## : Intl.Mins > 13.9: True. (20.9/1.4)
## Day.Mins <= 242.2:
## :...Night.Calls <= 68: False. (52.8/2.3)
## Night.Calls > 68:
## :...Eve.Charge > 20.91:
## :...VMail.Message > 22: False. (111.3/16.6)
## : VMail.Message <= 22:
## : :...Night.Mins <= 176.6: False. (56.1/3.3)
## : Night.Mins > 176.6:
## : :...Day.Charge > 35.65: True. (116.9/23.7)
## : Day.Charge <= 35.65:
## : :...Night.Calls <= 116: False. (152.7/36.5)
## : Night.Calls > 116: True. (60.9/23.4)
## Eve.Charge <= 20.91:
## :...Eve.Calls > 137: False. (48.6/0.8)
## Eve.Calls <= 137:
## :...Eve.Calls <= 66: False. (46.9/0.8)
## Eve.Calls > 66:
## :...Eve.Calls <= 71: True. (60.6/25.3)
## Eve.Calls > 71:
## :...Intl.Calls <= 1: False. (54.2/5.5)
## Intl.Calls > 1:
## :...Day.Calls <= 67: False. (58.1/0.8)
## Day.Calls > 67:
## :...Day.Calls <= 86:
## :...Intl.Calls > 7: False. (17/0.8)
## : Intl.Calls <= 7:
## : :...Eve.Charge > 18.83: False. (19.4)
## : Eve.Charge <= 18.83:
## : :...Eve.Calls <= 132: False. (181.6/81.2)
## : Eve.Calls > 132: True. (14.4)
## Day.Calls > 86:
## :...Account.Length <= 44: False. (54.9/0.8)
## Account.Length > 44:
## :...Day.Calls > 124: False. (192.1/76)
## Day.Calls <= 124:
## :...VMail.Plan = yes: False. (169/8.6)
## VMail.Plan = no: [S1]
##
## SubTree [S1]
##
## CustServ.Calls > 1: False. (172.4/19.5)
## CustServ.Calls <= 1:
## :...Eve.Charge > 19.23: False. (33/0.8)
## Eve.Charge <= 19.23:
## :...Day.Calls <= 90: False. (29.4)
## Day.Calls > 90:
## :...Eve.Calls <= 96: False. (73.4/9.1)
## Eve.Calls > 96:
## :...Account.Length <= 128: False. (153.6/42.6)
## Account.Length > 128: True. (90.2/31.1)
##
## ----- Trial 8: -----
##
## Decision tree:
##
## Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (111.1)
## : Intl.Calls > 2:
## : :...Intl.Mins > 13.1: True. (90.8)
## : Intl.Mins <= 13.1:
## : :...Account.Length <= 64: False. (21.6)
## : Account.Length > 64:
## : :...CustServ.Calls > 4: True. (13.4)
## : CustServ.Calls <= 4:
## : :...Account.Length <= 77: True. (19.2/0.9)
## : Account.Length > 77: False. (177.1/64.8)
## Int.l.Plan = no:
## :...Day.Charge > 44.78: True. (233.8/73)
## Day.Charge <= 44.78:
## :...CustServ.Calls > 3:
## :...Day.Mins <= 135.7: True. (75.2/6.9)
## : Day.Mins > 135.7:
## : :...Eve.Charge > 20.84: False. (42.3)
## : Eve.Charge <= 20.84:
## : :...Eve.Charge <= 11.48: True. (34.5/3.5)
## : Eve.Charge > 11.48:
## : :...Night.Calls > 133: False. (13.2)
## : Night.Calls <= 133:
## : :...Day.Mins <= 187.9: True. (160.4/58)
## : Day.Mins > 187.9: False. (60.6/9.8)
## CustServ.Calls <= 3:
## :...Eve.Charge <= 14.34: False. (392.1/15.5)
## Eve.Charge > 14.34:
## :...Night.Calls <= 68: False. (32.4)
## Night.Calls > 68:
## :...Day.Mins > 221.8:
## :...VMail.Plan = yes: False. (51)
## : VMail.Plan = no:
## : :...Eve.Charge > 22.69: True. (59.7/7.4)
## : Eve.Charge <= 22.69:
## : :...Night.Charge <= 7.47: False. (37.3)
## : Night.Charge > 7.47:
## : :...Intl.Charge <= 1.73: False. (15.6)
## : Intl.Charge > 1.73:
## : :...Day.Charge <= 40.1: False. (71.8/15)
## : Day.Charge > 40.1: True. (170.3/68.5)
## Day.Mins <= 221.8:
## :...Intl.Calls <= 3:
## :...Night.Charge > 11.79: True. (77.2/35.5)
## : Night.Charge <= 11.79:
## : :...Intl.Mins <= 8.2: False. (63.7)
## : Intl.Mins > 8.2:
## : :...Intl.Mins <= 8.7: True. (35.4/10.9)
## : Intl.Mins > 8.7: False. (292.7/65.6)
## Intl.Calls > 3:
## :...Night.Calls <= 93: False. (155.4)
## Night.Calls > 93:
## :...Intl.Calls > 7: False. (53.7)
## Intl.Calls <= 7:
## :...CustServ.Calls > 2: False. (32.1)
## CustServ.Calls <= 2:
## :...Eve.Charge > 22.28: False. (51.7)
## Eve.Charge <= 22.28:
## :...VMail.Message > 29: False. (32.2)
## VMail.Message <= 29:
## :...VMail.Message > 27: True. (21.8/5.6)
## VMail.Message <= 27: [S1]
##
## SubTree [S1]
##
## Day.Calls <= 63: True. (18.5/5.1)
## Day.Calls > 63: False. (257.4/55.9)
##
## ----- Trial 9: -----
##
## Decision tree:
##
## Int.l.Plan = yes:
## :...Intl.Calls <= 2: True. (93.2)
## : Intl.Calls > 2:
## : :...Intl.Mins > 13.1: True. (76.1)
## : Intl.Mins <= 13.1:
## : :...Account.Length <= 64: False. (18.1)
## : Account.Length > 64:
## : :...Intl.Mins > 12: False. (12.4)
## : Intl.Mins <= 12:
## : :...Day.Calls <= 123: True. (192.3/80.7)
## : Day.Calls > 123: False. (14.7)
## Int.l.Plan = no:
## :...CustServ.Calls > 3:
## :...Day.Mins <= 135.7: True. (57.2)
## : Day.Mins > 135.7:
## : :...Intl.Calls > 3:
## : :...Day.Calls <= 135: False. (190/52.5)
## : : Day.Calls > 135: True. (10.2/0.9)
## : Intl.Calls <= 3:
## : :...Day.Charge > 48.18: True. (12.8)
## : Day.Charge <= 48.18:
## : :...Night.Charge <= 12.42: True. (137.8/60.9)
## : Night.Charge > 12.42: False. (23.2)
## CustServ.Calls <= 3:
## :...Day.Mins <= 212.9: False. (1179.9/49.2)
## Day.Mins > 212.9:
## :...VMail.Plan = yes: False. (211.5/7.2)
## VMail.Plan = no:
## :...Day.Mins > 278.4: True. (85.5/24.8)
## Day.Mins <= 278.4:
## :...Eve.Charge > 19.11:
## :...Day.Mins > 246.6: True. (70.3/12.5)
## : Day.Mins <= 246.6:
## : :...Eve.Mins <= 273.7: False. (102.7/21.3)
## : Eve.Mins > 273.7: True. (50.5/9.4)
## Eve.Charge <= 19.11:
## :...Night.Charge <= 8.18: False. (119.5)
## Night.Charge > 8.18:
## :...Eve.Charge <= 13.43: False. (62.7)
## Eve.Charge > 13.43:
## :...Day.Mins <= 259.3: False. (181.1/24.6)
## Day.Mins > 259.3: True. (44.3/12.6)
##
##
## Evaluation on training data (3000 cases):
##
## Trial Decision Tree
## ----- ----------------
## Size Errors
##
## 0 27 109( 3.6%)
## 1 23 311(10.4%)
## 2 31 534(17.8%)
## 3 35 390(13.0%)
## 4 41 427(14.2%)
## 5 15 188( 6.3%)
## 6 42 481(16.0%)
## 7 33 367(12.2%)
## 8 33 269( 9.0%)
## 9 22 251( 8.4%)
## boost 69( 2.3%) <<
##
##
## (a) (b) <-classified as
## ---- ----
## 2561 4 (a): class False.
## 65 370 (b): class True.
##
##
## Attribute usage:
##
## 100.00% Int.l.Plan
## 100.00% Day.Mins
## 100.00% Eve.Charge
## 100.00% CustServ.Calls
## 98.27% Night.Charge
## 92.63% Day.Charge
## 92.60% Eve.Calls
## 91.23% Night.Calls
## 90.17% Day.Calls
## 89.40% Intl.Calls
## 85.07% Intl.Mins
## 76.13% VMail.Message
## 72.53% Account.Length
## 60.37% VMail.Plan
## 39.60% Night.Mins
## 30.93% Eve.Mins
## 26.03% Intl.Charge
## 3.30% Area.Code
##
##
## Time: 0.3 secs
project_boost10_pred<-predict(project_boost10, project_test)
CrossTable(project_test$Churn., project_boost10_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual Churn', 'predicted Churn'))
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 333
##
##
## | predicted Churn
## actual Churn | False. | True. | Row Total |
## -------------|-----------|-----------|-----------|
## False. | 282 | 3 | 285 |
## | 0.847 | 0.009 | |
## -------------|-----------|-----------|-----------|
## True. | 12 | 36 | 48 |
## | 0.036 | 0.108 | |
## -------------|-----------|-----------|-----------|
## Column Total | 294 | 39 | 333 |
## -------------|-----------|-----------|-----------|
##
##
matrix_dimensions <- list(c("no", "yes"), c("no", "yes"))
names(matrix_dimensions) <- c("predicted", "actual")
matrix_dimensions
## $predicted
## [1] "no" "yes"
##
## $actual
## [1] "no" "yes"
error_cost <- matrix(c(0, 1, 4, 0), nrow = 2, dimnames = matrix_dimensions)
error_cost
## actual
## predicted no yes
## no 0 4
## yes 1 0
project_cost <- C5.0(project_train[-19], project_train$Churn.)
project_cost_pred <- predict(project_cost, project_test)
CrossTable(project_test$Churn., project_cost_pred,
prop.chisq = FALSE, prop.c = FALSE, prop.r = FALSE,
dnn = c('actual Churn', 'predicted Churn'))
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 333
##
##
## | predicted Churn
## actual Churn | False. | True. | Row Total |
## -------------|-----------|-----------|-----------|
## False. | 281 | 4 | 285 |
## | 0.844 | 0.012 | |
## -------------|-----------|-----------|-----------|
## True. | 15 | 33 | 48 |
## | 0.045 | 0.099 | |
## -------------|-----------|-----------|-----------|
## Column Total | 296 | 37 | 333 |
## -------------|-----------|-----------|-----------|
##
##