1 CASO 1: PLAZA VEA

1.1 ¿A quién deberíamos dirigir la próxima campaña de fidelización?

1.1.1 Contexto del negocio

plazaVea ha observado que durante los últimos meses algunos clientes han reducido su frecuencia de compra, mientras que otros continúan realizando compras de manera constante y con tickets elevados.

El área de Marketing busca identificar segmentos de clientes utilizando la metodología RFM (Recency, Frequency, Monetary) para diseñar campañas diferenciadas que permitan:

  • Incrementar la recompra.

  • Recuperar clientes inactivos.

  • Fidelizar a los clientes más valiosos.

  • Optimizar la inversión promocional.

Para ello se dispone de una muestra de transacciones registradas durante los últimos 12 meses con las siguientes variables :

Variable Descripción
id_ticket Identificador de compra
fecha_compra Fecha de compra
id_cliente Cliente
sexo M/F
edad Edad
distrito Distrito residencia
canal Tienda / Ecommerce
categoria_principal Categoría comprada
metodo_pago Medio de pago
monto_compra Importe ticket
items Cantidad de productos

2 Objetivos del ejercicio

Los estudiantes deberán:

  1. Construir la tabla RFM de clientes.
# Carga de datos
library(tidyverse)
library(lubridate)
library(scales)

datos <- read.csv("plazavea_transacciones.csv")
head(datos)
##   id_ticket fecha_compra id_cliente sexo edad   distrito  canal
## 1  TK000001   2025-08-04   CLI_1415    F   37  La Molina Tienda
## 2  TK000002   2025-02-25   CLI_1463    M   65  La Molina Tienda
## 3  TK000003   2025-03-12   CLI_1179    M   36 San Isidro Tienda
## 4  TK000004   2025-08-29   CLI_1526    M   33      Surco Tienda
## 5  TK000005   2025-03-02   CLI_1195    M   32  San Borja Tienda
## 6  TK000006   2025-01-10   CLI_1938    M   28 Miraflores Tienda
##   categoria_principal metodo_pago monto_compra items
## 1             Frescos     Tarjeta        37.07    16
## 2             Bebidas        Plin       104.46     7
## 3           Abarrotes     Tarjeta        53.63     8
## 4           Abarrotes     Tarjeta        53.15     7
## 5           Abarrotes     Tarjeta        81.16     4
## 6           Abarrotes    Efectivo        75.01    11
# Exploración Inicial
## Cantidad de registros
nrow(datos)
## [1] 10000
## Cantidad de clientes únicos
n_distinct(datos$id_cliente)
## [1] 1985
## Estadísticas del monto de compra
summary(datos$monto_compra)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    8.53   44.54   67.13   80.40   99.56  662.59
ggplot(datos,
       aes(x = monto_compra)) +

  geom_histogram(
    bins = 40,
    fill = "#E41E2B",
    color = "white"
  ) +

  theme_minimal() +

  labs(
    title = "Distribución de los montos de compra",
    x = "Monto",
    y = "Frecuencia"
  )

## Preparación de fechas
datos$fecha_compra <- as.Date(datos$fecha_compra)
fecha_analisis <- max(datos$fecha_compra)

## Construcción de indicadores
rfm <- datos %>%
  group_by(id_cliente) %>%
  summarise(

    Recency =
      as.numeric(fecha_analisis -
      max(fecha_compra)),

    Frequency =
      n(),

    Monetary =
      sum(monto_compra)

  )
head(rfm)
## # A tibble: 6 × 4
##   id_cliente Recency Frequency Monetary
##   <chr>        <dbl>     <int>    <dbl>
## 1 CLI_1001        44         6     596.
## 2 CLI_1002        58         6     924.
## 3 CLI_1003        96         5     298.
## 4 CLI_1004        13         5     349.
## 5 CLI_1005        74         7     378.
## 6 CLI_1006        56         2     128.
# Estadísticas de los Indicadores RFM
summary(rfm)
##   id_cliente           Recency         Frequency         Monetary     
##  Length:1985        Min.   :  0.00   Min.   : 1.000   Min.   :  12.8  
##  Class :character   1st Qu.: 20.00   1st Qu.: 3.000   1st Qu.: 244.4  
##  Mode  :character   Median : 47.00   Median : 5.000   Median : 375.3  
##                     Mean   : 67.66   Mean   : 5.038   Mean   : 405.0  
##                     3rd Qu.: 93.00   3rd Qu.: 6.000   3rd Qu.: 531.4  
##                     Max.   :352.00   Max.   :15.000   Max.   :1454.1
  1. Generar los percentiles para R, F y M.
