programa
La minería de reglas de asociación se ha vuelto esencial para las empresas que quieren entender el comportamiento de sus clientes y sus patrones de compra. Esta técnica identifica artículos que se compran juntos con frecuencia, lo que ayuda a optimizar la colocación de productos, las promociones y las recomendaciones. Este tipo de análisis mejora las estrategias de negocio al revelar con claridad tendencias que permanecen ocultas en los datos de transacciones.
El algoritmo Apriori es un método muy popular para extraer estas reglas de asociación por su sencillez y resultados prácticos. A diferencia de otros métodos más complejos, Apriori es directo, lo que lo hace ideal para empezar y eficaz en aplicaciones del mundo real.
Este artículo explica el algoritmo Apriori, ilustra su funcionamiento con ejemplos claros y te muestra cómo utilizarlo con eficacia. Si quieres poner en práctica conceptos de machine learning, echa un vistazo a nuestro Machine Learning Scientist in Python career track.
¿Qué es el algoritmo Apriori?
Como verás en nuestro tutorial de minería de reglas de asociación en Python, Apriori es un algoritmo diseñado para extraer conjuntos de ítems frecuentes de bases de datos transaccionales y generar reglas de asociación. Se basa en el principio de que si un conjunto de ítems es frecuente, todos sus subconjuntos también deben serlo. Esta suposición ayuda a reducir el número de conjuntos de ítems que hay que comprobar, haciendo el proceso más eficiente.
Conjuntos de ítems y transacciones
Un conjunto de datos para Apriori suele estar formado por transacciones, donde cada transacción es un conjunto de artículos comprados juntos. Por ejemplo, los datos de ventas de un supermercado pueden contener transacciones como:
- Leche, pan, mantequilla
- Leche, pañales, cerveza, pan
- Pañales, cerveza, mantequilla
Cada una de estas transacciones representa una cesta de productos comprados en una única compra. Nuestro curso de Market Basket Analysis en Python entra en más detalle sobre la aplicación de este concepto en Python.

Soporte, confianza y lift
La minería de reglas de asociación se apoya en tres métricas clave:
Soporte: La frecuencia con la que un ítem aparece en el conjunto de datos. Se calcula como:

Confianza: La probabilidad de que se compre el ítem B cuando se compra el ítem A, dada por:

Lift: La fuerza de una regla; mide cuánto más probable es que se compre el ítem B cuando se compra el ítem A en comparación con comprarlo de forma independiente:

Un valor de lift mayor que 1 sugiere una asociación positiva fuerte entre ítems.
Cómo funciona el algoritmo Apriori
Veamos ahora cómo funciona el algoritmo Apriori.

