#Reglas de Asociacion en el caso Marketing Directo

Para el caso de Marketing Directo, se requiere importar las librerías Arules. Podemos mostrar la frecuencia con la que se repiten los items.

library(arules)
## Loading required package: Matrix
## 
## Attaching package: 'arules'
## The following objects are masked from 'package:base':
## 
##     abbreviate, write
marketing<- read.transactions("https://raw.githubusercontent.com/VictorGuevaraP/BI/master/MarketingDirecto.csv", sep = ";", header = TRUE)
summary(marketing)
## transactions as itemMatrix in sparse format with
##  1000 rows (elements/itemsets/transactions) and
##  873 columns (items) and a density of 0.009962199 
## 
## most frequent items:
##    Cerca   Propia    Media Femenino   Casado  (Other) 
##      710      516      508      506      502     5955 
## 
## element (itemset/transaction) length distribution:
## sizes
##   8   9 
## 303 697 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.000   8.000   9.000   8.697   9.000   9.000 
## 
## includes extended item information - examples:
##   labels
## 1      0
## 2      1
## 3   1001

Ahora mostramos las transacciones para ver que la data se cargó correctamente

labels(marketing[1:5])
## [1] "{0,755,Adulta,Alto,Entre 3 y 7,Femenino,Lejos,Propia,Soltero}"    
## [2] "{0,1318,Alquilada,Alto,Cerca,Entre 3 y 7,Masculino,Media,Soltero}"
## [3] "{0,296,Alquilada,Bajo,Cerca,Entre 16 y 30,Femenino,Joven,Soltero}"
## [4] "{1,2436,Alto,Casado,Cerca,Entre 16 y 30,Masculino,Media,Propia}"  
## [5] "{0,1304,Alto,Cerca,Entre 8 y 15,Femenino,Media,Propia,Soltero}"
#Deberíamos eliminar la columna de monto o clasificar la información en rangos

Mostramos los 20 items que se repiten más veces ordenados de mayor a menor

itemFrequencyPlot(marketing, topN = 20)

Ahora mostramos todas las transacciones en un diagrama donde los espacios vacíos representan la ausencia de un item y los negros la presencia de los mismos.

image(sample(marketing, 100))

Ahora, para hayar las reglas de asociacion aplicamos el algoritmo Apriori con un soporte de 20% y confianza de 60%

apriori(marketing)
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.8    0.1    1 none FALSE            TRUE       5     0.1      1
##  maxlen target   ext
##      10  rules FALSE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 100 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[873 item(s), 1000 transaction(s)] done [0.00s].
## sorting and recoding items ... [21 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 5 done [0.00s].
## writing ... [28 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
## set of 28 rules
reglas <- apriori(marketing, parameter = list(support = 0.2,confidence = 0.6, minlen = 2))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime support minlen
##         0.6    0.1    1 none FALSE            TRUE       5     0.2      2
##  maxlen target   ext
##      10  rules FALSE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 200 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[873 item(s), 1000 transaction(s)] done [0.00s].
## sorting and recoding items ... [19 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 done [0.00s].
## writing ... [39 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].
reglas
## set of 39 rules

Vemos que hemos encontrado 39 reglas que cumplen con los requisitos. Vamosa inspeccionar las 3 primeras reglas.

inspect(reglas[1:3])
##     lhs               rhs         support confidence lift     count
## [1] {Alto}         => {Casado}    0.205   0.8039216  1.601437 205  
## [2] {Entre 8 y 15} => {Cerca}     0.213   0.7553191  1.063830 213  
## [3] {Joven}        => {Alquilada} 0.245   0.8536585  1.763757 245

Ahora queremos ver las 5 primeras reglas con el lift

