Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Minería de Reglas de asociación

(Association Rule Mining)

La minería de reglas de asociación se usa cuando desea encontrar una asociación entre diferentes objetos en un conjunto, buscar patrones frecuentes en una base de datos de transacciones, bases de datos relacionales o cualquier otro repositorio de información.

Las aplicaciones de ARM se encuentran en Marketing, Análisis de datos de cesta (o Análisis de cesta de mercado) en venta minorista, agrupación y clasificación. Puede decirle qué artículos compran juntos con frecuencia los clientes al generar un conjunto de reglas llamadas Reglas de asociación. En palabras simples, le da salida como reglas en forma si esto, entonces eso. Los clientes pueden usar esas reglas para numerosas estrategias de marketing:

  • Cambiar el diseño de la tienda según las tendencias.

  • Análisis del comportamiento del cliente.

  • Diseño del catálogo.

  • Marketing cruzado en tiendas en línea.

  • ¿Cuáles son los artículos de tendencia que los clientes compran?

  • Correos electrónicos personalizados con ventas adicionales.

Considere el siguiente ejemplo:

Se tiene un conjunto de datos de transacciones. Puede ver las transacciones numeradas del 1 al 5. Cada transacción muestra los artículos comprados en esa transacción. Puede ver que el pañal se compra con cerveza en tres transacciones. Del mismo modo, el pan se compra con leche en tres transacciones, lo que los convierte en conjuntos de artículos frecuentes. Las reglas de asociación se dan de la siguiente manera:

AB[Soporte,Confianza]A \Rightarrow B [Soporte, Confianza]

También se lee como Antecedente \Rightarrow Consecuente.

AA y BB son conjuntos de ítems en los datos transaccionales y son disjuntos. Ejemplo:

ComputadoraAntivirus[Soporte=20%,Confianza=60%]Computadora \Rightarrow Antivirus [Soporte=20\%, Confianza=60\%]

que se lee como:

  • 20%20\% de transacciones muestran que el antivirus se compra con la compra de una computadora.

  • El 60%60\% del total del ventas de computadora, también compra antivirus.

Veamos algunos conceptos básicos

  1. Itemset: Colección de uno o más ítems. Un conjunto kitemk-item contiene kk items.

  2. Conteo de soporte: frecuencia de ocurrencia de un conjunto de ítems.

  3. Soporte (ss): Porcentaje de transacciones que contienen el conjunto de ítems XX.

Soporte(X)=frecuencia(X)NSoporte(X) = \frac{frecuencia(X)}{N}

Para la regla ABA \Rightarrow B, el Soporte está dado por:

Soporte(AB)=frecuencia(A,B)NSoporte(A \Rightarrow B) = \frac{frecuencia(A,B)}{N}

Nota: P(AB)P(A\cup B) es la probabilidad conjunta de AA y BB.

Ejercicio Encuentra el soporte de LechePan~alLeche \Rightarrow Pañal

  1. Confianza (cc): En la regla ABA \Rightarrow B la confianza muestra el porcentaje en la que AA y BB se compran juntos respecto al número total de transacciones que contienen AA.

Confianza(AB)=P(AB)P(A)=frecuencia(A,B)frecuencia(A)Confianza(A \Rightarrow B) = \frac{P(A\cap B)}{P(A)} = \frac{frecuencia(A,B)}{frecuencia(A)}

Ejemplo:

Confianza(PanLeche)=34=0.75Confianza(Pan \Rightarrow Leche) = \frac{3}{4} = 0.75

Ejercicio Encuentra la confianza de LechePan~alLeche \Rightarrow Pañal

Nota: El analista debe establecer el soporte y confianza mínimos que desea.

  1. Itemsets frecuentes: Los conjuntos de items cuyo soporte es mayor o igual al soporte mínimo (min_sup).

  2. Reglas fuertes: Si la regla AB[Soporte,Confianza]A \Rightarrow B [Soporte, Confianza] cumple con minsupmin_{sup} y minconfianzamin_{confianza} entonces es una regla fuerte.

  3. Lift: es la correlación entre AA y BB en la regla ABA \Rightarrow B

