Introducción

Los algoritmos de reglas de asociación tienen como objetivo encontrar relaciones dentro un conjunto de transacciones, en concreto, ítems o atributos que tienden a ocurrir de forma conjunta. En este contexto, el término transacción hace referencia a cada grupo de eventos que están asociados de alguna forma, por ejemplo:

A cada uno de los eventos o elementos que forman parte de una transacción se conoce como ítem y a un conjunto de ellos itemset. Una transacción puede estar formada por uno o varios itemsets, en el caso de ser varios, cada posible subconjunto de ellos es un itemset distinto.

Algoritmos de Reglas de Asociación

Existen varios algoritmos diseñados para identificar itemsets frecuentes y reglas de asociación. A continuación, se describen algunos de los más utilizados.

De los cuales, daremos una breve descripción de ellos.

Apriori

Fue uno de los primeros algoritmos desarrollados para la búsqueda de reglas de asociación y sigue siendo uno de los mas empleados, consta de dos etapas:

  • Identificar todos los itemsets que ocurren con una frecuencia por encima de un determinado límite.

  • Convertir esos itemsets frecuentes en reglas de asociación.

FP-Growth

En los 2000 se propuso un nuevo algoritmo, que permite extraer reglas de asociación a partir de itemsets frecuentes pero, a diferencia del algoritmo Apriori, estos se identifican sin necesidad de generar candidatos para cada tamaño.

Este algoritmo emplea una estructura de árbol donde almacena toda la información de las transacciones. Esta estructura permite comprimir la información de una base de datos de transacciones hasta 200 veces, haciendo posible que pueda ser cargada en memoria RAM.

Eclat

Zaki, en el año 2000, propuso un nuevo algoritmo para encontrar patrones frecuentes llamado Equivalence Class Transformation (Eclat). La princioal diferencia entre este algoritmo y el Apriori es la forma en que se escanean y analizan los datos. El algoritmo Apriori emplea transacciones almacenadas de forma horizontal, es decir, todos los elementos que forman una misma transacción están en la misma línea. El algoritmo Eclat, sin embargo, analiza las transacciones en formato vertical, donde cada línea contiene un ítem y las transacciones en las que aparece ese ítem.

Implementación de los algoritmos

En el presente documento se presenta la implementación de los algoritmos antes mencionados con la base de datos "orders" que contiene 29700 observaciones con 2 variables que son id_orders (Número de identificación que se le da a un cliente) y product_name (Nombre del producto).

Empezamos con la lectura de los datos, así:

orders <- read_delim("orders.csv", ";", escape_double = FALSE, 
                     trim_ws = TRUE)
## 
## -- Column specification --------------------------------------------------------
## cols(
##   order_id = col_double(),
##   product_name = col_character()
## )
head(orders)
## # A tibble: 6 x 2
##   order_id product_name         
##      <dbl> <chr>                
## 1        2 Organic Egg Whites   
## 2        2 Michigan Organic Kale
## 3        2 Garlic Powder        
## 4        2 Coconut Butter       
## 5        2 Natural Sweetener    
## 6        2 Carrots

Procedemos a convertir nuestra base de datos en un objeto del tipo transacción:

orders_split <- split(x = orders$product_name, f = orders$order_id)
transacciones <- as(orders_split, Class = "transactions")
transacciones
## transactions in sparse format with
##  29432 transactions (rows) and
##  24748 items (columns)

Realicemos una inspección de los datos, mirando el tamaño de las transacciones, así:

