Como siempre se inicia con la carga de datos y selección de variables, en este caso solo se quitaron las variables de ID y DtCustomer.

data <- read.csv("marketing_campaign.csv", header = T, sep = ";" ,fileEncoding = "UTF-8-BOM")
D1 <- data[c(-1,-8)]

Se crearon los conjuntos de test y train y con ellos se creo el modelo y se realizaron las predicciones.

# Random Sampling
set.seed(1)
samplesize <- .70 * nrow(D1)
index <- sample(seq_len(nrow(D1)), size = samplesize)

D1train <- D1[index,]
D1test <- D1[-index,]

# Árbol

model <- rpart(Response~., data = D1train, method = 'class') 

# Predict 

pred <- predict(model, newdata = D1test[-27], type = "class")

El modelo resultante es el siguiente:

## n= 1568 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##  1) root 1568 223 0 (0.85778061 0.14221939)  
##    2) AcceptedCmp5< 0.5 1455 159 0 (0.89072165 0.10927835)  
##      4) AcceptedCmp3< 0.5 1357 119 0 (0.91230656 0.08769344)  
##        8) Recency>=20.5 1061  63 0 (0.94062205 0.05937795) *
##        9) Recency< 20.5 296  56 0 (0.81081081 0.18918919)  
##         18) NumWebVisitsMonth< 8.5 282  46 0 (0.83687943 0.16312057)  
##           36) AcceptedCmp1< 0.5 272  39 0 (0.85661765 0.14338235) *
##           37) AcceptedCmp1>=0.5 10   3 1 (0.30000000 0.70000000) *
##         19) NumWebVisitsMonth>=8.5 14   4 1 (0.28571429 0.71428571) *
##      5) AcceptedCmp3>=0.5 98  40 0 (0.59183673 0.40816327)  
##       10) Recency>=19.5 78  25 0 (0.67948718 0.32051282)  
##         20) NumCatalogPurchases< 7.5 69  17 0 (0.75362319 0.24637681) *
##         21) NumCatalogPurchases>=7.5 9   1 1 (0.11111111 0.88888889) *
##       11) Recency< 19.5 20   5 1 (0.25000000 0.75000000) *
##    3) AcceptedCmp5>=0.5 113  49 1 (0.43362832 0.56637168)  
##      6) AcceptedCmp1< 0.5 60  23 0 (0.61666667 0.38333333)  
##       12) Marital_Status=Married,Together,Widow 47  13 0 (0.72340426 0.27659574)  
##         24) Recency>=23 35   5 0 (0.85714286 0.14285714) *
##         25) Recency< 23 12   4 1 (0.33333333 0.66666667) *
##       13) Marital_Status=Divorced,Single 13   3 1 (0.23076923 0.76923077) *
##      7) AcceptedCmp1>=0.5 53  12 1 (0.22641509 0.77358491)  
##       14) NumWebPurchases< 4.5 21   9 1 (0.42857143 0.57142857)  
##         28) Marital_Status=Married,Together 10   2 0 (0.80000000 0.20000000) *
##         29) Marital_Status=Absurd,Divorced,Single 11   1 1 (0.09090909 0.90909091) *
##       15) NumWebPurchases>=4.5 32   3 1 (0.09375000 0.90625000) *

El modelo utilizó las variables: AcceptedCmp1, AcceptedCmp3, AcceptedCmp5, Marital_Status, NumCatalogPurchases, NumWebPurchases, NumWebVisitsMonth y Recency. Esto muestra que en el caso de características de liente solo es relevante su estado civil mientras que en la relacion cliente-tienda sí hay más variables significativas.

A continuación se muestra el árbol que se obtuvo:

Del gráfico podemos ver que en el caso de los 1’s el modelo no está teniendo mucha precisión pues presenta probabilidades altas de error en cada una de las clasificaciones lo que no pasa tanto en el caso contrario con los 0’s.

##    pred
##       0   1
##   0 550  11
##   1  74  37

Con lo anterior los estadísticos derivados de las matrices de confusión son calculados siendo 1 positivo y 0 negativo.

Como podemos ver el accuracy es bueno sin embargo el modelo falla a la hora de predecir 1’s, como ya habíamos visto al analizar el árbol. Esta poca precisión puede ser causada por la proprción de 0’s y 1’s en los datos siendo 1906 los 0’s contra 334 los 1’s.