#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.