# Cargar las librerías en la sesión
library(arules)
library(arulesViz)Basket Mrket
Introducción
En el sector asegurador, entender cómo los clientes combinan sus pólizas es clave para las estrategias de venta cruzada (cross-selling). El Market Basket Analysis (Análisis de la Cesta de la Compra), apoyado en el Algoritmo Apriori, nos permite descubrir asociaciones ocultas entre productos.
¿Un cliente con un seguro de comercio tiende a contratar un seguro de contingencias? ¿El seguro de hogar arrastra al de salud? En este artículo utilizaremos el lenguaje R y las librerías arules y arulesViz para simular un ecosistema de seguros y extraer sus reglas de asociación.
1. Preparación del Entorno y Librerías
Para comenzar, necesitamos instalar y cargar el motor analítico (arules) y la herramienta de visualización (arulesViz). El siguiente bloque de código realiza esta gestión de forma automática.
2. Creación del Catálogo de Productos de Seguros
Definiremos un vector con 30 productos de seguros. Incluiremos desde los ramos más universales y tradicionales hasta seguros nicho o técnicos para simular un portafolio realista.
# Vector de 30 productos del sector seguros
productos_seguros <- c(
"Seguro de Salud", "Seguro de Hogar", "Seguro de Coche", "Seguro de Vida", "Seguro de Decesos",
"Seguro de Accidentes", "Seguro de Viaje", "Seguro de Mascotas", "Seguro de Impago de Alquiler",
"Seguro de Embarcaciones de Recreo", "Seguro de Patinetes Eléctricos / Movilidad",
"Seguro de Dispositivos Móviles y Tecnología", "Seguro de Defensa Jurídica Familiar",
"Seguro de Instrumentos Musicales", "Seguro de Responsabilidad Civil (RC) General",
"Seguro de RC Profesional (Médicos, Abogados, etc.)", "Seguro de RC de Directivos y Administradores (D&O)",
"Seguro Multirriesgo Comercial / Comercio", "Seguro Macropyme o Pyme Industrial",
"Seguro de Ciberriesgos y Ciberseguridad", "Seguro de Transporte de Mercancías",
"Seguro de Crédito y Caución", "Seguro de Todo Riesgo Construcción",
"Seguro de Pérdida de Beneficios / Interrupción de Negocio", "Seguro Agrario Combinado / Cultivos",
"Seguro de Retirada del Carnet de Conducir", "Seguro de Cancelación de Eventos y Espectáculos",
"Seguro de Obras de Arte y Colecciones", "Seguro de Hospitalización por Enfermedad (Subsidio)",
"Seguro de Contingencias / Premio Hoyo en Uno (Golf)"
)
# Mostrar la cantidad de productos disponibles
length(productos_seguros)[1] 30
3. Simulación de Transacciones (Carteras de Clientes)
El algoritmo Apriori requiere que los datos estén estructurados como transacciones (el conjunto de seguros que posee cada cliente). Generaremos una lista en R que simule 1,000 clientes, donde cada uno contratará de forma aleatoria entre 1 y 6 seguros de nuestro catálogo. Resultará entretenido ver que asociaciones se realizan.
# Asegurar la reproducibilidad del experimento
set.seed(123)
n_transacciones <- 1000
lista_transacciones <- vector("list", n_transacciones)
# Generación aleatoria de las combinaciones por cliente
for (i in 1:n_transacciones) {
n_compras <- sample(1:6, size = 1)
seguros_cliente <- sample(productos_seguros, size = n_compras, replace = FALSE)
lista_transacciones[[i]] <- seguros_cliente
}
# Verificar el formato de los primeros 3 clientes
print(lista_transacciones[1:3])[[1]]
[1] "Seguro de Instrumentos Musicales" "Seguro de Coche"
[3] "Seguro de Embarcaciones de Recreo"
[[2]]
[1] "Seguro de Crédito y Caución"
[2] "Seguro de Patinetes Eléctricos / Movilidad"
[[3]]
[1] "Seguro de Ciberriesgos y Ciberseguridad"
[2] "Seguro de Instrumentos Musicales"
[3] "Seguro de Crédito y Caución"
[4] "Seguro Agrario Combinado / Cultivos"
[5] "Seguro de Retirada del Carnet de Conducir"
4. Transformación de Datos y Ejecución de Apriori
Para que la librería arules procese la información, transformamos la lista al objeto nativo transactions. Posteriormente, ejecutamos el algoritmo apriori() configurando los umbrales mínimos de Soporte (frecuencia de la combinación) y Confianza (fiabilidad de la regla).
# Convertir lista a formato transactions
transacciones_seguros <- transactions(lista_transacciones)
# Resumen estadístico del dataset comercial
summary(transacciones_seguros)transactions as itemMatrix in sparse format with
1000 rows (elements/itemsets/transactions) and
30 columns (items) and a density of 0.1156667
most frequent items:
Seguro de Embarcaciones de Recreo
136
Seguro de Mascotas
129
Seguro de Patinetes Eléctricos / Movilidad
129
Seguro de Decesos
126
Seguro de Instrumentos Musicales
123
(Other)
2827
element (itemset/transaction) length distribution:
sizes
1 2 3 4 5 6
162 176 164 179 166 153
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 2.00 3.00 3.47 5.00 6.00
includes extended item information - examples:
labels
1 Seguro Agrario Combinado / Cultivos
2 Seguro de Accidentes
3 Seguro de Cancelación de Eventos y Espectáculos
# Ejecución del algoritmo Apriori
reglas <- apriori(
transacciones_seguros,
parameter = list(support = 0.01, confidence = 0.15, minlen = 2)
)Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen
0.15 0.1 1 none FALSE TRUE 5 0.01 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: 10
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[30 item(s), 1000 transaction(s)] done [0.00s].
sorting and recoding items ... [30 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [86 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
# Ordenar e inspeccionar las 10 mejores reglas según el indicador Lift
reglas_ordenadas <- sort(reglas, by = "lift")
inspect(head(reglas_ordenadas, 10)) lhs rhs support confidence coverage lift count
[1] {Seguro Multirriesgo Comercial / Comercio} => {Seguro de Contingencias / Premio Hoyo en Uno (Golf)} 0.023 0.1885246 0.122 1.558054 23
[2] {Seguro de Contingencias / Premio Hoyo en Uno (Golf)} => {Seguro Multirriesgo Comercial / Comercio} 0.023 0.1900826 0.121 1.558054 23
[3] {Seguro de Hogar} => {Seguro de Salud} 0.020 0.1666667 0.120 1.543210 20
[4] {Seguro de Salud} => {Seguro de Hogar} 0.020 0.1851852 0.108 1.543210 20
[5] {Seguro de Accidentes} => {Seguro Multirriesgo Comercial / Comercio} 0.022 0.1864407 0.118 1.528202 22
[6] {Seguro Multirriesgo Comercial / Comercio} => {Seguro de Accidentes} 0.022 0.1803279 0.122 1.528202 22
[7] {Seguro de RC Profesional (Médicos, Abogados, etc.)} => {Seguro de Contingencias / Premio Hoyo en Uno (Golf)} 0.019 0.1792453 0.106 1.481366 19
[8] {Seguro de Contingencias / Premio Hoyo en Uno (Golf)} => {Seguro de RC Profesional (Médicos, Abogados, etc.)} 0.019 0.1570248 0.121 1.481366 19
[9] {Seguro de Transporte de Mercancías} => {Seguro de Todo Riesgo Construcción} 0.017 0.1700000 0.100 1.478261 17
[10] {Seguro de RC de Directivos y Administradores (D&O)} => {Seguro de Patinetes Eléctricos / Movilidad} 0.023 0.1900826 0.121 1.473509 23
¿Cómo interpretar estas métricas en el negocio?
- LHS y RHS: Si un cliente tiene contratado el seguro del lado izquierdo (LHS), el algoritmo evalúa la probabilidad de que adquiera el del lado derecho (RHS).
- Support (Soporte): El porcentaje total de clientes que tienen ambos seguros contratados a la vez.
- Confidence (Confianza): La probabilidad condicional. De los que compraron el producto LHS, qué porcentaje adquirió también el RHS.
- Lift (Elevación): La métrica reina. Un
Lift > 1indica que los productos están asociados positivamente (se compran juntos más de lo habitual). UnLift = 1denota total independencia estadística (no hay correlación).
5. Visualización Avanzada de Reglas
Las reglas numéricas cobran vida cuando las graficamos. Utilizaremos dos enfoques de visualización fundamentales para analizar los resultados.
A. Gráfico de Dispersión (Scatter Plot)
Este gráfico sitúa cada regla según su Soporte (Eje X) y Confianza (Eje Y), usando el color para resaltar el nivel de Lift. Las reglas más valiosas comercialmente suelen ubicarse en la zona superior derecha y con colores intensos.
plot(reglas, method = "scatterplot", engine = "ggplot2")B. Gráfico de Red (Graph Interactivo)
Ideal para identificar visualmente qué productos actúan como “imanes” o “anclas” comerciales hacia otros ramos. Las flechas conectan los antecedentes con sus consecuentes.
# Visualización de las 10 reglas con mayor Lift
plot(head(reglas_ordenadas, 10), method = "graph", engine = "htmlwidget")Conclusión
El algoritmo Apriori transforma datos transaccionales brutos en estrategias de negocio accionables. En entornos corporativos reales (con datos no aleatorios), este análisis revela conexiones lógicas (como vincular el seguro de Hogar con el de Impago de Alquiler) que permiten a las aseguradoras optimizar sus campañas de marketing (venta cruzada o crosselling), empaquetar pólizas atractivas (bundling) y mejorar la retención de sus clientes.