Los algoritmos de reglas de asociación representan una técnica dentro de la minería de datos
, teniendo como objetivo encontrar patrones de relaciones dentro un conjunto de transacciones.
El Algoritmo Apriori, está diseñado para operar sobre bases de datos que contienen transacciones (por ejemplo, colecciones de artículos comprados por consumidores) en donde cada transacción es vista como un conjunto de ítems y es uno de los más utilizados para crear sistemas de recomendaciones que vemos en muchos sitios web.
Obtención de los datos
Los datos para este ejemplo, son descargados desde archive.ics.uci.edu los cuales se encuentran disponibles para uso académico.
filedata <- "https://archive.ics.uci.edu/ml/machine-learning-databases/00352/Online%20Retail.xlsx"
if(!file.exists("Online Retail.xlsx")){
download.file(filedata, destfile = "Online Retail.xlsx")
}
#retail <- read.xlsx("Retail.xlsx", sheetIndex = 1)
retail <- read_excel("Retail.xlsx", sheet=1)
Selección de registros completos
Para procesar los datos de la forma correcta, se realiza un filtrado de tales con el fin de eliminar datos faltantes u errores en la base de datos, para ello usamos la función de R complete.cases
Transformación de los datos
retail1$InvoiceDate <- as.Date(retail1$InvoiceDate)
retail1 %>% mutate(Description = as.factor(Description))
Creación de subset de datos para las transacciones
Revisrar la data a procesar
## transactions as itemMatrix in sparse format with
## 22191 rows (elements/itemsets/transactions) and
## 7876 columns (items) and a density of 0.001930725
##
## most frequent items:
## WHITE HANGING HEART T-LIGHT HOLDER REGENCY CAKESTAND 3 TIER
## 1803 1709
## JUMBO BAG RED RETROSPOT PARTY BUNTING
## 1460 1285
## ASSORTED COLOUR BIRD ORNAMENT (Other)
## 1250 329938
##
## element (itemset/transaction) length distribution:
## sizes
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
## 3598 1594 1141 908 861 758 696 676 663 593 624 537 516 531 551 522
## 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
## 464 441 483 419 395 315 306 272 238 253 229 213 222 215 170 159
## 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
## 138 142 134 109 111 90 113 94 93 87 88 65 63 67 63 60
## 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
## 59 49 64 40 41 49 43 36 29 39 30 27 28 17 25 25
## 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
## 20 27 24 22 15 20 19 13 16 16 11 15 12 7 9 14
## 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
## 15 12 8 9 11 11 14 8 6 5 6 11 6 4 4 3
## 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
## 6 5 2 4 2 4 4 3 2 2 6 3 4 3 2 1
## 113 114 116 117 118 120 121 122 123 125 126 127 131 132 133 134
## 3 1 3 3 3 1 2 2 1 3 2 2 1 1 2 1
## 140 141 142 143 145 146 147 150 154 157 168 171 177 178 180 202
## 1 2 2 1 1 2 1 1 3 2 2 2 1 1 1 1
## 204 228 236 249 250 285 320 400 419
## 1 1 1 1 1 1 1 1 1
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 3.00 10.00 15.21 21.00 419.00
##
## includes extended item information - examples:
## labels
## 1 1 HANGER
## 2 10 COLOUR SPACEBOY PEN
## 3 12 COLOURED PARTY BALLOONS
Aplicación del algoritmo Apriori
de data mining
## Apriori
##
## Parameter specification:
## confidence minval smax arem aval originalSupport maxtime support minlen
## 0.8 0.1 1 none FALSE TRUE 5 0.009 1
## maxlen target ext
## 10 rules TRUE
##
## Algorithmic control:
## filter tree heap memopt load sort verbose
## 0.1 TRUE TRUE FALSE TRUE 2 TRUE
##
## Absolute minimum support count: 199
##
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[7876 item(s), 22191 transaction(s)] done [0.32s].
## sorting and recoding items ... [478 item(s)] done [0.01s].
## creating transaction tree ... done [0.02s].
## checking subsets of size 1 2 3 4 done [0.02s].
## writing ... [17 rule(s)] done [0.00s].
## creating S4 object ... done [0.01s].
Resumen del modelo
## set of 17 rules
##
## rule length distribution (lhs + rhs):sizes
## 2 3 4
## 7 8 2
##
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.000 2.000 3.000 2.706 3.000 4.000
##
## summary of quality measures:
## support confidence coverage lift
## Min. :0.009283 Min. :0.8163 Min. :0.009598 Min. :23.80
## 1st Qu.:0.009644 1st Qu.:0.8486 1st Qu.:0.010410 1st Qu.:28.55
## Median :0.010410 Median :0.8838 Median :0.010860 Median :61.91
## Mean :0.011001 Mean :0.9208 Mean :0.012090 Mean :57.22
## 3rd Qu.:0.010860 3rd Qu.:1.0000 3rd Qu.:0.012798 3rd Qu.:71.58
## Max. :0.015997 Max. :1.0000 Max. :0.019107 Max. :96.06
## count
## Min. :206.0
## 1st Qu.:214.0
## Median :231.0
## Mean :244.1
## 3rd Qu.:241.0
## Max. :355.0
##
## mining info:
## data ntransactions support confidence
## tr 22191 0.009 0.8
## call
## apriori(data = tr, parameter = list(supp = 0.009, conf = 0.8, maxlen = 10))
Las Reglas de Asociación nos dice que si un cliente compra, un producto “X”, qué tan probable es que compre otro, donde estos dos productos están relacionados porque otros clientes los compraron a ambos.
Inspección de las reglas de asociación encontradas
En la siguiente tabla se pueden observar las principales Reglas de Asociación de productos encontradas y se leen de la siguiente manera:
- LHS: Producto (o combinación de productos vendidos).
- RHS: Producto que probablemente se venda a partir del o los anterior(es).
- support: El soporte nos dice qué tan frecuente es un elemento o un conjunto de elementos (de la columna LHS) en todos los datos. Básicamente, nos dice qué tan popular es un conjunto de elementos en el conjunto de datos analizado (datos decimales que representan datos procentuales).
- confidence: La confianza nos dice qué tan probable es un consecuente cuando ha ocurrido el antecedente. Haciéndolo de forma análoga a la regla anterior, ¿qué probabilidad hay de que alguien compre el producto en la columna RHS cuando ya ha comprado el de la columna LHS?
- lift: El Levantamiento nos dice qué tan probable es el consecuente cuando el antecedente ya ha ocurrido, teniendo en cuenta el soporte de ambos antecedentes y consecuentes; si es < 1 es poco probable; si es 1 no es probable; si es > 1 es muy probable.
- count: Cantidad de veces que ha ocurrido.
Buscar una regla de asociación de algún producto
sugar.reglas.asociacion <- apriori(tr, parameter = list(supp=0.001, conf=0.8), appearance = list(default="lhs",rhs="SUGAR"))
## Apriori
##
## Parameter specification:
## confidence minval smax arem aval originalSupport maxtime support minlen
## 0.8 0.1 1 none FALSE TRUE 5 0.001 1
## maxlen target ext
## 10 rules TRUE
##
## Algorithmic control:
## filter tree heap memopt load sort verbose
## 0.1 TRUE TRUE FALSE TRUE 2 TRUE
##
## Absolute minimum support count: 22
##
## set item appearances ...[1 item(s)] done [0.00s].
## set transactions ...[7876 item(s), 22191 transaction(s)] done [0.30s].
## sorting and recoding items ... [2324 item(s)] done [0.01s].
## creating transaction tree ... done [0.01s].
## checking subsets of size 1 2 3 4 5 6 7 8 9 10 done [0.49s].
## writing ... [86 rule(s)] done [0.06s].
## creating S4 object ... done [0.02s].
Resumen del top 10 de las reglas de asociación encontradas
Conclusiones
El estudio de las Reglas de asociaciones es una herramienta de gran utilidad como herramienta de base para la toma de decisiones en la empresa, es un método eficaz para aprovechar la información de datos que hay disponible, ya que permite conocer los hábitos de compra de los clientes siendo una importante herramienta de marketing cuando se desea incrementar indicadores como ticket medio, distribución de Layout en tiendas, armados de Packs de productos, etc. ya que se puede usar la información para realizar recomendaciones a los clientes sobre productos relacionados y promocionar estos colocándolos muy cerca unos de otros en páginas Web, catálogos o en la misma estantería, etc.