Lift(AB)=Soporte(A,B)Soporte(A)Soporte(B)Lift(A \Rightarrow B) = \frac{Soporte(A,B)}{Soporte(A)Soporte(B)}

Ejemplo: PanLechePan \Rightarrow Leche

Lift(PanLeche)=Soporte(Pan,Leche)Soporte(Pan)Soporte(Leche)=0.60.8×0.8=0.9Lift(Pan \Rightarrow Leche) = \frac{Soporte(Pan,Leche)}{Soporte(Pan)Soporte(Leche)} = \frac{0.6}{0.8\times0.8} = 0.9
  • Si el Lift es 1, entonces A y B son independientes y no se puede extraer una regla.

  • Si el Lift es > 1, entonces A y B son dependientes y el grado de dependencia se da por el valor.

  • Si el Lift es < 1, entonces A tiene un efecto negativo en B.

  1. Coverage: es el soporte de la parte izquierda de la regla (antecedente). Se interpreta como la frecuencia con la que el antecedente aparece en el conjunto de transacciones.

Coverage(PanLeche)=Soporte(Pan)=0.8Coverage(Pan \Rightarrow Leche) =Soporte(Pan) = 0.8

Algoritmo apriori

  1. Generación del conjunto de ítems frecuente: Encontrar todos los conjuntos de ítems cuyo soporte sea >= al min_sup

  2. Generación de la regla: Listar todas las reglas de asociación de los conjuntos de ítems frecuentes. Calcular el soporte y la confianza de todas las reglas. Podar las reglas que no cumplen con min_sup ni min_confianza

Apriori es un algoritmo de minería de datos usado para extraer conjuntos de ítems frecuentes y generar reglas de asociación. Se basa en la idea de que:

“Si un conjunto es frecuente, todos sus subconjuntos también lo son.”

Pasos del algoritmo Apriori

Generación del conjunto de ítems frecuentes

“Encontrar todos los conjuntos de ítems cuyo soporte sea ≥ al min_sup

  • Se parte del conjunto vacío (null) y se generan ítems individuales: a, b, c, d (nivel 1).

  • Luego, se combinan en pares: ab, ac, ad, bc, bd, cd (nivel 2).

  • Luego en tríos: abc, abd, acd, bcd (nivel 3).

  • Finalmente, un conjunto con 4 ítems: abcd (nivel 4).

Los nodos coloreados indican si el conjunto cumple con el mínimo soporte (min_sup):

  • 🟡 Amarillo: conjunto inicial (null) o conjuntos demasiado grandes.

  • 🔵 Azul: ítems individuales.

  • 🟢 Verde: conjuntos que cumplen con min_sup.

  • 🟤 Rosado: conjuntos que no cumplen con min_sup y son podados.

Este proceso se llama “nivel por nivel” o “bottom-up”, y en cada paso se eliminan los conjuntos no frecuentes (esto ahorra tiempo y memoria).


Generación de reglas de asociación

“Listar todas las reglas de asociación de los conjuntos de ítems frecuentes. Calcular el soporte y la confianza de todas las reglas. Podar las reglas que no cumplan con min_sup ni min_confianza

Una vez que se identifican los conjuntos frecuentes (como ab, abc, bd, etc.), se generan reglas como:

  • {a} → {b}

  • {a, b} → {c}

  • {b} → {d}

Cada regla se evalúa usando:

  • Soporte: frecuencia con la que aparece el conjunto completo (antecedente + consecuente).

  • Confianza: probabilidad de que ocurra el consecuente dado el antecedente.

Se eliminan (se podan) las reglas que no cumplen con los umbrales min_sup y min_confianza.

¿Qué representa cada nivel del grafo?

  • Nivel 0: Conjunto vacío (null)

  • Nivel 1: Ítems individuales {a}, {b}, {c}, {d}

  • Nivel 2: Combinaciones de 2 ítems {ab}, {ac}, {bd}, etc.

  • Nivel 3: Combinaciones de 3 ítems {abc}, {abd}, etc.

  • Nivel 4: Conjunto completo {abcd}

Las flechas indican las relaciones de inclusión: cada conjunto en un nivel superior se construye a partir de los ítems en los niveles inferiores.

¿Por qué se llama Apriori?

