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

retail1 <- retail[complete.cases(retail), ]

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

transacciones <- ddply(retail1,c("InvoiceNo","InvoiceDate"),
                       function(df1)paste(df1$Description,
                                          collapse = ","))
transacciones$InvoiceNo <- NULL
transacciones$InvoiceDate <- NULL
colnames(transacciones) <- c("Productos")

Revisrar la data a procesar

summary(tr)
## 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

reglas.asociacion <- apriori(tr, parameter = list(supp=0.009, conf=0.8, maxlen=10))
## 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

summary(reglas.asociacion)
## 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

inspectDT(reglas.asociacion[1:17])

En la siguiente tabla se pueden observar las principales Reglas de Asociación de productos encontradas y se leen de la siguiente manera:

  1. LHS: Producto (o combinación de productos vendidos).
  2. RHS: Producto que probablemente se venda a partir del o los anterior(es).
  3. 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).
  4. 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?
  5. 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.
  6. count: Cantidad de veces que ha ocurrido.

Tabla Resumen de las reglas agrupadas

subconjunto.reglas <- which(colSums(is.subset(reglas.asociacion, reglas.asociacion)) > 1)
subconjunto.reglas.asociacion <- reglas.asociacion[-subconjunto.reglas]

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].
inspectDT(head(sugar.reglas.asociacion))

Resumen del top 10 de las reglas de asociación encontradas

top10reglas <- head(reglas.asociacion, n = 10, by = "confidence")

Tabla top 10 Reglas de asociación con el algoritmo Apriori

inspectDT(top10reglas)

Red de Reglas de asociación con el algoritmo Apriori

plot(top10reglas, method = "graph",  engine = "htmlwidget")

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.