Apriori, FP‑Growth y Eclat: cómo encontrar patrones frecuentes sin revisar millones de combinaciones


Aprendizaje No Supervisado — Asociación (parte 2)

Apriori, FP‑Growth y Eclat: tres formas de encontrar patrones sin perderse en millones de combinaciones

Ya sabes qué buscan las reglas de asociación. Ahora toca lo interesante: cómo demonios las encuentran.

En el capítulo anterior aprendiste que las reglas de asociación no agrupan, sino que conectan: descubren qué productos viajan juntos en la misma cesta. Y conociste a los tres jueces que deciden si una regla vale la pena: soporte (¿pasa mucho?), confianza (¿es fuerte?) y lift (¿es real o casualidad?).

Pero dejamos una pregunta colgada en el aire, y es justo la más incómoda:

«Vale, pero… ¿cómo encuentra el algoritmo esos patrones entre miles de productos y millones de cestas?»

Porque a mano sería, literalmente, imposible. Y aquí no exagero: deja que te enseñe por qué.

Infografía comparando Apriori, FP‑Growth y Eclat para encontrar patrones frecuentes


El problema: por qué «probar todo» no es una opción

Imagina que tu tienda vende solo 10 productos. Parece poco, ¿verdad? Pues las combinaciones posibles entre esos 10 productos ya son más de mil. Sube a 50 productos y las combinaciones se van a los cuatrillones. Con 200 productos, el número es tan absurdo que no hay ordenador en el planeta capaz de revisarlas una por una antes de que el sol se apague.

Este es el famoso problema de la explosión combinatoria: cada producto nuevo que añades no suma opciones, las multiplica. Por eso no basta con «mirar todas las cestas». Hacen falta algoritmos listos que encuentren los itemsets frecuentes (los grupos de productos que aparecen juntos a menudo) sin revisarlo todo.

Y aquí es donde entran nuestros tres protagonistas. Tres personalidades muy distintas, un mismo objetivo:

  • Apriori → el clásico. Va paso a paso y poda lo que no sirve.
  • FP‑Growth → el rápido. Comprime todas las cestas en un árbol.
  • Eclat → el minimalista. Cruza listas y ya está.

Vamos con cada uno, sin prisa.


Apriori — el algoritmo que poda el infinito

Apriori es el más antiguo y el más fácil de entender de los tres. Su idea es tan simple que parece de sentido común, pero es brillante:

Si una combinación grande es frecuente, todas sus partes pequeñas también tienen que serlo. Y al revés: si una combinación pequeña es rara, cualquier combinación más grande que la contenga será todavía más rara.

Piénsalo con la cabeza fría: si leche + pan casi nadie los compra juntos, ¿tiene sentido molestarse en mirar leche + pan + huevos? No. Va a ser aún menos frecuente. Apriori ni lo intenta. Y ahí está su superpoder: en lugar de revisar millones de combinaciones, descarta ramas enteras de golpe.

La intuición: como quien cocina por niveles

Apriori funciona igual que alguien montando recetas por complejidad:

  1. Primero mira los ingredientes sueltos. ¿Qué productos son populares por sí solos? Los que casi nadie compra, fuera.
  2. Luego los combina de dos en dos. Pero solo usa los que sobrevivieron al paso anterior.
  3. Después de tres en tres. Otra vez, solo con los supervivientes.
  4. Y así sucesivamente, subiendo de nivel, tirando a la basura todo lo que no llega al soporte mínimo.

Un ejemplo en nuestra tienda

Supongamos que ponemos el listón en un soporte mínimo del 5%. Apriori mira primero los productos sueltos y descubre que las gafas de sol solo aparecen en el 2% de las cestas. Adiós: quedan descartadas. A partir de ese momento, Apriori jamás volverá a considerar ninguna combinación que incluya gafas de sol (ni «gafas + gorra», ni «gafas + protector solar», ni nada). De un plumazo se ha ahorrado revisar cientos de combinaciones inútiles. Eso es podar el infinito.

✅ Ventajas ❌ Desventajas
Facilísimo de entender Se vuelve lento con muchos productos
Facilísimo de implementar Genera demasiados candidatos por el camino
Perfecto para datasets pequeños o medianos Escala mal con millones de transacciones

FP‑Growth — el algoritmo que comprime el universo

FP‑Growth nació precisamente para arreglar el punto débil de Apriori: generaba demasiados candidatos y se atascaba. Y su solución es un cambio de mentalidad total:

En lugar de ir probando combinaciones una a una, ¿y si comprimo todas las cestas en una sola estructura que ya revele los patrones?

Esa estructura se llama FP‑tree (árbol de patrones frecuentes). Es, básicamente, todos los tickets de tu tienda apretujados en un solo árbol.

La intuición: comprimir en vez de enumerar

FP‑Growth hace esto:

  1. Ordena los productos por popularidad, del más vendido al menos vendido.
  2. Construye un árbol donde cada rama representa una cesta.
  3. Y aquí está el truco: las cestas que comparten productos comparten rama. No se repiten.
  4. Luego extrae los patrones directamente del árbol, sin generar listas interminables de candidatos.

Piénsalo así: si 3.000 clientes compraron «camiseta + pantalón», Apriori los trataría como 3.000 casos que hay que ir contando. FP‑Growth los mete a todos en la misma rama del árbol y listo. Es como comprimir miles de tickets en un ZIP que, además, ya te enseña los patrones al abrirlo.

✅ Ventajas ❌ Desventajas
Mucho más rápido que Apriori Más complejo de implementar
No genera candidatos innecesarios Hay que entender bien cómo funciona el FP‑tree
Ideal para grandes volúmenes de datos El árbol puede ocupar bastante memoria

Eclat — el algoritmo que cruza listas

Eclat es el más minimalista de los tres. Ni árboles, ni candidatos paso a paso. Su idea cabe en una frase:

Cada producto aparece en ciertas cestas. Si cruzas esas listas de cestas, encuentras al instante lo que se compra junto.

En vez de mirar la tabla «por filas» (cesta a cesta), Eclat le da la vuelta y la mira «por columnas»: para cada producto guarda la lista de cestas donde aparece. A eso se le llama formato vertical.

La intuición: intersecar es encontrar

Imagina que tienes esto guardado:

  • camiseta → aparece en las cestas{1, 3, 5, 8, 10}
  • pantalón → aparece en las cestas{3, 5, 8, 11}

¿Quieres saber en cuántas cestas aparecen los dos juntos? No hace falta recorrer nada raro: solo cruzas (intersecas) las dos listas y te quedas con lo que tienen en común:

Tres cestas. Si eso supera tu soporte mínimo, ya tienes un patrón frecuente. Y lo mejor: para encontrar tríos, solo sigues cruzando esa lista resultante con la del siguiente producto. Puro cruce de conjuntos, nada más.

✅ Ventajas ❌ Desventajas
Muy rápido con datos en formato vertical Las listas pueden crecer enormemente
Conceptualmente simplísimo No es tan eficiente con datos dispersos
Ideal para datasets densos Depende mucho del formato de los datos

Los tres, cara a cara

Tres filosofías distintas para el mismo destino. Así se ven una al lado de la otra:

Algoritmo Su filosofía Brilla cuando… Sufre cuando…
Apriori Genera candidatos y poda los raros Quieres entenderlo y el dataset es pequeño/mediano Hay muchísimos productos
FP‑Growth Comprime las cestas en un árbol Tienes millones de transacciones y necesitas velocidad Necesitas algo simple de programar
Eclat Cruza listas de cestas Los datos son densos y están en formato vertical Los datos son muy dispersos

¿Cuál elijo? El diagrama de decisión

Para que no te líes a la hora de la verdad, aquí tienes el resumen visual:

 

 

En una frase: Apriori para aprender y para datos pequeños, FP‑Growth cuando el volumen es enorme, y Eclat cuando tus datos son densos y están en formato vertical.


En resumen

Los tres persiguen exactamente lo mismo (descubrir qué productos aparecen juntos con frecuencia), pero cada uno lo hace a su manera:

  • Apriori poda: descarta las combinaciones raras antes de perder tiempo con ellas.
  • FP‑Growth comprime: aprieta todas las cestas en un árbol que ya revela los patrones.
  • Eclat cruza: interseca las listas de cestas y encuentra las coincidencias al vuelo.

Tres caminos distintos, un mismo final: encontrar los itemsets frecuentes que luego se convertirán en esas reglas de asociación (A → B) tan útiles con las que abrimos el capítulo anterior. Poda, compresión o intersección: elige tu herramienta según el tamaño y la forma de tus datos, y deja que el algoritmo haga el trabajo imposible por ti.