Porque se basa en el principio a priori de que “los superset de un conjunto infrecuente también serán infrecuentes”. Es decir, si {ab} no es frecuente, entonces {abc}, {abd}, {abcd} tampoco lo serán. Esto permite podar el espacio de búsqueda eficientemente.

Ejemplo en Python

import numpy as np
import pandas as pd
# Productos simulados
products = ['milk', 'bread', 'butter', 'apples', 'bananas', 'eggs', 'cheese', 'yogurt']

# Crear 1000 transacciones aleatorias con presencia (1) o ausencia (0) de cada producto
np.random.seed(42)
n_transactions = 1000
groceries_data = pd.DataFrame(np.random.randint(2, size=(n_transactions, len(products))), columns=products)

groceries_data.head()
Loading...
from mlxtend.frequent_patterns import apriori, association_rules  # Para minería de reglas de asociación
import matplotlib.pyplot as plt  # Para gráficos (equivalente a ggplot2)
import seaborn as sns  # Para visualización de datos
from datetime import datetime  # Equivalente a lubridate

Parámetros de apriori

mlxtend.frequent_patterns.apriori(
    df,
    min_support=0.5,
    use_colnames=False,
    max_len=None,
    verbose=0,
    low_memory=False,
    filter_col=None,
    filter_value=True
)
ParámetroTipoDescripción
dfDataFrameMatriz one-hot encoded: filas = transacciones, columnas = ítems (0 o 1).
min_supportfloatSoporte mínimo requerido (entre 0 y 1).
use_colnamesboolSi True, devuelve los nombres de las columnas en los itemsets.
max_lenint o NoneLongitud máxima de los itemsets considerados.
verboseintNivel de verbosidad (0 por defecto).
low_memoryboolSi True, reduce el uso de memoria (más lento).
filter_colstrNombre de columna booleana para filtrar transacciones.
filter_valueboolValor que debe tener filter_col para mantener la fila.

Salida esperada

El resultado es un DataFrame con los siguientes campos:

ColumnaTipoDescripción
supportfloatProporción de transacciones que contienen el itemset.
itemsetsfrozensetConjunto de ítems frecuentes encontrados.

Puedes agregar una columna con la longitud del itemset si lo deseas:

frequent_itemsets['length'] = frequent_itemsets['itemsets'].apply(len)

Parámetros de association_rules

mlxtend.frequent_patterns.association_rules(
    frequent_itemsets,
    metric='confidence',
    min_threshold=0.8
)
ParámetroTipoDescripción
frequent_itemsetsDataFrameResultado del método apriori, debe contener columnas itemsets y support.
metricstrMétrica para evaluar la calidad de la regla. Opciones: 'support', 'confidence', 'lift', 'leverage', 'conviction'.
min_thresholdfloatUmbral mínimo requerido para la métrica especificada.

Salida esperada

Un DataFrame con las siguientes columnas:

ColumnaDescripción
antecedentsItemset del lado izquierdo de la regla.
consequentsItemset del lado derecho de la regla.
antecedent supportSoporte del antecedente.
consequent supportSoporte del consecuente.
supportSoporte conjunto (antecedente + consecuente).
confidenceProporción de veces que la regla es verdadera.
liftMedida del aumento en probabilidad respecto a independencia.
leverageDiferencia entre soporte observado y esperado si fueran independientes.
convictionMedida de certeza de implicación.
# Suponiendo que 'groceries_data' es un DataFrame con transacciones binarias (uno para presencia del producto, cero para ausencia)

groceries_data = groceries_data.astype(bool)
# Aplicar el algoritmo Apriori
frequent_itemsets = apriori(groceries_data, min_support=0.001, use_colnames=True)

# Generar las reglas de asociación
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.8)

# Mostrar las 10 reglas con el mayor 'lift'
rules.sort_values('lift', ascending=False).head(10)
Loading...
# Visualización de las reglas (por ejemplo, usando un gráfico de dispersión)
import seaborn as sns
import matplotlib.pyplot as plt

plt.scatter(rules['support'], rules['confidence'], alpha=0.5)
plt.xlabel('Support')
plt.ylabel('Confidence')
plt.title('Scatter plot of Support vs Confidence')
plt.show()
<Figure size 640x480 with 1 Axes>