rfm <- rfm %>%

  mutate(

    R_Score =
      ntile(-Recency,5),

    F_Score =
      ntile(Frequency,5),

    M_Score =
      ntile(Monetary,5)

  )
  1. Crear un Score RFM.
rfm <- rfm %>%

  mutate(

    RFM_Score =
      paste0(R_Score,
             F_Score,
             M_Score)

  )
  1. Segmentar clientes

    Criterio de Segmentación

    La lógica utilizada busca identificar comportamientos de compra relevantes para Plaza Vea:

    Campeones

    Son los clientes más valiosos de la empresa.

    Características:

    • Han comprado recientemente.
    • Compran con frecuencia.
    • Generan un alto nivel de gasto.

    En términos de negocio, representan el grupo de clientes que plazaVea debería proteger y fidelizar prioritariamente, ya que constituyen una parte importante de los ingresos de la compañía.

    Condición utilizada:

    • Recency alto (R ≥ 4)
    • Frequency alta (F ≥ 4)
    • Monetary alto (M ≥ 4)

    Clientes Leales

    Son clientes con una relación sólida con la empresa.

    Características:

    • Compran frecuentemente.
    • Generan un gasto importante.
    • Pueden no haber realizado una compra tan reciente como los Campeones.

    Estos clientes representan una oportunidad para desarrollar estrategias de fidelización, programas de beneficios y acciones de cross-selling.

    Condición utilizada:

    • Frequency alta (F ≥ 4)
    • Monetary alto (M ≥ 4)

    Clientes en Riesgo

    Son clientes que muestran señales de abandono.

    Características:

    • Hace tiempo que no compran.
    • Compran poco frecuentemente.

    Aunque actualmente presentan una baja actividad, podrían ser recuperados mediante campañas específicas de reactivación.

    Condición utilizada:

    • Recency baja (R ≤ 2)
    • Frequency baja (F ≤ 2)

    Clientes Potenciales

    Corresponden a todos aquellos clientes que no encajan claramente en las categorías anteriores.

    Este grupo suele contener clientes nuevos, ocasionales o en proceso de desarrollo, sobre los cuales pueden aplicarse estrategias diferenciadas según sus características futuras.

rfm <- rfm %>%

mutate(

Segmento = case_when(

R_Score >=4 &
F_Score >=4 &
M_Score >=4 ~ "Campeones",  # Clientes de mayor valor para Plaza Vea

F_Score >=4 &
M_Score >=4 ~ "Leales",   # Clientes frecuentes y con alto gasto

R_Score <=2 &
F_Score <=2 ~ "En Riesgo", # Clientes con señales de abandono

TRUE ~ "Potencial"  # Resto de clientes

)

)

table(rfm$Segmento)
## 
## Campeones En Riesgo    Leales Potencial 
##       304       440       320       921
library(ggplot2)

rfm %>%

count(Segmento) %>%

ggplot(aes(x=reorder(Segmento,n),
           y=n,
           fill=Segmento))+

geom_col()+

coord_flip()+

theme_minimal(base_size = 14)+

labs(
title="Distribución de Clientes por Segmento RFM",
x="",
y="Clientes"
)

¿Está de acuerdo con esta clasificación?

  • ¿Qué ventajas encuentra en esta segmentación?
  • ¿Qué limitaciones podría tener?
  • ¿Agregaría algún segmento adicional para mejorar la estrategia comercial de plazaVea?
# Participación de Ventas por Segmento
ventas_segmento <- rfm %>%
group_by(Segmento) %>%
summarise(
Ventas = sum(Monetary)  # Suma el gasto total generado por los clientes
) %>%
  mutate(
    # Calcula la participación de cada segmento
    # respecto al total de ventas
    Porcentaje_Ventas =
      round(Ventas / sum(Ventas) * 100,2)
  )