Proceso paso a paso
- Generación de conjuntos de ítems candidatos: el algoritmo empieza identificando ítems individuales y contando sus apariciones para determinar los ítems frecuentes.
- Poda según el soporte mínimo: se eliminan los conjuntos de ítems que aparecen por debajo del umbral de soporte mínimo.
- Generación de conjuntos de ítems frecuentes: el algoritmo genera conjuntos de mayor tamaño combinando conjuntos frecuentes más pequeños, iterando hasta que ya no se puedan formar más conjuntos frecuentes.
- Derivación de reglas de asociación: extrae reglas en función de los valores de confianza y lift para determinar relaciones con sentido.
Ejemplo paso a paso
Imagina un conjunto de datos con estas transacciones:
- Leche, pan
- Leche, mantequilla
- Leche, pan, mantequilla
- Pan, mantequilla
Usando un soporte mínimo del 50%, el algoritmo identifica conjuntos de ítems frecuentes y extrae reglas como:
- Leche → pan: confianza: 66,7%
- Pan → mantequilla: confianza: 66,7%
Estas reglas ayudan a entender los hábitos de compra y a optimizar el inventario.
Implementación del algoritmo Apriori en Python
En esta sección aprenderás a implementar el algoritmo Apriori en Python.
Preparar el entorno
Para usar Apriori en Python, instala las librerías necesarias:
pip install mlxtend pandas
Cargar y preparar los datos
El siguiente paso es cargar los paquetes y preparar los datos:
import pandas as pd
from mlxtend.frequent_patterns import apriori, association_rules
# Expanded dataset
data = {
'Milk': [1, 1, 0, 1, 0, 1, 0, 1, 1, 0],
'Bread': [1, 0, 1, 1, 1, 0, 1, 0, 1, 1],
'Butter': [0, 1, 1, 1, 1, 1, 0, 1, 1, 0],
'Eggs': [1, 0, 0, 1, 1, 1, 1, 0, 0, 1],
'Cheese': [0, 1, 1, 0, 1, 1, 0, 1, 0, 1],
'Diaper': [0, 1, 0, 1, 0, 1, 1, 1, 0, 0],
'Beer': [1, 0, 1, 0, 1, 0, 1, 0, 1, 1]
}
df = pd.DataFrame(data)
Aplicar el algoritmo Apriori
A continuación, aplica el algoritmo.
# Generating frequent itemsets
frequent_itemsets = apriori(df, min_support=0.5, use_colnames=True)
Después, obtenemos las reglas de asociación:
# Generating frequent itemsets
frequent_itemsets = apriori(df, min_support=0.5, use_colnames=True)
# Generating association rules
rules = association_rules(frequent_itemsets, metric='confidence', min_threshold=0.6)
print(rules[['antecedents', 'consequents', 'support', 'confidence', 'lift']])
antecedents consequents support confidence lift
0 (Butter) (Milk) 0.5 0.714286 1.190476
1 (Milk) (Butter) 0.5 0.833333 1.190476
2 (Bread) (Eggs) 0.5 0.714286 1.190476
3 (Eggs) (Bread) 0.5 0.833333 1.190476
4 (Bread) (Beer) 0.6 0.857143 1.428571
5 (Beer) (Bread) 0.6 1.000000 1.428571
6 (Butter) (Cheese) 0.5 0.714286 1.190476
7 (Cheese) (Butter) 0.5 0.833333 1.190476
Los valores de soporte (0,5 a 0,6) indican que estas asociaciones aparecen en el 50-60% de todas las transacciones.
Las puntuaciones de confianza (0,71 a 1,0) muestran la fiabilidad de las reglas, con algunas como Beer → Bread siendo ciertas (confianza del 100%).
Los valores de lift (~1,2 a 1,4) sugieren asociaciones moderadas pero relevantes, lo que indica que estos pares de ítems ocurren juntos algo más a menudo de lo que cabría esperar por azar.
Interpretación de los resultados
Para entender mejor las reglas de asociación generadas por el algoritmo Apriori, podemos visualizarlas con Matplotlib. Un diagrama de dispersión ayuda a analizar confianza frente a lift, mientras que un mapa de calor muestra el soporte de distintas combinaciones de ítems.
import matplotlib.pyplot as plt
import networkx as nx
# Scatter plot of confidence vs lift
plt.figure(figsize=(8,6))
plt.scatter(rules['confidence'], rules['lift'], alpha=0.7, color='b')
plt.xlabel('Confidence')
plt.ylabel('Lift')
plt.title('Confidence vs Lift in Association Rules')
plt.grid()
plt.show()
# Visualizing association rules as a network graph
G = nx.DiGraph()
for _, row in rules.iterrows():
G.add_edge(tuple(row['antecedents']), tuple(row['consequents']), weight=row['confidence'])
plt.figure(figsize=(10, 6))
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_color='lightblue', edge_color='gray', node_size=3000, font_size=10)
edge_labels = {(tuple(row['antecedents']), tuple(row['consequents'])): f"{row['confidence']:.2f}"
for _, row in rules.iterrows()}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.title("Association Rules Network")
plt.show()
El diagrama de dispersión ayuda a identificar reglas con relaciones fuertes, mientras que el grafo de red representa visualmente cómo se asocian los distintos ítems. Estos insights guían la toma de decisiones en retail, recomendaciones y detección de fraude.

El diagrama de dispersión muestra la relación entre confianza y lift para las reglas de asociación generadas. Las observaciones clave son:
- Los puntos se distribuyen en un rango de confianza de 0,7 a 1,0.
- Los valores de lift se sitúan mayoritariamente entre 1,19 y 1,43, lo que indica que las reglas identificadas aportan asociaciones con cierto valor, aunque no extremadamente fuertes.
- Un valor de confianza de 1,0 con un lift de 1,43 (Beer → Bread) sugiere que siempre que se compra cerveza, el pan está presente en la transacción, lo que la convierte en una regla muy fiable.