inspect(sort(reglas, by = "lift")[1:5])
##     lhs                   rhs         support confidence lift     count
## [1] {Joven}            => {Alquilada} 0.245   0.8536585  1.763757 245  
## [2] {Alto}             => {Casado}    0.205   0.8039216  1.601437 205  
## [3] {Masculino,Propia} => {Media}     0.204   0.7391304  1.454981 204  
## [4] {Joven}            => {Soltero}   0.207   0.7212544  1.448302 207  
## [5] {Casado,Media}     => {Propia}    0.216   0.7346939  1.423825 216

Ahora que hemos observado las reglas, vamos a encontrar patrones. Podemos crear una sub regla que contenga solo un item, como la edad Joven.

subreglas <- subset(reglas, items %in% "Joven")
subreglas
## set of 2 rules
inspect(subreglas)
##     lhs        rhs         support confidence lift     count
## [1] {Joven} => {Alquilada} 0.245   0.8536585  1.763757 245  
## [2] {Joven} => {Soltero}   0.207   0.7212544  1.448302 207

Vemos que encontró solo 2 reglas y las mostramos. Esta data nos dice que la mayoría de personas jóvenes viven en casas alquiladas, además, que la mayoría de personas jóvenes son solteras. Con una confianza de 85.3% y 72.1% respectivamente.

Hagamos lo mismo con otros items, como las personas con historial alto:

subreglas1 <- subset(reglas, items %in% "Alto")
subreglas1
## set of 1 rules
inspect(subreglas1)
##     lhs       rhs      support confidence lift     count
## [1] {Alto} => {Casado} 0.205   0.8039216  1.601437 205

Solo se encontró una regla que dice que las personas casadas tienen un historial alto. Esto debido al alto porcentaje que pedimos, solo una regla cumple con los requisitos.

Podemos ver otras reglas como las personas con casa propia.

subreglas2 <- subset(reglas, items %in% "Propia")
subreglas2
## set of 18 rules
inspect(subreglas2)
##      lhs                   rhs         support confidence lift     count
## [1]  {Casado}           => {Propia}    0.325   0.6474104  1.254671 325  
## [2]  {Propia}           => {Casado}    0.325   0.6298450  1.254671 325  
## [3]  {Media}            => {Propia}    0.325   0.6397638  1.239852 325  
## [4]  {Propia}           => {Media}     0.325   0.6298450  1.239852 325  
## [5]  {Propia}           => {Cerca}     0.374   0.7248062  1.020854 374  
## [6]  {Masculino,Media}  => {Propia}    0.204   0.6754967  1.309102 204  
## [7]  {Masculino,Propia} => {Media}     0.204   0.7391304  1.454981 204  
## [8]  {Media,Propia}     => {Masculino} 0.204   0.6276923  1.270632 204  
## [9]  {Masculino,Propia} => {Cerca}     0.203   0.7355072  1.035926 203  
## [10] {Casado,Media}     => {Propia}    0.216   0.7346939  1.423825 216  
## [11] {Casado,Propia}    => {Media}     0.216   0.6646154  1.308298 216  
## [12] {Media,Propia}     => {Casado}    0.216   0.6646154  1.323935 216  
## [13] {Casado,Propia}    => {Cerca}     0.233   0.7169231  1.009751 233  
## [14] {Casado,Cerca}     => {Propia}    0.233   0.6508380  1.261314 233  
## [15] {Cerca,Propia}     => {Casado}    0.233   0.6229947  1.241025 233  
## [16] {Media,Propia}     => {Cerca}     0.241   0.7415385  1.044420 241  
## [17] {Cerca,Media}      => {Propia}    0.241   0.6513514  1.262309 241  
## [18] {Cerca,Propia}     => {Media}     0.241   0.6443850  1.268474 241

Ahora vemos una cantidad mayor de reglas debido a que el item “Propia” se repite más veces y hay un mayor número de transacciones que cumplen con los requisitos. Por mayor confianza podemos decir que la regla 16, con 74.1% explica que hay mayor número de personas de edad media, con casa propia, que viven cerca.

Así podemos revisar y variar el soporte o la confianza para poder encontrar otras reglas que expliquen de mejor manera los comportamientos de la data.