ventas_segmento
## # A tibble: 4 × 3
##   Segmento   Ventas Porcentaje_Ventas
##   <chr>       <dbl>             <dbl>
## 1 Campeones 197795.              24.6
## 2 En Riesgo  97536.              12.1
## 3 Leales    202304.              25.2
## 4 Potencial 306330.              38.1
  1. Responder preguntas estratégicas de negocio.

3 Preguntas de investigación

3.1 Pregunta 1

3.1.1 ¿Qué porcentaje de clientes concentra el mayor valor económico para Plaza Vea?

Identifique los clientes de mayor score RFM Campeones y determine:

  1. ¿Cuántos clientes pertenecen a este grupo?
  2. ¿Cuánto gastan en total?
  3. ¿Qué porcentaje de clientes concentran?
  4. ¿Qué porcentaje de ventas generan?

3.1.2 Objetivo de negocio

Evaluar si existe una alta concentración de ventas en un grupo reducido de clientes.

# =====================================================
# ANÁLISIS DEL SEGMENTO CAMPEONES
# =====================================================

# Filtramos únicamente los clientes clasificados
# como "Campeones"

campeones <- rfm %>%
  filter(Segmento == "Campeones")

# =====================================================
# PREGUNTA 1
# ¿Cuántos clientes pertenecen a este grupo?
# =====================================================

# nrow() cuenta la cantidad de filas
# En este caso, cada fila representa un cliente

cantidad_campeones <- nrow(campeones)
cantidad_campeones
## [1] 304
# =====================================================
# PREGUNTA 2
# ¿Cuánto gastan en total?
# =====================================================

# Sumamos el gasto acumulado (Monetary)
# de todos los clientes campeones

ventas_campeones <- sum(campeones$Monetary)
ventas_campeones
## [1] 197795.3
# =====================================================
# PREGUNTA 3
# ¿Qué porcentaje de clientes representan?
# =====================================================

# Calculamos la cantidad total de clientes
# existentes en la base RFM

total_clientes <- nrow(rfm)

# Calculamos la participación de los Campeones
# sobre el total de clientes

pct_clientes_campeones <-
  cantidad_campeones /
  total_clientes * 100

pct_clientes_campeones
## [1] 15.31486
# =====================================================
# PREGUNTA 4
# ¿Qué porcentaje de ventas generan?
# =====================================================

# Calculamos las ventas totales de todos
# los clientes de la base

ventas_totales <- sum(rfm$Monetary)

# Calculamos la participación de ventas
# generada por los Campeones

pct_ventas_campeones <-
  ventas_campeones /
  ventas_totales * 100

pct_ventas_campeones
## [1] 24.60247

3.2 Pregunta 2

3.2.1 ¿Qué grupo de clientes presenta mayor riesgo de abandono?

Analice el segmento En Riesgo.

  1. ¿Cuántos clientes existen?
  2. ¿Cuánto gastaron históricamente?
  3. ¿Vale la pena intentar recuperarlos?

3.2.2 Objetivo de negocio

Diseñar campañas de recuperación.

# =====================================================
# ANÁLISIS DEL SEGMENTO EN RIESGO
# =====================================================

# Filtramos únicamente los clientes clasificados
# como "En Riesgo"

riesgo <- rfm %>%
  filter(Segmento == "En Riesgo")
# =====================================================
# PREGUNTA 1
# ¿Cuántos clientes existen?
# =====================================================

# nrow() cuenta la cantidad de filas
# En este caso, cada fila representa un cliente

cantidad_riesgo <- nrow(riesgo)

cantidad_riesgo
## [1] 440
# =====================================================
# PREGUNTA 2
# ¿Cuánto gastaron históricamente?
# =====================================================

# Sumamos el gasto acumulado de todos
# los clientes en riesgo

ventas_riesgo <- sum(riesgo$Monetary)

ventas_riesgo
## [1] 97536.16
# =====================================================
# PARTICIPACIÓN DEL SEGMENTO
# SOBRE LAS VENTAS TOTALES
# =====================================================

# Ventas totales de toda la base

ventas_totales <- sum(rfm$Monetary)

# Porcentaje de ventas que representan
# los clientes en riesgo

pct_ventas_riesgo <-
  ventas_riesgo /
  ventas_totales * 100

