Market Basket Analysis
Introducción
En el análisis de asociación, nos interesa el número absoluto de transacciones realizadas que contienen un conjunto particular de elementos (items). Una aplicación típica del análisis de asociación es el análisis de la cesta de mercado, que se usa para observar el comportamiento de compra de los consumidores en los supermercados.
Market Basket Analysis
Al encontrar relaciones entre los artículos que la gente compra, un minorista puede usar esta información para generar estrategias de marketing para incrementar sus ingresos.
El modelo de la cesta de mercado
Este modelo se basa en la relación entre los items y las transacciones, con algunas suposiciones sobre la forma de los datos.
Cada transacción consta de un conjunto de items (itemset).
La cantidad de productos en una transacción es menor que la cantidad total de items ofrecidos por un supermercado.
El objetivo es identificar los itemsets frecuentes, es decir, los conjuntos de artículos que aparecen en muchas cestas.
Supóngase la siguiente base de datos de un supermercado
| Transacción 1 | manzana, cerveza, arroz, carne |
| Transacción 2 | manzana, cerveza, arroz |
| Transacción 3 | manzana, cerveza |
| Transacción 4 | manzana, kiwi |
| Transacción 5 | leche, cerveza, arroz, carne |
| Transacción 6 | leche, cerveza, arroz |
| Transacción 7 | leche, cerveza |
| Transacción 8 | leche, kiwi |
En nuestro ejemplo podemos ver que “manzana” se compra junto con “cerveza” en tres transacciones
Reglas de asociación
Aunque estamos interesados en extraer conjuntos frecuentes de elementos, esta información a menudo se presenta como una colección de implicaciones del tipo “si esto, entonces aquello”, denominadas reglas de asociación.
La forma de una regla de asociación se ve como \[A ~ \rightarrow ~ B\] donde \(A\) es un conjunto de elementos, también llamado antecedente o lado izquierdo (LHS), y \(B\) es solo un elemento, también llamado consecuente o lado derecho (RHS). La regla se lee de la siguiente manera si todos los elementos de \(A\) aparecen en alguna cesta, entonces es “probable” que \(B\) también aparezca en esa cesta. Hay que notar que el símbolo de implicación \(\rightarrow\) no indica una relación causal entre \(A\) & \(B\) sino que es una estimación de la probabilidad condicional de \(B\) dado \(A\).
Un ejemplo de una regla de asociación podría ser
\[\{cafe, ~azucar\} ~ \rightarrow ~ \{leche\}\]
lo que significa que si se compran café y azúcar, es probable que también se compre leche.
Medidas de Asociación
Consideremos que tenemos una tienda de comestibles con decenas de miles de productos diferentes. No sería eficiente encontrar todas las reglas de asociación para todas las posibles combinaciones de productos. En su lugar, querríamos seleccionar solamente las reglas potencialmente “relevantes”. Por lo tanto, utilizaremos medidas de asociación (soporte, confianza y elevación) para reducir el número de relaciones a analizar.
Soporte
Mide la frecuencia con la que se encuentra un itemset en todo el conjunto de transacciones. Puede calcularse como
\[ Soporte(A) = \frac{frecuencia(A)}{n}; ~~ \small{n = \mbox{número total de transacciones}} \]
Por lo general, se utiliza un umbral de soporte específico para reducir la cantidad de itemsets que necesitamos analizar. Al comienzo del análisis, podríamos establecer nuestro umbral de soporte entre el 1% y el 10%.
Volviendo a nuestro ejemplo el \(\small{Soporte(manzana) = \frac{4}{8}}\), o 50%. El \(\small{Soporte(manzana, cerveza, arroz) = \frac{2}{8}}\), o 25%.
Confianza
Nos dice la probabilidad de que se compre \(B\) dado que se compro \(A\), expresado como \(A ~ \rightarrow ~ B\). Se calcula como
\[ Confianza(A ~ \rightarrow ~ B) = \frac{Soporte(A \cup B)}{Soporte(A)} \]
Por tanto, la confianza se puede interpretar como una estimación de la probabilidad \(P(B | A)\). La confianza está dirigida, por lo que, generalmente da valores diferentes para las reglas \(A ~ \rightarrow ~ B\) & \(B ~ \rightarrow ~ A\).
Volviendo a nuestro ejemplo la \(\small{Confiaza(manzana ~ \rightarrow ~ cerveza) = P(cerveza | manzana) = \frac{0.375}{0.5} = 0.75}\), o 75%. Hay que tener en cuenta que la confianza puede deformar la importancia de una asociación, debido a que solo considera la popularidad de \(A\) (en el ejemplo, manzana), pero no la de \(B\) (en en el ejemplo, cerveza).
Para tener en cuenta la popularidad individual de ambos elementos, utilizaremos una tercera medida denominada “lift”, en español elevación.
Lift
Nos dice qué tan probable es que se compre \(B\) cuando se compra \(A\) mientras se consideran ambas popularidades, es decir, mide cuántas veces más \(A\) & \(B\) ocurren juntas si fueran estadísticamente independientes. La fórmula es
\[ Lift(A ~ \rightarrow ~ B) = \frac{Confianza(A ~ \rightarrow ~ B)}{Soporte(A)} = \frac{Soporte(A \cup B)}{Soporte(A) \cdot Soporte(B)} = \]
El valor de lift se puede interpretar como
\(Lift = 1\): implica que no hay asociación entre \(A\) & \(B\).
\(Lift > 1\): implica que es probable que se compre \(B\) si se compra \(A\).
\(Lift < 1\): implica que es poco probable que se compre \(B\) si se compra \(A\).
Volviendo a nuestro ejemplo \(\small{Lift(manzana ~ \rightarrow ~ cerveza) = \frac{0.75}{0.75} = 1}\), lo que implica que no hay asociación entre los elementos.
Algoritmo A-Priori
Existen varios algoritmos para el análisis de las reglas de asociación (AIS, SETM, FP-Growth, Eclat), pero nosotros nos centraremos en el algoritmo A-Priori que funciona eliminando conjuntos de elementos mirando primero los conjuntos más pequeños y reconociendo que un conjunto grande no puede ser frecuente a menos que todos sus subconjuntos lo sean. En pocas palabras, el algoritmo establece que si un conjunto de elementos es poco frecuente, todos sus subconjuntos también deben serlo.
Esto significa que si se encuentra que el elemento \(\{cerveza\}\) es poco frecuente, podemos esperar que el conjunto de elementos \(\{cerveza, ~pizza\}\) sea igual o incluso menos frecuente. Por lo tanto, al consolidar la lista de conjuntos de elementos frecuentes, no necesitamos considerar \(\{cerveza, ~pizza\}\) ni ninguna otra combinación que contenga a \(\{cerveza\}\).
El algoritmo A-Priori utiliza una estrategia de búsqueda denominada en amplitud, que se puede ver en este árbol de decisiones:
Búsqueda por amplitud
Con este principio, se pueden eliminar (podar) secciones del árbol de decisiones para limitar el número de conjuntos de elementos que deben examinarse
La lista de itemsets frecuentes se puede obtener de la siguiente manera:
Paso 0: comience con itemsets que contengan un solo elemento
Paso 1: determine el umbral de soporte para los itemsets. Conserve los que cumplan con su umbral mínimo de soporte y elimine los que no lo hagan.
Paso 2: con los itemsets que ha guardado en el Paso 1, genere todas las combinaciones de elementos posibles.
Paso 3: repita los pasos 1 y 2 hasta que no haya más conjuntos de elementos nuevos.
Algoritmo A-Priori
En la animación, podemos ver que se determinó que \(\small{\{manzana\}}\) tenía un soporte menor al umbral deseado, por lo que se eliminó y no es necesario considerar todas las combinaciones que la contienen. Esto redujo el número de itemsets a considerar.
Hay que tener en cuenta que el umbral para el soporte elegido en el paso 1 puede basarse en un análisis formal o en nuestra experiencia previa. Si sabemos que las ventas de un determinado producto tienden a generar un mayor impacto en las ganancias podríamos tomar esa proporción como nuestro umbral para el soporte, de lo contrario se debe usuar 10% como valor inicial.
Hasta ahora hemos explicado como usar el algoritmo para identificar itemsets con un Soporte alto, sin embargo, el mismo principio puede aplicarse para identificar asociaciones con alto grado de confianza o de lift. Ya que, una vez que se han encontrado los itemsets con mayor Soporte detectar las reglas basándonos en la Confianza o en el Lift es computacionalmente menos costoso, puesto que estos valores se calculan a partir de los valores obtenidos en el Soporte.
Del mismo modo que se hizo con el Soporte, las reglas candidatas con un valor inferior a nuestro umbral, de confianza o de lift, pueden podarse utilizando el algoritmo A-Priori, así se necesitará examinar menos reglas.
En resumenm al usar el algoritmo A-Priori sobre un conjunto de transacciones nuestro objetivo es identificar todas las reglas de asociación que tengan un valor igual o mayor al umbral de Soporte y/o de Confianza
Implementación en R: El paquete arules
“El paquete
arulesproporciona una infraestructura para representar, manipular y analizar patrones y datos transaccionales (conjuntos de elementos frecuentes y reglas de asociación). También proporciona una implementación en C de los algoritmos Apriori y Eclat.” PDF
Ejemplo del “Análisis de la Cesta de Compra” (MBA)
Carga de las librerias
Importación del dataset
El dataset que usaremos provie de Kaggle, contiene 38,765 filas de órdenes de compra de una tienda de comestibles. Los datos pueden ser descargados aquí.
groceries_data <- read.csv("Groceries_dataset.csv")
groceries_data$Date <- as.Date(groceries_data$Date, format = "%d-%m-%Y")
summary(groceries_data) Member_number Date itemDescription
Min. :1000 Min. :2014-01-01 Length:38765
1st Qu.:2002 1st Qu.:2014-07-12 Class :character
Median :3005 Median :2015-01-21 Mode :character
Mean :3004 Mean :2015-01-09
3rd Qu.:4007 3rd Qu.:2015-07-10
Max. :5000 Max. :2015-12-30
Vamos los primeros seis renglones del dataset
| Member_number | Date | itemDescription |
|---|---|---|
| 1808 | 2015-07-21 | tropical fruit |
| 2552 | 2015-01-05 | whole milk |
| 2300 | 2015-09-19 | pip fruit |
| 1187 | 2015-12-12 | other vegetables |
| 3037 | 2015-02-01 | whole milk |
| 4941 | 2015-02-14 | rolls/buns |
Revisaremos si hay algún NA en nuestra información
Preparación de los datos
Antes de continuar revisemos si cada línea de nuestro dataset corresponde a una única transacción, es decir, que cada renglón corresponda a todos los productos comprados por un mismo cliente en un mismo día.
| Member_number | Date | itemDescription | |
|---|---|---|---|
| 13332 | 1000 | 2014-06-24 | whole milk |
| 29481 | 1000 | 2014-06-24 | pastry |
| 32852 | 1000 | 2014-06-24 | salty snack |
| 4844 | 1000 | 2015-03-15 | sausage |
| 8396 | 1000 | 2015-03-15 | whole milk |
| 20993 | 1000 | 2015-03-15 | semi-finished bread |
Podemos ver que para el cliente 1000 las compras que realizo el día 15/03/2015 no se encuentran en un solo renglón, debemos corregir esto, de lo contrario no podremos trabajar con nuestra información.
groceries_data1 <- ddply(sorted, c("Member_number","Date"),
function(df1)
paste(df1$itemDescription, collapse = ","))
groceries_data1 <- groceries_data1 %>% dplyr::rename("Transaccion" = V1)| Member_number | Date | Transacción |
|---|---|---|
| 1000 | 2014-06-24 | whole milk,pastry,salty snack |
| 1000 | 2015-03-15 | sausage,whole milk,semi-finished bread,yogurt |
| 1000 | 2015-05-27 | soda,pickled vegetables |
| 1000 | 2015-07-24 | canned beer,misc. beverages |
| 1000 | 2015-11-25 | sausage,hygiene articles |
| 1001 | 2014-02-07 | sausage,whole milk,rolls/buns |
Como ya tenemos la información en el formato requerido, procedemos a seleccionar únicamente la columna Transaccion puesto que para nuestro análisis Member_number y Date no son importantes.
Convertir un archivo CSV a formato basket
Para usar la función apriori() necesitamos que nuestro .csv sea un objeto del tipo "transactions"
lista_transacciones <- read.transactions("cestas_mercado.csv",
format = 'basket',
rm.duplicates = TRUE,
sep = ',',
cols = 1)distribution of transactions with duplicates:
items
1 2 3 4
662 39 5 1
transactions as itemMatrix in sparse format with
14964 rows (elements/itemsets/transactions) and
168 columns (items) and a density of 0.01511843
most frequent items:
whole milk other vegetables rolls/buns soda
2363 1827 1646 1453
yogurt (Other)
1285 29433
element (itemset/transaction) length distribution:
sizes
1 2 3 4 5 6 7 8 9 10
206 10012 2727 1273 338 179 113 96 19 1
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 2.00 2.00 2.54 3.00 10.00
includes extended item information - examples:
labels
1 abrasive cleaner
2 artif. sweetener
3 baby cosmetics
includes extended transaction information - examples:
transactionID
1
2 1
3 2
Vemos que hay 14,964 transacciones y 168 artículos. Las transacciones aquí son las colecciones o subconjuntos de estos 168 artículos.
El resumen nos proporciona otra información útil:
density: porcentaje de celdas no vacías en la matriz. Es decir, el número total de artículos que se compraron dividido por el número total de artículos posibles en esa matriz.
Artículos más frecuentes: los articulos que más se compraron son: leche entera, otras verduras, panecillos/bollos, refresco y yogur
Tamaño de las transacciones: 206 transacciones fueron de un solo artículo, 10012 transacciones para fueron de 2 artículos, hasta llegar a la transacción más grande: 1 transacción de 10 artículos. Esto indica que la mayoría de los clientes compran de 2 a 5 artículos en cada transacción.
Veamos de manera grafica cuales son los 10 articulos más comprados
itemFrequencyPlot(lista_transacciones, topN = 10, type = 'absolute',
col = "indian red", ylab = "frecuencia",
main = "Los 10 productos más comprados")Reglas de asociación con la función apriori()
El algoritmo emplea la búsqueda por niveles para encontrar los itemsets frecuentes.
Como carecemos de conocimiento previo usaremos un soporte de, al menos, 0.01% y un nivel de confianza de, al menos, 5%.
reglas_asociacion <- apriori(lista_transacciones,
parameter = list(minlen = 2,
supp = 0.001,
conf = 0.05))Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen
0.05 0.1 1 none FALSE TRUE 5 0.001 2
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: 14
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[168 item(s), 14964 transaction(s)] done [0.01s].
sorting and recoding items ... [149 item(s)] done [0.00s].
creating transaction tree ... done [0.01s].
checking subsets of size 1 2 3 4 done [0.02s].
writing ... [450 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
set of 450 rules
rule length distribution (lhs + rhs):sizes
2 3
423 27
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.00 2.00 2.00 2.06 2.00 3.00
summary of quality measures:
support confidence coverage lift
Min. :0.001002 Min. :0.05000 Min. :0.005346 Min. :0.5195
1st Qu.:0.001270 1st Qu.:0.06397 1st Qu.:0.015972 1st Qu.:0.7673
Median :0.001938 Median :0.08108 Median :0.023590 Median :0.8350
Mean :0.002760 Mean :0.08759 Mean :0.033723 Mean :0.8859
3rd Qu.:0.003341 3rd Qu.:0.10482 3rd Qu.:0.043705 3rd Qu.:0.9601
Max. :0.014836 Max. :0.25581 Max. :0.157912 Max. :2.1831
count
Min. : 15.0
1st Qu.: 19.0
Median : 29.0
Mean : 41.3
3rd Qu.: 50.0
Max. :222.0
mining info:
data ntransactions support confidence
lista_transacciones 14964 0.001 0.05
El resumen nos dice lo siguiente:
Número de reglas: 450.
Distribución de las reglas por longitud: las reglas basadas en un itemset de dos elementos son las más numerosas.
Estadísticas básicas para las medidas de asociación
Tenemos 450 reglas, no mostraré todas ellas, inspeccionaremos las primeras 10.
reglas_asociacion <- sort(reglas_asociacion,
by = c('confidence', 'lift'),
decreasing = TRUE)
top10_reglas <- inspect(reglas_asociacion[1:10]) top10_reglas %>% kbl(align = c('l', 'c', 'l', rep('c', times = 5))) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))| lhs | rhs | support | confidence | coverage | lift | count | ||
|---|---|---|---|---|---|---|---|---|
| [1] | {sausage,yogurt} | => | {whole milk} | 0.0014702 | 0.2558140 | 0.0057471 | 1.6199746 | 22 |
| [2] | {rolls/buns,sausage} | => | {whole milk} | 0.0011361 | 0.2125000 | 0.0053462 | 1.3456835 | 17 |
| [3] | {sausage,soda} | => | {whole milk} | 0.0010692 | 0.1797753 | 0.0059476 | 1.1384500 | 16 |
| [4] | {semi-finished bread} | => | {whole milk} | 0.0016707 | 0.1760563 | 0.0094894 | 1.1148993 | 25 |
| [5] | {rolls/buns,yogurt} | => | {whole milk} | 0.0013365 | 0.1709402 | 0.0078188 | 1.0825005 | 20 |
| [6] | {sausage,whole milk} | => | {yogurt} | 0.0014702 | 0.1641791 | 0.0089548 | 1.9118880 | 22 |
| [7] | {detergent} | => | {whole milk} | 0.0014034 | 0.1627907 | 0.0086207 | 1.0308929 | 21 |
| [8] | {ham} | => | {whole milk} | 0.0027399 | 0.1601562 | 0.0171077 | 1.0142100 | 41 |
| [9] | {bottled beer} | => | {whole milk} | 0.0071505 | 0.1578171 | 0.0453087 | 0.9993970 | 107 |
| [10] | {frozen fish} | => | {whole milk} | 0.0010692 | 0.1568627 | 0.0068164 | 0.9933534 | 16 |
La interpretación sería:
El 25% de los clientes que compraron “salchichas, yogurt” también compraron “leche entera”
El 21% de los clientes que compraron “panecillos/bollos, salchichas” también compraron “leche entera”
Visualizaciones graficas para las 10 mejores reglas
Modificando los parámetros del algoritmo
reglas_asociacion2 <- apriori(lista_transacciones,
parameter = list(minlen = 3,
supp = 0.001,
conf = 0.1))Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen
0.1 0.1 1 none FALSE TRUE 5 0.001 3
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: 14
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[168 item(s), 14964 transaction(s)] done [0.01s].
sorting and recoding items ... [149 item(s)] done [0.00s].
creating transaction tree ... done [0.01s].
checking subsets of size 1 2 3 4 done [0.00s].
writing ... [17 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
set of 17 rules
rule length distribution (lhs + rhs):sizes
3
17
Min. 1st Qu. Median Mean 3rd Qu. Max.
3 3 3 3 3 3
summary of quality measures:
support confidence coverage lift
Min. :0.001002 Min. :0.1018 Min. :0.005346 Min. :0.7214
1st Qu.:0.001136 1st Qu.:0.1172 1st Qu.:0.008086 1st Qu.:0.8897
Median :0.001136 Median :0.1269 Median :0.008955 Median :1.1081
Mean :0.001207 Mean :0.1437 Mean :0.008821 Mean :1.1794
3rd Qu.:0.001337 3rd Qu.:0.1642 3rd Qu.:0.010559 3rd Qu.:1.2297
Max. :0.001470 Max. :0.2558 Max. :0.011160 Max. :2.1831
count
Min. :15.00
1st Qu.:17.00
Median :17.00
Mean :18.06
3rd Qu.:20.00
Max. :22.00
mining info:
data ntransactions support confidence
lista_transacciones 14964 0.001 0.1
El resumen nos dice lo siguiente:
Número de reglas: 17.
Distribución de las reglas por longitud: solo se basa en tres items
Estadísticas básicas para las medidas de asociación
reglas_asociacion2 <- sort(reglas_asociacion2,
by = c('confidence', 'lift'),
decreasing = TRUE)
reglas2 <- inspect(reglas_asociacion2) reglas2 %>% kbl(align = c('l', 'c', 'l', rep('c', times = 5))) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))| lhs | rhs | support | confidence | coverage | lift | count | ||
|---|---|---|---|---|---|---|---|---|
| [1] | {sausage,yogurt} | => | {whole milk} | 0.0014702 | 0.2558140 | 0.0057471 | 1.6199746 | 22 |
| [2] | {rolls/buns,sausage} | => | {whole milk} | 0.0011361 | 0.2125000 | 0.0053462 | 1.3456835 | 17 |
| [3] | {sausage,soda} | => | {whole milk} | 0.0010692 | 0.1797753 | 0.0059476 | 1.1384500 | 16 |
| [4] | {rolls/buns,yogurt} | => | {whole milk} | 0.0013365 | 0.1709402 | 0.0078188 | 1.0825005 | 20 |
| [5] | {sausage,whole milk} | => | {yogurt} | 0.0014702 | 0.1641791 | 0.0089548 | 1.9118880 | 22 |
| [6] | {rolls/buns,soda} | => | {other vegetables} | 0.0011361 | 0.1404959 | 0.0080861 | 1.1507281 | 17 |
| [7] | {other vegetables,yogurt} | => | {whole milk} | 0.0011361 | 0.1404959 | 0.0080861 | 0.8897081 | 17 |
| [8] | {whole milk,yogurt} | => | {sausage} | 0.0014702 | 0.1317365 | 0.0111601 | 2.1830624 | 22 |
| [9] | {sausage,whole milk} | => | {rolls/buns} | 0.0011361 | 0.1268657 | 0.0089548 | 1.1533523 | 17 |
| [10] | {rolls/buns,soda} | => | {whole milk} | 0.0010024 | 0.1239669 | 0.0080861 | 0.7850365 | 15 |
| [11] | {whole milk,yogurt} | => | {rolls/buns} | 0.0013365 | 0.1197605 | 0.0111601 | 1.0887581 | 20 |
| [12] | {sausage,whole milk} | => | {soda} | 0.0010692 | 0.1194030 | 0.0089548 | 1.2296946 | 16 |
| [13] | {other vegetables,soda} | => | {rolls/buns} | 0.0011361 | 0.1172414 | 0.0096899 | 1.0658566 | 17 |
| [14] | {other vegetables,soda} | => | {whole milk} | 0.0011361 | 0.1172414 | 0.0096899 | 0.7424460 | 17 |
| [15] | {other vegetables,rolls/buns} | => | {whole milk} | 0.0012029 | 0.1139241 | 0.0105587 | 0.7214386 | 18 |
| [16] | {other vegetables,rolls/buns} | => | {soda} | 0.0011361 | 0.1075949 | 0.0105587 | 1.1080872 | 17 |
| [17] | {whole milk,yogurt} | => | {other vegetables} | 0.0011361 | 0.1017964 | 0.0111601 | 0.8337610 | 17 |
Conclusión
En la vida real, los datos transaccionales a menudo pueden ser complejos y tener un volumen enorme, tanto en el número de transacciones como en la cantidad de elementos (items) monitoreados. Si se tienen \(k\) items que podrían o no estar en una transacción, hay \(2^k\) posibles conjuntos en los que se deben buscar reglas.
Si bien el algoritmo A-Priori es uno de los más usados, no es de los más eficietes para la construcción de los itemsets frecuentes ya que escanea todas las transacciones un total de \(k_{max}+1\), donde \(k_{max}\) es el tamaño máximo de itemset permitido. Una alternativa sería usar los algoritmos FP-growth, implementado en el paquete rCBA, o Eclat, implementado en el paquete arules mediante la función eclat()
Si buscamos que nuestras reglas de asociación se apliquen a una fracción razonable de las transacciones, entonces el soporte de \(A\) debe ser suficientemente alto. En la práctica, “suficientemente alto” suele ser entre el 1% y el 10% de las transacciones. También queremos que la confianza de la regla sea suficientemente alta, aproximadamente 50%, de lo contrario la regla tiene poco efecto práctico.
Además, se debe suponer que no hay demasiados conjuntos de elementos frecuentes y, por lo tanto, no hay demasiados candidatos para convertirse en reglas de alto apoyo y alta confianza. La razón de esto es que si les damos a las empresas muchas reglas de asociación que cumplen con nuestros umbrales de apoyo y confianza, no podrán leerlas, y mucho menos actuar en consecuencia. Por lo tanto, es normal ajustar los umbrales de soporte y confianza para que no obtengamos demasiados itemsets frecuentes.
Referencias
Michael Hahsler. arulesViz: Interactive visualization of association rules with R. R Journal, 9(2):163-175, December 2017.
Michael Hahsler. An R Companion for Introduction to Data Mining: Chapter 5. Online Book. https://mhahsler.github.io/Introduction_to_Data_Mining_R_Examples/book/, 2021.
Reglas de asociación y algoritmo Apriori con R by Joaquín Amat Rodrigo, available under a Attribution 4.0 International (CC BY 4.0) at https://www.cienciadedatos.net/documentos/43_reglas_de_asociacion
S. Vijayarani and S. Sharmila, “Comparative analysis of association rule mining algorithms”, 2016 International Conference on Inventive Computation Technologies (ICICT), 2016, pp. 1-6, doi: 10.1109/INVENTIVE.2016.7830203.
A Gentle Introduction on Market Basket Analysis - Association Rules