El grafo de red representa visualmente las asociaciones entre distintos ítems:
- Leche y mantequilla están fuertemente asociados: quienes compran uno suelen comprar el otro.
- Pan y huevos muestran una relación similar, indicando un patrón de compra habitual.
- Cerveza y pan presentan la mayor confianza (1,0): en todas las transacciones donde aparece Beer, Bread siempre está presente.
Aplicaciones del algoritmo Apriori
Las empresas aplican ampliamente el algoritmo Apriori para resolver diversos problemas. Descúbrelos a continuación.
Market basket analysis
Los retailers utilizan Apriori para analizar patrones de compra, lo que les ayuda a colocar productos para fomentar compras combinadas. Por ejemplo, si pan y mantequilla aparecen juntos con frecuencia, una tienda puede situarlos cerca para impulsar las ventas. Aprende más sobre market basket analysis en nuestro tutorial de market basket analysis con R.
Sistemas de recomendación
Las plataformas online usan Apriori para sugerir productos en función de compras anteriores. Si un cliente compra un portátil, las recomendaciones pueden incluir accesorios como un ratón o un teclado.
Detección de anomalías
En la detección de fraude, Apriori identifica transacciones inusuales comparándolas con los patrones esperados. Si una transacción con tarjeta de crédito se desvía significativamente de las reglas establecidas, puede activar una revisión de seguridad. En detección de anomalías, aunque Apriori no se usa directamente para identificar anomalías, puede ayudar a detectar combinaciones de ítems raras o inesperadas que se alejan de los patrones de compra comunes.

Ventajas y limitaciones
Existen varias ventajas y desventajas al usar el algoritmo Apriori, como verás a continuación.
Ventajas
Apriori es fácil de entender y eficaz para descubrir conjuntos de ítems frecuentes en datos estructurados. Se usa ampliamente en sectores como retail y salud para el descubrimiento de patrones.
Limitaciones
El algoritmo se vuelve lento al trabajar con conjuntos de datos grandes porque genera muchos candidatos. En escenarios con gran volumen de datos, métodos alternativos como FP-Growth ofrecen un mejor rendimiento.

Conclusión
Apriori sigue siendo una de las técnicas más útiles para encontrar asociaciones en los datos. A pesar de sus retos computacionales, aporta insights valiosos que las empresas utilizan para mejorar la experiencia del cliente y aumentar las ventas.
Aunque no sea el enfoque más rápido para conjuntos de datos muy grandes, sigue siendo una herramienta esencial en minería de datos, analítica y machine learning. Para saber más, explora machine learning con Python y avanza hacia convertirte en machine learning scientist con nuestro Machine Learning Scientist in Python career track.
Preguntas frecuentes sobre Apriori
¿Para qué se utiliza el algoritmo Apriori?
El algoritmo Apriori se utiliza en minería de datos para identificar conjuntos de ítems frecuentes y generar reglas de asociación a partir de grandes volúmenes de datos. Se aplica habitualmente en market basket analysis, sistemas de recomendación y detección de fraude.
¿Cómo funciona el algoritmo Apriori?
Apriori funciona identificando primero los ítems individuales que aparecen con frecuencia en un conjunto de datos y, a partir de ellos, genera conjuntos de ítems más grandes. Elimina (poda) los conjuntos que no alcanzan un umbral mínimo de soporte y deriva reglas de asociación usando las métricas de confianza y lift.
¿Qué son soporte, confianza y lift en Apriori?
Soporte: la frecuencia de un conjunto de ítems en el conjunto de datos.
Confianza: la probabilidad de que aparezca un ítem en una transacción dado que otro ítem está presente.
Lift: la intensidad de la asociación, que indica si los ítems se compran juntos más a menudo de lo esperado.
¿Cuáles son las limitaciones del algoritmo Apriori?
Apriori puede ser lento con conjuntos de datos grandes debido al elevado número de candidatos que genera. También tiene dificultades con conjuntos densos donde muchos ítems aparecen juntos con frecuencia. El algoritmo FP-Growth es una alternativa que rinde mejor en estos casos.
¿Cuál es la diferencia entre Apriori y FP-Growth?
Apriori genera conjuntos de ítems candidatos y comprueba su soporte de forma iterativa, lo que resulta costoso computacionalmente. FP-Growth, en cambio, utiliza una estructura en árbol para reducir el número de candidatos, por lo que es más rápido en conjuntos de datos grandes.