pct_ventas_riesgo
## [1] 12.13189
# =====================================================
# PARTICIPACIÓN DEL SEGMENTO
# SOBRE EL TOTAL DE CLIENTES
# =====================================================

# Total de clientes de la base

total_clientes <- nrow(rfm)

# Porcentaje de clientes en riesgo

pct_clientes_riesgo <-
  cantidad_riesgo /
  total_clientes * 100

pct_clientes_riesgo
## [1] 22.16625

Los clientes en riesgo presentan un gasto promedio elevado.

Aunque actualmente han reducido su actividad, existe una oportunidad de recuperación mediante campañas personalizadas.

3.3 Pregunta 3

3.3.1 Si Marketing dispone de un presupuesto limitado para una campaña personalizada, ¿a qué segmento debería dirigirla?

Compare:

  • Campeones.
  • Clientes Leales.
  • Clientes en Riesgo.

3.3.2 Recomendación

¿A qué segmento invertiría el presupuesto y por qué?

Justifique utilizando los resultados obtenidos.

rfm %>%

group_by(Segmento) %>%    # agrupa registros
summarise(                 # genera métricas por grupo
Clientes = n(),
Venta_Total = sum(Monetary),
Venta_Promedio = mean(Monetary)
) %>%
arrange(desc(Venta_Total))        # ordena resultados
## # A tibble: 4 × 4
##   Segmento  Clientes Venta_Total Venta_Promedio
##   <chr>        <int>       <dbl>          <dbl>
## 1 Potencial      921     306330.           333.
## 2 Leales         320     202304.           632.
## 3 Campeones      304     197795.           651.
## 4 En Riesgo      440      97536.           222.

4 Pregunta Desafío

4.1 Concentración del Valor de los Clientes

El gerente de Marketing desea entender si las ventas de plazaVea se distribuyen de manera homogénea entre todos los clientes o si existen segmentos que generan una contribución significativamente mayor.

Utilizando los resultados obtenidos mediante el análisis RFM:

  1. ¿Qué segmentos concentran la mayor parte de las ventas?
  2. ¿Existe evidencia de que algunos clientes son más valiosos que otros?
  3. ¿Cómo debería Plaza Vea asignar sus recursos de marketing considerando estos resultados?
  4. ¿Qué riesgos enfrentaría la empresa si perdiera a sus clientes de mayor valor?

5 Solución

5.0.1 ¿Qué segmentos concentran la mayor parte de las ventas?

A partir de los resultados obtenidos:

Segmento Clientes Venta Total
Potencial 921 S/ 306,330
Leales 320 S/ 202,304
Campeones 304 S/ 197,795
En Riesgo 440 S/ 97,536

Los segmentos Leales y Campeones generan conjuntamente:

202304 + 197795
## [1] 400099

equivalente aproximadamente al:

400099 / 803965 * 100
## [1] 49.76572

de las ventas totales.

5.0.2 ¿Existe evidencia de que algunos clientes son más valiosos que otros?

Sí.

Aunque los segmentos Leales y Campeones representan aproximadamente:

(320 + 304) / 1985 * 100
## [1] 31.43577

de los clientes, generan cerca del 50% de las ventas totales.

Además, presentan los mayores niveles de gasto promedio:

Segmento Venta Promedio
Campeones S/ 650.64
Leales S/ 632.20
Potencial S/ 332.61
En Riesgo S/ 221.67

Esto demuestra que no todos los clientes tienen el mismo valor económico para plazaVea.

5.0.3 ¿Cómo debería Plaza Vea asignar sus recursos?

Se recomienda una estrategia diferenciada:

Segmento Estrategia
Campeones Fidelización VIP
Leales Cross-selling y crecimiento
Potencial Desarrollo y maduración
En Riesgo Reactivación selectiva

La mayor inversión debería concentrarse en Campeones y Leales, debido a su elevada contribución económica.

5.0.4 ¿Qué riesgo enfrenta Plaza Vea?

La pérdida de clientes Campeones y Leales podría generar una reducción significativa en las ventas, ya que estos segmentos aportan aproximadamente la mitad de los ingresos totales.

Por ello, la empresa debe monitorear continuamente su comportamiento y diseñar estrategias que fortalezcan la relación con estos clientes.