tamanyos <- size(transacciones)
summary(tamanyos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    5.00    8.00   10.09   14.00   71.00
quantile(tamanyos, probs = seq(0,1,0.1))
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##    1    2    4    5    7    8   10   12   15   20   71
data.frame(tamanyos) %>%
  ggplot(aes(x = tamanyos)) +
  geom_histogram() +
  labs(title = "Distribución del tamaño de las transacciones",
       x = "Tamaño") +
  theme_bw()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Notemos que el 90% de los clientes compran entre 1 y 20 ítems, siendo la mayor frecuencia de 6 a 8 ítems por cliente.

Analicemos los ítems que tienen mayor soporte dentro del conjunto de transacciones.

#frecuencia (relativa) de el item respecto al conjunto de datos que 
#contiene dicho item

frecuencia_items <- itemFrequency(x = transacciones, type = "relative")
frecuencia_items %>% sort(decreasing = TRUE) %>% head(5)
##                 Banana Bag of Organic Bananas   Organic Strawberries 
##             0.14885159             0.11976760             0.07977711 
##   Organic Baby Spinach   Organic Hass Avocado 
##             0.07546208             0.06689997
#frecuencia (absoluta) de el item respecto al total de items

frecuencia_items <- itemFrequency(x = transacciones, type = "absolute")
frecuencia_items %>% sort(decreasing = TRUE) %>% head(5)
##                 Banana Bag of Organic Bananas   Organic Strawberries 
##                   4381                   3525                   2348 
##   Organic Baby Spinach   Organic Hass Avocado 
##                   2221                   1969

Notemos que los 5 productos mas vendidos son:

Procedemos a las extraccion de los ítems. Para eso extraeremos aquellos ítems que al menos hayan sido comprado 30 veces. Se escogio 30 ya que de este modo aparezcan un número suficiente de itemsets y las reglas de asociacion que permitan mostrar las posibilidades de análisis que permite el paquete "arules". Naturalmente se puede considerar más ítems, pero debido a las limitaciones computacionales nos limitaremos a 30.

Apriori

Usaremos primero el algoritmo Apriori, así:

soporte <- 30 / dim(transacciones)[1]
itemsets <- apriori(data = transacciones,
                    parameter = list(support = soporte,
                                     minlen = 1,
                                     maxlen = 20,
                                     target = "frequent itemset"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime     support minlen
##          NA    0.1    1 none FALSE            TRUE       5 0.001019299      1
##  maxlen            target  ext
##      20 frequent itemsets TRUE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 29 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[24748 item(s), 29432 transaction(s)] done [1.09s].
## sorting and recoding items ... [1803 item(s)] done [0.02s].
## creating transaction tree ... done [0.06s].
## checking subsets of size 1 2 3 4 done [0.17s].
## sorting transactions ... done [0.03s].
## writing ... [3968 set(s)] done [0.01s].
## creating S4 object  ... done [0.02s].
summary(itemsets)
## set of 3968 itemsets
## 
## most frequent items:
##                 Banana Bag of Organic Bananas   Organic Baby Spinach 
##                    356                    305                    228 
##   Organic Strawberries   Organic Hass Avocado                (Other) 
##                    226                    187                   5063 
## 
## element (itemset/transaction) length distribution:sizes
##    1    2    3    4 
## 1803 1934  230    1 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   2.000   1.604   2.000   4.000 
## 
## summary of quality measures:
##     support         transIdenticalToItemsets     count       
##  Min.   :0.001019   Min.   :0.000e+00        Min.   :  30.0  
##  1st Qu.:0.001223   1st Qu.:0.000e+00        1st Qu.:  36.0  
##  Median :0.001597   Median :0.000e+00        Median :  47.0  
##  Mean   :0.002698   Mean   :2.766e-05        Mean   :  79.4  
##  3rd Qu.:0.002514   3rd Qu.:3.398e-05        3rd Qu.:  74.0  
##  Max.   :0.148852   Max.   :2.480e-03        Max.   :4381.0  
## 
## includes transaction ID lists: FALSE 
## 
## mining info:
##           data ntransactions     support confidence
##  transacciones         29432 0.001019299          1
top_20_itemsets <- sort(itemsets, by = "support", decreasing = TRUE)[1:20]

inspect(top_20_itemsets)
##      items                      support    transIdenticalToItemsets count
## [1]  {Banana}                   0.14885159 0.0024802936             4381 
## [2]  {Bag of Organic Bananas}   0.11976760 0.0021065507             3525 
## [3]  {Organic Strawberries}     0.07977711 0.0007135091             2348 
## [4]  {Organic Baby Spinach}     0.07546208 0.0009173689             2221 
## [5]  {Organic Hass Avocado}     0.06689997 0.0004077195             1969 
## [6]  {Organic Avocado}          0.05477032 0.0004077195             1612 
## [7]  {Large Lemon}              0.04651400 0.0004416961             1369 
## [8]  {Strawberries}             0.04535879 0.0010872520             1335 
## [9]  {Organic Raspberries}      0.04359201 0.0004756727             1283 
## [10] {Limes}                    0.04277657 0.0003397662             1259 
## [11] {Organic Whole Milk}       0.04134955 0.0004756727             1217 
## [12] {Organic Garlic}           0.03424844 0.0001698831             1008 
## [13] {Organic Yellow Onion}     0.03394265 0.0002038597              999 
## [14] {Cucumber Kirby}           0.03091873 0.0001359065              910 
## [15] {Organic Blueberries}      0.03047703 0.0004756727              897 
## [16] {Organic Zucchini}         0.03040908 0.0001019299              895 
## [17] {Organic Lemon}            0.02857434 0.0002378364              841 
## [18] {Organic Fuji Apple}       0.02786083 0.0001359065              820 
## [19] {Apple Honeycrisp Organic} 0.02667165 0.0001698831              785 
## [20] {Honeycrisp Apple}         0.02616200 0.0001359065              770

Ahora, presentemos de manera gráfica los ítems

as(top_20_itemsets, Class = "data.frame") %>%
  ggplot(aes(x = reorder(items, support), y = support)) +
  geom_col() +
  coord_flip() +
  labs(title = "Itemsets más frecuentes", x = "itemsets") +
  theme_bw()

A continuación se presentarán los 20 items más frecuentes formados por más de un item.

inspect(sort(itemsets[size(itemsets) > 1], decreasing = TRUE)[1:20])
##      items                                         support    
## [1]  {Bag of Organic Bananas,Organic Hass Avocado} 0.018891003
## [2]  {Bag of Organic Bananas,Organic Strawberries} 0.018687143
## [3]  {Banana,Organic Strawberries}                 0.017633868
## [4]  {Banana,Organic Baby Spinach}                 0.016614569
## [5]  {Banana,Organic Avocado}                      0.016376733
## [6]  {Bag of Organic Bananas,Organic Baby Spinach} 0.016206850
## [7]  {Bag of Organic Bananas,Organic Raspberries}  0.013182930
## [8]  {Banana,Strawberries}                         0.012877141
## [9]  {Organic Hass Avocado,Organic Strawberries}   0.012605328
## [10] {Banana,Large Lemon}                          0.012231585
## [11] {Organic Baby Spinach,Organic Strawberries}   0.012027725
## [12] {Banana,Cucumber Kirby}                       0.010532753
## [13] {Banana,Organic Hass Avocado}                 0.010532753
## [14] {Banana,Organic Fuji Apple}                   0.010362870
## [15] {Organic Baby Spinach,Organic Hass Avocado}   0.010226964
## [16] {Banana,Limes}                                0.009955151
## [17] {Organic Raspberries,Organic Strawberries}    0.009683338
## [18] {Banana,Organic Whole Milk}                   0.009411525
## [19] {Banana,Honeycrisp Apple}                     0.009071759
## [20] {Organic Avocado,Organic Baby Spinach}        0.008698016
##      transIdenticalToItemsets count
## [1]  6.795325e-05             556  
## [2]  1.019299e-04             550  
## [3]  3.397662e-05             519  
## [4]  0.000000e+00             489  
## [5]  0.000000e+00             482  
## [6]  1.359065e-04             477  
## [7]  0.000000e+00             388  
## [8]  1.359065e-04             379  
## [9]  3.397662e-05             371  
## [10] 0.000000e+00             360  
## [11] 3.397662e-05             354  
## [12] 0.000000e+00             310  
## [13] 0.000000e+00             310  
## [14] 1.359065e-04             305  
## [15] 6.795325e-05             301  
## [16] 0.000000e+00             293  
## [17] 0.000000e+00             285  
## [18] 3.397662e-05             277  
## [19] 3.397662e-05             267  
## [20] 3.397662e-05             256

Por último presentamos las posibles reglas de asociación con una confianza del 60%,

soporte <- 30 / dim(transacciones)[1]
reglas <- apriori(data = transacciones,
                  parameter = list(support = soporte,
                                   confidence = 0.60,
                                   # Se especifica que se creen reglas
                                   target = "rules"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport maxtime     support minlen
##         0.6    0.1    1 none FALSE            TRUE       5 0.001019299      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: 29 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[24748 item(s), 29432 transaction(s)] done [0.97s].
## sorting and recoding items ... [1803 item(s)] done [0.03s].
## creating transaction tree ... done [0.06s].
## checking subsets of size 1 2 3 4 done [0.16s].
## writing ... [4 rule(s)] done [0.03s].
## creating S4 object  ... done [0.03s].
summary(reglas)
## set of 4 rules
## 
## rule length distribution (lhs + rhs):sizes
## 2 3 
## 2 2 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     2.0     2.5     2.5     3.0     3.0 
## 
## summary of quality measures:
##     support           confidence        coverage             lift        
##  Min.   :0.001019   Min.   :0.6066   Min.   :0.001563   Min.   :  4.381  
##  1st Qu.:0.001172   1st Qu.:0.6253   1st Qu.:0.001843   1st Qu.: 52.518  
##  Median :0.001240   Median :0.6361   Median :0.002005   Median :163.645  
##  Mean   :0.001223   Mean   :0.6327   Mean   :0.001937   Mean   :150.268  
##  3rd Qu.:0.001291   3rd Qu.:0.6435   3rd Qu.:0.002098   3rd Qu.:261.396  
##  Max.   :0.001393   Max.   :0.6522   Max.   :0.002175   Max.   :269.400  
##      count     
##  Min.   :30.0  
##  1st Qu.:34.5  
##  Median :36.5  
##  Mean   :36.0  
##  3rd Qu.:38.0  
##  Max.   :41.0  
## 
## mining info:
##           data ntransactions     support confidence
##  transacciones         29432 0.001019299        0.6
inspect(sort(x = reglas, decreasing = TRUE, by = "confidence"))
##     lhs                                                       rhs                                                         support confidence    coverage      lift count
## [1] {Bartlett Pears,                                                                                                                                                    
##      Organic Fuji Apple}                                   => {Banana}                                                0.001019299  0.6521739 0.001562925   4.38137    30
## [2] {Total 2% Lowfat Greek Strained Yogurt With Blueberry,                                                                                                              
##      Total 2% Lowfat Greek Strained Yogurt with Peach}     => {Total 2% with Strawberry Lowfat Greek Strained Yogurt} 0.001393042  0.6406250 0.002174504  68.56318    41
## [3] {Yotoddler Organic Pear Spinach Mango Yogurt}          => {Organic Whole Milk Strawberry Beet Berry Yogurt Pouch} 0.001223158  0.6315789 0.001936668 269.40046    36
## [4] {Blueberry Whole Milk Yogurt Pouch}                    => {Organic Whole Milk Strawberry Beet Berry Yogurt Pouch} 0.001257135  0.6065574 0.002072574 258.72749    37

Eclat

El listado anterior muestra que los 5 productos que más se venden son: Banana, Bag of Organic Bananas, Organic Strawberries, Organic Baby Spinach y Organic Hass Avocado.

Se procede a extraer aquellos itemsets, incluidos los formados por un único item, que hayan sido comprados al menos 30 veces, esta vez haciendo uso del algoritmo Eclat:

## Eclat
## 
## parameter specification:
##  tidLists     support minlen maxlen            target  ext
##     FALSE 0.001019299      1     20 frequent itemsets TRUE
## 
## algorithmic control:
##  sparse sort verbose
##       7   -2    TRUE
## 
## Absolute minimum support count: 29 
## 
## create itemset ... 
## set transactions ...[24748 item(s), 29432 transaction(s)] done [1.00s].
## sorting and recoding items ... [1803 item(s)] done [0.02s].
## creating sparse bit matrix ... [1803 row(s), 29432 column(s)] done [0.01s].
## writing  ... [3968 set(s)] done [4.12s].
## Creating S4 object  ... done [0.00s].
## set of 3968 itemsets
## 
## most frequent items:
##                 Banana Bag of Organic Bananas   Organic Baby Spinach 
##                    356                    305                    228 
##   Organic Strawberries   Organic Hass Avocado                (Other) 
##                    226                    187                   5063 
## 
## element (itemset/transaction) length distribution:sizes
##    1    2    3    4 
## 1803 1934  230    1 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   2.000   1.604   2.000   4.000 
## 
## summary of quality measures:
##     support         transIdenticalToItemsets     count       
##  Min.   :0.001019   Min.   :  30.0           Min.   :  30.0  
##  1st Qu.:0.001223   1st Qu.:  36.0           1st Qu.:  36.0  
##  Median :0.001597   Median :  47.0           Median :  47.0  
##  Mean   :0.002698   Mean   :  79.4           Mean   :  79.4  
##  3rd Qu.:0.002514   3rd Qu.:  74.0           3rd Qu.:  74.0  
##  Max.   :0.148852   Max.   :4381.0           Max.   :4381.0  
## 
## includes transaction ID lists: FALSE 
## 
## mining info:
##           data ntransactions     support
##  transacciones         29432 0.001019299

Se han encontrado un total de 3968 itemsets frecuentes que superan el soporte mínimo, la mayoría de ellos (1934) formados por dos ítems. En el siguiente listado se muestran los 20 itemsets con mayor soporte que, como cabe esperar, son los formados por ítems individuales (los itemsets de menor tamaño).

Se muestran los top 20 itemsets de mayor a menor soporte.

##      items                      support    transIdenticalToItemsets count
## [1]  {Banana}                   0.14885159 4381                     4381 
## [2]  {Bag of Organic Bananas}   0.11976760 3525                     3525 
## [3]  {Organic Strawberries}     0.07977711 2348                     2348 
## [4]  {Organic Baby Spinach}     0.07546208 2221                     2221 
## [5]  {Organic Hass Avocado}     0.06689997 1969                     1969 
## [6]  {Organic Avocado}          0.05477032 1612                     1612 
## [7]  {Large Lemon}              0.04651400 1369                     1369 
## [8]  {Strawberries}             0.04535879 1335                     1335 
## [9]  {Organic Raspberries}      0.04359201 1283                     1283 
## [10] {Limes}                    0.04277657 1259                     1259 
## [11] {Organic Whole Milk}       0.04134955 1217                     1217 
## [12] {Organic Garlic}           0.03424844 1008                     1008 
## [13] {Organic Yellow Onion}     0.03394265  999                      999 
## [14] {Cucumber Kirby}           0.03091873  910                      910 
## [15] {Organic Blueberries}      0.03047703  897                      897 
## [16] {Organic Zucchini}         0.03040908  895                      895 
## [17] {Organic Lemon}            0.02857434  841                      841 
## [18] {Organic Fuji Apple}       0.02786083  820                      820 
## [19] {Apple Honeycrisp Organic} 0.02667165  785                      785 
## [20] {Honeycrisp Apple}         0.02616200  770                      770

Para representarlos con ggplot se convierte a dataframe

Se muestran los 20 itemsets más frecuentes formados por más de un ítem.

##      items                                         support    
## [1]  {Bag of Organic Bananas,Organic Hass Avocado} 0.018891003
## [2]  {Bag of Organic Bananas,Organic Strawberries} 0.018687143
## [3]  {Banana,Organic Strawberries}                 0.017633868
## [4]  {Banana,Organic Baby Spinach}                 0.016614569
## [5]  {Banana,Organic Avocado}                      0.016376733
## [6]  {Bag of Organic Bananas,Organic Baby Spinach} 0.016206850
## [7]  {Bag of Organic Bananas,Organic Raspberries}  0.013182930
## [8]  {Banana,Strawberries}                         0.012877141
## [9]  {Organic Hass Avocado,Organic Strawberries}   0.012605328
## [10] {Banana,Large Lemon}                          0.012231585
## [11] {Organic Baby Spinach,Organic Strawberries}   0.012027725
## [12] {Banana,Cucumber Kirby}                       0.010532753
## [13] {Banana,Organic Hass Avocado}                 0.010532753
## [14] {Banana,Organic Fuji Apple}                   0.010362870
## [15] {Organic Baby Spinach,Organic Hass Avocado}   0.010226964
## [16] {Banana,Limes}                                0.009955151
## [17] {Organic Raspberries,Organic Strawberries}    0.009683338
## [18] {Banana,Organic Whole Milk}                   0.009411525
## [19] {Banana,Honeycrisp Apple}                     0.009071759
## [20] {Organic Avocado,Organic Baby Spinach}        0.008698016
##      transIdenticalToItemsets count
## [1]  556                      556  
## [2]  550                      550  
## [3]  519                      519  
## [4]  489                      489  
## [5]  482                      482  
## [6]  477                      477  
## [7]  388                      388  
## [8]  379                      379  
## [9]  371                      371  
## [10] 360                      360  
## [11] 354                      354  
## [12] 310                      310  
## [13] 310                      310  
## [14] 305                      305  
## [15] 301                      301  
## [16] 293                      293  
## [17] 285                      285  
## [18] 277                      277  
## [19] 267                      267  
## [20] 256                      256

Filtrado de itemsets

## set of 356 itemsets
##      items                                       support    
## [1]  {Banana,Sweet Potato Yam}                   0.001019299
## [2]  {1% Low Fat Milk,Banana}                    0.001223158
## [3]  {Banana,Large Brown Eggs}                   0.001155205
## [4]  {Banana,Black Plum}                         0.001223158
## [5]  {Banana,Vitamin D Organic Whole Milk}       0.001087252
## [6]  {Banana,Green Peas}                         0.001155205
## [7]  {Almond Breeze Original Almond Milk,Banana} 0.001630878
## [8]  {Banana,Tommy/Kent/Keitt/Haden Mango}       0.001053275
## [9]  {Banana,Whole Wheat Bread}                  0.001189182
## [10] {Banana,Kiwi}                               0.001155205
##      transIdenticalToItemsets count
## [1]  30                       30   
## [2]  36                       36   
## [3]  34                       34   
## [4]  36                       36   
## [5]  32                       32   
## [6]  34                       34   
## [7]  48                       48   
## [8]  31                       31   
## [9]  35                       35   
## [10] 34                       34

Puede observarse que muchos itemsets están a su vez contenidos en itemsets de orden superior, es decir, existen itemsets que son subsets de otros.

Para identificar cuáles son, o cuales no lo son, se puede emplear la función is.subset(). Encontrar los itemsets que son subsets de otros itemsets implica comparar todos los pares de itemsets y determinar si uno está contenido en el otro. La función is.subset() realiza comparaciones entre dos conjuntos de itemsets y devuelve una matriz lógica que determina si el itemset de la fila está contenido en cada itemset de las columnas.

Para encontrar los subsets dentro de un conjunto de itemsets, se compara el conjunto de itemsets con sigo mismo.

Para conocer el total de itemsets que son subsets de otros itemsets se cuenta el número total de TRUE en la matriz resultante. La suma de una matriz lógica devuelve el número de TRUEs.

## [1] 9230

Para crear las reglas de asociación se sigue el mismo proceso que para obtener itemsets frecuentes pero, además de especificar un soporte mínimo, se tiene que establecer una confianza mínima para que una regla se incluya en los resultados. En este caso, se emplea una confianza mínima del 60%.

## set of 4 rules
## 
## rule length distribution (lhs + rhs):sizes
## 2 3 
## 2 2 
## 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     2.0     2.5     2.5     3.0     3.0 
## 
## summary of quality measures:
##     support           confidence          lift            itemset     
##  Min.   :0.001019   Min.   :0.6066   Min.   :  4.381   Min.   :  5.0  
##  1st Qu.:0.001172   1st Qu.:0.6253   1st Qu.: 52.518   1st Qu.:  6.5  
##  Median :0.001240   Median :0.6361   Median :163.645   Median :141.0  
##  Mean   :0.001223   Mean   :0.6327   Mean   :150.268   Mean   :265.5  
##  3rd Qu.:0.001291   3rd Qu.:0.6435   3rd Qu.:261.396   3rd Qu.:400.0  
##  Max.   :0.001393   Max.   :0.6522   Max.   :269.400   Max.   :775.0  
## 
## mining info:
##           data ntransactions     support confidence
##  transacciones         29432 0.001019299        0.6

Se han identificado un total de 4 reglas, la mayoría de ellas formadas por 3 ítems en el antecedente (parte izquierda de la regla).

##     lhs                                                       rhs                                                         support confidence      lift itemset
## [1] {Bartlett Pears,                                                                                                                                          
##      Organic Fuji Apple}                                   => {Banana}                                                0.001019299  0.6521739   4.38137     775
## [2] {Total 2% Lowfat Greek Strained Yogurt With Blueberry,                                                                                                    
##      Total 2% Lowfat Greek Strained Yogurt with Peach}     => {Total 2% with Strawberry Lowfat Greek Strained Yogurt} 0.001393042  0.6406250  68.56318     275
## [3] {Yotoddler Organic Pear Spinach Mango Yogurt}          => {Organic Whole Milk Strawberry Beet Berry Yogurt Pouch} 0.001223158  0.6315789 269.40046       5
## [4] {Blueberry Whole Milk Yogurt Pouch}                    => {Organic Whole Milk Strawberry Beet Berry Yogurt Pouch} 0.001257135  0.6065574 258.72749       7

Conclusiones

Como podemos observar las reglas de asociación que obtuvimos tanto en el algoritmo Apriori como en el Eclat son iguales. Con una confianza del 60% obtuvimos 4 reglas de asociación, las cuales son:

##     lhs                                                       rhs                                                         support confidence      lift itemset
## [1] {Bartlett Pears,                                                                                                                                          
##      Organic Fuji Apple}                                   => {Banana}                                                0.001019299  0.6521739   4.38137     775
## [2] {Total 2% Lowfat Greek Strained Yogurt With Blueberry,                                                                                                    
##      Total 2% Lowfat Greek Strained Yogurt with Peach}     => {Total 2% with Strawberry Lowfat Greek Strained Yogurt} 0.001393042  0.6406250  68.56318     275
## [3] {Yotoddler Organic Pear Spinach Mango Yogurt}          => {Organic Whole Milk Strawberry Beet Berry Yogurt Pouch} 0.001223158  0.6315789 269.40046       5
## [4] {Blueberry Whole Milk Yogurt Pouch}                    => {Organic Whole Milk Strawberry Beet Berry Yogurt Pouch} 0.001257135  0.6065574 258.72749       7

Existieron inconvenientes al momento de querer implementar el algoritmo FP-Growth, pues este al no ser tan usado como los algoritmos previamente vistos no ha tenido una actualización para poder usarlo en este software.