Unidad 8 — Análisis de Canasta de Mercado
Semana 12: Reglas de Asociación
https://eduard-martinez.github.io
1 Análisis de Canasta de Mercado
El análisis de canasta de mercado (Market Basket Analysis) es un conjunto de técnicas de minería de datos utilizadas para descubrir asociaciones entre productos comprados por los clientes.
Es una herramienta fundamental en retail analytics, ya que permite a los minoristas identificar patrones de consumo, mejorar la disposición de productos, diseñar promociones cruzadas y aumentar las ventas.
1.1 Conceptos clave
Este análisis pertenece a la tarea de asociación, un tipo de aprendizaje no supervisado que busca identificar patrones frecuentes de co-ocurrencia entre ítems dentro de transacciones (también conocidas como tirillas de compra o tickets de venta).
Antecedente: producto o conjunto de productos que provocan la compra de otros. Ejemplo:
{Leche} → {Pan}→ Si un cliente compra leche, es probable que también compre pan.
Consecuente: producto que resulta asociado al antecedente.
En el ejemplo anterior, el pan es el consecuente.
1.2 Aplicaciones típicas
- Comercio minorista: identificar productos que se venden juntos (leche y cereales).
- Marketing digital: recomendaciones tipo “los clientes que compraron este producto también compraron…”.
- Bancos: detección de co-uso de productos financieros (cuenta de ahorros + tarjeta).
- Streaming: recomendación de contenidos según consumo conjunto.
2 Aplicación en R
Para ilustrar el análisis de canasta de mercado, trabajaremos con un conjunto de transacciones que representa las compras realizadas por los clientes de un supermercado durante un periodo determinado.
Cada transacción contiene uno o más productos adquiridos en la misma compra, lo que nos permitirá identificar patrones de asociación entre ellos.
En este contexto:
- Cada ítem corresponde a un producto individual.
- Cada transacción agrupa los productos comprados por un mismo cliente.
- El objetivo es descubrir reglas del tipo:
{Leche} → {Pan}e interpreta como:
“Los clientes que compran leche y pan tienden también a comprar mantequilla.”
A partir de este ejercicio podremos responder preguntas como:
- ¿Qué productos suelen comprarse juntos con mayor frecuencia?
- ¿Qué asociaciones son más fuertes en términos de confianza y soporte?
- ¿Qué reglas podrían usarse para diseñar promociones o estrategias de recomendación?
Este tipo de análisis tiene múltiples aplicaciones prácticas en marketing, retail y comportamiento del consumidor, y se basa en los mismos principios de aprendizaje no supervisado que utilizamos en técnicas como clustering o análisis de redes.
💡 Cómo usar este material:
Puedes ejecutar los chunks de R directamente en el navegador gracias a webR, sin necesidad de instalar nada localmente.
2.1 Preparación del entorno
El propósito de este bloque es asegurar un entorno limpio, reproducible y funcional antes de iniciar el análisis. Primero, eliminamos cualquier objeto previo que pueda interferir con la sesión actual. Luego, instalamos (si es necesario) y cargamos los paquetes requeridos para la manipulación de datos, la construcción de transacciones y la generación de reglas de asociación. Con esto, dejamos el entorno preparado para comenzar el análisis de canasta de mercado.
Los paquetes arules y arulesViz pertenecen al ecosistema de data mining en R. • arules permite aplicar el algoritmo Apriori, que identifica combinaciones frecuentes de productos. • arulesViz facilita la visualización interactiva de las reglas y sus métricas (soporte, confianza y lift).
2.2 Ingesta de datos
En esta sección realizamos la ingesta de datos, es decir, el proceso de cargar o generar la base que utilizaremos para construir la canasta de mercado. Cada registro representa una transacción individual, es decir, el conjunto de productos que un cliente compró en una misma visita al supermercado. Nuestro objetivo será analizar estos datos para descubrir patrones de compra conjunta y reglas de asociación entre productos.
La estructura de datos es la siguiente:
Cada ítem corresponde a un producto (por ejemplo: Leche, Pan, Huevos).
Cada transacción es una lista de productos comprados juntos.
El conjunto de todas las transacciones conforma la base que usaremos para aplicar el algoritmo Apriori y encontrar asociaciones significativas.
Interpretación: Cada elemento de la lista ventas representa una compra única: un conjunto de productos adquiridos por un cliente. Por ejemplo:
Esto significa que:
• En la transacción 1, el cliente compró mantequilla, pan, queso y verduras.
• En la transacción 2, compró cereal, queso, leche, pan, mantequilla y huevos.
Esta estructura servirá como punto de partida para convertir las listas en objetos transaccionales y aplicar el algoritmo Apriori, que nos permitirá descubrir qué productos se compran juntos con mayor frecuencia.
2.3 Conversión al formato transaccional
Antes de aplicar técnicas de análisis de cesta de mercado, es fundamental que los datos se encuentren en un formato adecuado para este tipo de estudio. En particular, los algoritmos de reglas de asociación, como Apriori o Eclat, requieren que la información esté organizada en formato transaccional, donde cada observación representa una transacción individual y contiene el conjunto de ítems comprados conjuntamente.
Para lograr esto, se deben agrupar los productos por el identificador de la transacción (ID), de modo que cada registro muestre la lista de artículos adquiridos en una misma compra o canasta. En R, esta conversión puede realizarse fácilmente utilizando la función split(), que permite crear una lista de ítems por transacción. Posteriormente, dicha lista se transforma en un objeto de clase transactions, el cual es compatible con los paquetes de análisis de asociaciones como arules.
A continuación, verificamos la estructura del objeto ventas para conocer su tipo de datos y asegurarnos de que puede convertirse correctamente al formato transaccional.
En este caso, el objeto se presenta como una lista, lo que significa que cada elemento ya corresponde a una transacción (es decir, un conjunto de ítems comprados juntos). Por tanto, no es necesario aplicar la función split(), ya que los datos ya están organizados en el formato requerido.
Una vez confirmada la estructura de los datos, procedemos a convertir el objeto ventas al formato transactions utilizando la función as() del paquete arules. Este paso es esencial, ya que permite representar cada lista de productos como una transacción individual dentro de un objeto especializado que puede ser interpretado por los algoritmos de reglas de asociación.
Posteriormente, se realiza una exploración inicial para verificar que la conversión fue exitosa y comprender las características básicas del conjunto de transa, como el número total de ítems y transacciones.
El resumen muestra que el conjunto de datos contiene 100 transacciones y 10 productos únicos, almacenados en una matriz dispersa (sparse matrix). La densidad de 0.401 indica que, en promedio, cada compra incluye unos cuatro productos, lo cual coincide con la distribución de tamaños de las canastas. Los ítems más frecuentes son Azúcar, Café, Cereal, Frutas y Mantequilla, que aparecen en la mayoría de las transacciones y probablemente formarán parte de las reglas más relevantes en el análisis posterior.
Una vez confirmada la estructura del objeto, inspeccionamos las primeras transacciones para observar cómo están representadas internamente dentro del formato transactions.
2.4 Reglas de asociación
Con el objeto transa ya creado, podemos comenzar a descubrir patrones de compra aplicando la función apriori() del paquete arules. Este algoritmo busca relaciones del tipo:
{Producto A, Producto B} => {Producto C}
que nos permiten identificar qué productos tienden a comprarse juntos dentro de las transacciones.
Estructura de una regla:
LHS (Left Hand Side) → Antecedente: conjunto de productos que originan o influyen en la compra de otros.
RHS (Right Hand Side) → Consecuente: producto asociado al antecedente, es decir, el que se compra después o junto.
Ejemplo: {Leche, Pan} => {Mantequilla}
Interpretación: Los clientes que compran Leche y Pan tienden también a comprar Mantequilla. Esto sugiere una oportunidad de promoción cruzada o de diseño estratégico de góndolas.
2.4.1 Métricas principales
Soporte (Support): Mide la frecuencia con que aparece un conjunto de ítems en todas las transacciones: \[supp(Y) = \frac{freq(Y)}{N}\]
Donde: \(freq(Y)\) es el número de transacciones que contienen el conjunto \(Y\) y \(N\) es el número total de transacciones.
Confianza (Confidence): Mide la probabilidad de que el consecuente (RHS) sea comprado dado que el antecedente (LHS) fue comprado:
\[conf(A \Rightarrow B) = \frac{supp(A \cup B)}{supp(A)}\]
Cobertura (Coverage): Número de veces que aparece el antecedente (LHS) en las transacciones. Representa el soporte del ítem que origina la regla.
Lift (Elevación): Evalúa la fuerza de la relación entre productos, comparando la frecuencia observada con la esperada si fueran independientes:
\[lift(A \Rightarrow B) = \frac{conf(A \Rightarrow B)}{supp(B)}\]
Interpretación: \(lift > 1\): asociación positiva (la compra de A aumenta la probabilidad de comprar B). \(lift = 1\): independencia. \(lift < 1\): asociación negativa (la compra de A reduce la probabilidad de comprar B).
Count: Número total de transacciones que cumplen la regla.
2.4.2 Obtener las métricas
La función apriori() utiliza una lista de parámetros para controlar cómo se generan las reglas. Estos parámetros se definen dentro de parameter = list().
Support: Umbral mínimo de soporte. Es la proporción mínima de transacciones en las que debe aparecer una combinación de productos. supp = 0.1 solo se considerarán combinaciones de productos que aparezcan en al menos 10 % de las transacciones (en este caso, 10 de las 100 compras).
Confidence: Nivel mínimo de confianza. Es la probabilidad de que el consecuente ocurra dado el antecedente. conf = 0.3 las reglas deben cumplirse al menos en el 30 % de los casos en que se cumple el antecedente.
Minimum length: Longitud mínima de la regla (número de ítems involucrados). minlen = 2 evita reglas triviales con un solo producto, asegurando que las reglas tengan al menos un antecedente y un consecuente.
Este objeto (reglas) contiene:
• Los ítems involucrados.
• Las métricas (support, confidence, lift, count, etc.).
• El formato necesario para exploración y visualización.
Este resultado significa que:
• El algoritmo analizó 100 compras que incluyen 10 productos diferentes.
• Aplicó los filtros definidos (soporte ≥ 0.1, confianza ≥ 0.3).
• Encontró 110 combinaciones de productos que cumplen esas condiciones.
2.4.3 Generación de reglas más sólidas
En este paso ajustamos los parámetros del algoritmo Apriori para obtener reglas de asociación más precisas, es decir, aquellas que representan relaciones fuertes y consistentes entre productos.
| Concepto | Valor | Interpretación |
|---|---|---|
| Número de reglas encontradas | 3 | Solo 3 asociaciones cumplen simultáneamente los criterios de soporte ≥ 0.1 y confianza ≥ 0.6. |
Soporte mínimo (supp = 0.1) |
10 transacciones | Una combinación debe aparecer en al menos 10 de las 100 compras. |
Confianza mínima (conf = 0.55) |
55 % | Solo se conservan reglas que predicen el consecuente con al menos un 55 % de probabilidad. |
Longitud mínima (minlen = 2) |
2 productos | Cada regla debe tener al menos un antecedente y un consecuente. |
¿Por qué ahora hay menos reglas?: El algoritmo filtra más agresivamente las combinaciones de productos: Las asociaciones débiles (con confianza < 0.6) fueron eliminadas. En otras palabras: Ahora el modelo solo muestra relaciones que ocurren con alta probabilidad cuando se cumple el antecedente.
{Frutas} ⇒ {Azúcar}
- Aparece en el 23 % de las compras, lo que la convierte en una de las asociaciones más frecuentes.
- En el 57.5 % de las ocasiones en que los clientes compran Frutas, también adquieren Azúcar.
- Con un lift = 1.25, la relación es positiva pero moderada: ocurre un 25 % más de lo esperado si las compras fueran independientes.
{Mantequilla, Verduras} ⇒ {Queso}
- Ocurre en el 10 % de las transacciones.
- En el 58.8 % de las veces que los clientes compran Mantequilla y Verduras, también se llevan Queso.
- El lift = 1.47 indica una asociación positiva clara, aunque no extremadamente fuerte.
{Frutas, Queso} ⇒ {Azúcar}
- Aparece en el 11 % de las transacciones.
- En casi el 58 % de los casos donde se compran Frutas y Queso, también se incluye Azúcar.
- Con un lift = 1.26, la asociación es ligeramente superior a lo esperado por azar.
2.4.4 Reglas redundantes
Al generar reglas de asociación con apriori(), es común que aparezcan reglas redundantes, es decir, reglas que no aportan nueva información porque describen un patrón ya representado por otra más general o equivalente.
Por ejemplo:
{Frutas, Azúcar} ⇒ {Queso}
{Frutas, Azúcar, Mantequilla} ⇒ {Queso}
La segunda regla incluye la primera dentro de su antecedente, pero no mejora las métricas (soporte, confianza, lift).
En estos casos, la segunda es redundante y puede eliminarse.
Identificación de reglas redundantes: Podemos detectar y visualizar qué reglas son redundantes usando la función is.redundant():
Una vez identificadas, eliminamos las redundantes y conservamos únicamente las reglas más informativas:
Ahora reglas contiene solo las reglas no redundantes, lo que mejora la claridad del análisis y evita repeticiones.
2.4.5 Plotear las reglas
Una vez generadas las reglas y revisadas sus métricas, es útil visualizar los resultados para identificar rápidamente qué asociaciones son más fuertes y frecuentes.
El paquete arulesViz permite crear distintos tipos de gráficos interactivos.
En este caso, utilizaremos un diagrama de dispersión (scatterplot) que representa cada regla en función de sus medidas principales:
- Eje X: Soporte (frecuencia con que ocurre la regla).
- Eje Y: Confianza (probabilidad de que ocurra el consecuente).
- Color (sombreado): Valor del lift, que mide la fuerza de la asociación.
De esta forma, podremos observar visualmente qué reglas combinan alta frecuencia, alta confianza y alta fuerza de relación.
3 Actividad en Clase
3.1 Instrucciones:
- Ejecute los chunks de código proporcionados en R (puede hacerlo directamente en el navegador o en RStudio).
- Observe los resultados obtenidos, especialmente las reglas de asociación generadas y sus métricas (soporte, confianza y lift).
- Genere un documento en Word (.docx) donde:
- Copie las preguntas que aparecen a continuación.
- Redacte sus interpretaciones y conclusiones con base en los resultados.
- No copie el código ni las tablas, solo redacte sus respuestas.
- Suba su documento a la plataforma Intu.
3.2 Preguntas de interpretación:
3.2.1 Interpretación de resultados: Con base en las primeras reglas obtenidas mediante el código anterior:
• ¿Cuál de las reglas observadas consideras más relevante para el supermercado y por qué?
• Interpreta en tus propias palabras la siguiente regla: `{Frutas} ⇒ {Azúcar}`
• ¿Qué nos dice sobre el comportamiento del consumidor?
• ¿Cómo podrías aprovechar esta información para proponer una promoción o disposición de góndolas?
3.2.2 Evaluación de la fuerza de asociación:
• La regla {Mantequilla, Verduras} ⇒ {Queso} tiene una confianza del 0.588 y un lift de 1.47.
• ¿Cómo interpretarías esta relación?
• ¿Qué tan fuerte consideras la asociación?
• ¿Qué acción comercial podría sugerirse?
3.2.3 Análisis crítico:
• Si el análisis se basara únicamente en datos de un mes de ventas, ¿qué limitaciones tendría la interpretación?
• ¿Qué otros factores o variables te gustaría incluir para obtener reglas más informativas (por ejemplo, tipo de cliente, día de la semana, temporada)?
• Menciona un caso fuera del comercio minorista donde el análisis de reglas de asociación pueda ser útil (por ejemplo, en banca, educación o salud).
💡 Suba su documento con las respuestas a la plataforma Intu, en la actividad correspondiente a la Semana 12 — Reglas de Asociación.