Segmentación RFM: cómo aprovechar la información sobre los clientes | por Vito Rihaldijiran | Jul, 2024

Los métodos varían cuando hablamos de segmentación de clientes. Bueno, depende de lo que queramos lograr, pero el objetivo principal de la segmentación de clientes es Coloque a los clientes en diferentes tipos de grupos según sus similitudes. Este método, en aplicaciones prácticas, ayudará a las empresas a especificar sus segmentos de mercado con estrategias de marketing personalizadas basadas en la información de la segmentación.

La segmentación RFM es un ejemplo de segmentación de clientes. RFM significa actualidad, frecuencia, y monetario. Esta técnica es muy común en las empresas comerciales debido a su enfoque sencillo pero potente. Según su abreviatura, podemos definir cada métrica en RFM de la siguiente manera:

  • Recencia (R):¿Cuándo fue la última vez que los clientes realizaron una compra? Los clientes que han comprado algo recientemente son más propensos a realizar otra compra, a diferencia de los clientes que no han realizado una compra durante un tiempo.
  • Frecuencia (F):¿Con qué frecuencia realizan compras los clientes? Los clientes que compran con frecuencia son vistos como más leales y valiosos.
  • Monetario (M)¿Cuánto dinero gasta un cliente? Valoramos a los clientes que gastan más dinero porque son valiosos para nuestro negocio.

El flujo de trabajo de la segmentación RFM es relativamente sencillo. Primero, recopilamos datos sobre las transacciones de los clientes en un período seleccionado. Asegúrese de que ya sabemos cuándo está realizando la transacción el cliente, cuántas cantidades de productos particulares compra el cliente en cada transacción y cuánto dinero gasta el cliente. Después de eso, haremos la puntuación. Hay muchos umbrales disponibles para que los consideremos, pero ¿qué tal si optamos por una escala que va del 1 al 5 para evaluar cada uno, donde 1 representa la puntuación más baja y 5 la más alta? En el paso final, combinamos las tres puntuaciones para crear segmentos de clientes. Por ejemplo, el cliente que tiene la puntuación RFM más alta (5 en actualidad, frecuencia y dinero) se considera leal, mientras que el cliente con la puntuación RFM más baja (1 en actualidad, frecuencia y dinero) se considera un usuario que abandona.

En las siguientes partes del artículo, crearemos una segmentación RFM utilizando una técnica popular de aprendizaje no supervisado conocida como K-medias.

En este ejemplo práctico no necesitamos recopilar los datos porque ya tenemos el conjunto de datos. Usaremos el Conjunto de datos de venta minorista en línea II de el repositorio de aprendizaje automático de la UCI. El conjunto de datos está licenciado bajo CC BY 4.0 y apto para uso comercial. Puede acceder al conjunto de datos de forma gratuita a través de este enlace.

Figura 1: Conjunto de datos de venta minorista en línea II por autor

El conjunto de datos contiene toda la información relativa a las transacciones de los clientes en los negocios minoristas en línea, como: Fecha de la factura, Cantidady PrecioHay dos archivos en el conjunto de datos, pero utilizaremos el “Año 2010-2011” Versión en este ejemplo. Ahora, hagamos el código.

Paso 1: Preparación de datos

El primer paso es preparar los datos. Lo hacemos de la siguiente manera:

# Load libraries
library(readxl) # To read excel files in R
library(dplyr) # For data manipulation purpose
library(lubridate) # To work with dates and times
library(tidyr) # For data manipulation (use in drop_na)
library(cluster) # For K-Means clustering
library(factoextra) # For data visualization in the context of clustering
library(ggplot2) # For data visualization

# Load the data
data <- read_excel("online_retail_II.xlsx", sheet = "Year 2010-2011")

# Remove missing Customer IDs
data <- data %>% drop_na(`Customer ID`)

# Remove negative or zero quantities and prices
data <- data %>% filter(Quantity > 0, Price > 0)

# Calculate the Monetary value
data <- data %>% mutate(TotalPrice = Quantity * Price)

# Define the reference date for Recency calculation
reference_date <- as.Date("2011-12-09")

El proceso de preparación de datos es fundamental porque la segmentación hará referencia a los datos que procesamos en este paso. Después de cargar las librerías y cargar los datos, realizamos los siguientes pasos:

  • Eliminar identificaciones de clientes faltantes: Asegurarse de que cada transacción tenga una identificación de cliente válida es crucial para una segmentación precisa de los clientes.
  • Eliminar cantidades y precios negativos o cero: Los valores negativos o cero para Cantidad o Precio no son significativos para el análisis RFM, ya que podrían representar devoluciones o errores.
  • Calcular valor monetario: Lo calculamos multiplicando Cantidad por Precio. Posteriormente agruparemos las métricas, una de ellas en monetaria por id de cliente.
  • Definir fecha de referencia: Esto es muy importante para determinar el valor de actualidad. Después de examinar el conjunto de datos, sabemos que la fecha “2011–12–09” es la fecha más reciente, por lo que la establecemos como fecha de referencia. La fecha de referencia calcula cuántos días han pasado desde la última transacción de cada cliente.

Los datos se verán así después de este paso:

Figura 2: El conjunto de datos después de la preparación de datos por parte del autor

Paso 2: Calcular y escalar las métricas RFM

En este paso, calcularemos cada métrica y las escalaremos antes de la parte de agrupamiento. Lo haremos de la siguiente manera:

# Calculate RFM metrics
rfm <- data %>%
group_by(`Customer ID`) %>%
summarise(
Recency = as.numeric(reference_date - max(as.Date(InvoiceDate))),
Frequency = n_distinct(Invoice),
Monetary = sum(TotalPrice)
)

# Assign scores from 1 to 5 for each RFM metric
rfm <- rfm %>%
mutate(
R_Score = ntile(Recency, 5),
F_Score = ntile(Frequency, 5),
M_Score = ntile(Monetary, 5)
)

# Scale the RFM scores
rfm_scaled <- rfm %>%
select(R_Score, F_Score, M_Score) %>%
scale()

Dividimos este paso en tres partes:

  • Calcular métricas RFM: Creamos un nuevo conjunto de datos llamado RFMComenzamos agrupando por CustomerID para que los cálculos posteriores de cada cliente se realicen individualmente. Luego, calculamos cada métrica. Calculamos Frescura restando la fecha de referencia por la fecha de transacción más reciente de cada cliente, Frecuencia contando el número de facturas únicas para cada cliente, y Monetario sumando el PrecioTotal de todas las transacciones de cada cliente.
  • Asignar puntuaciones del 1 al 5: La puntuación ayuda a categorizar a los clientes desde el RFM más alto hasta el más bajo, siendo 5 el más alto y 1 el más bajo.
  • Escala las puntuaciones: Luego, escalamos la puntuación de cada métrica. Esta escala garantiza que cada puntuación RFM contribuya de manera igualitaria al proceso de agrupamiento, evitando el predominio de alguna métrica debido a diferentes rangos o unidades.

Después de completar este paso, el resultado en el conjunto de datos RFM se verá así:

Figura 3: Puntuación RFM por autor

Y el conjunto de datos escalado se verá así:

Figura 4: Conjunto de datos RFM escalado por autor

Paso 3: Agrupamiento de K-Means

Ahora llegamos al paso final, la agrupación en K-Means. Para ello, hacemos lo siguiente:

# Determine the optimal number of clusters using the Elbow method
fviz_nbclust(rfm_scaled, kmeans, method = "wss")

# Perform K-means clustering
set.seed(123)
kmeans_result <- kmeans(rfm_scaled, centers = 4, nstart = 25)

# Add cluster assignment to the original RFM data
rfm <- rfm %>% mutate(Cluster = kmeans_result$cluster)

# Visualize the clusters
fviz_cluster(kmeans_result, data = rfm_scaled,
geom = "point",
ellipse.type = "convex",
palette = "jco",
ggtheme = theme_minimal(),
main = "Online Retail RFM Segmentation",
pointsize = 3) +
theme(
plot.title = element_text(size = 15, face = "bold"),
axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
legend.title = element_text(size = 12, face = "bold"),
legend.text = element_text(size = 10)
)

La primera parte de este paso es determinar El número óptimo de clústeres utilizando el método del codoEl método es s … o “suma de cuadrados dentro del conglomerado”, que mide la compacidad de los conglomerados. Este método funciona eligiendo el número de conglomerados en el punto donde la wss comienza a disminuir rápidamente y forma un “codo”. El codo disminuye en 4.

Figura 5: Implementación del método del codo por parte del autor

La siguiente parte es la agrupación. Especificamos 4 como el número de conglomerados y 25 como conjuntos aleatorios de centros de conglomerados iniciales y luego elegimos el mejor en función de la suma de cuadrados dentro del conglomerado más baja. Luego, lo agregamos al conglomerado. RFM conjunto de datos. La visualización del clúster se puede ver a continuación:

Figura 6: Visualización de clústeres por autor

Tenga en cuenta que los tamaños de los clústeres en el gráfico no están directamente relacionados con la cantidad de clientes en cada clúster. La visualización muestra la distribución de los puntos de datos en cada clúster en función de las puntuaciones RFM escaladas (R_Score, F_Score, M_Score) en lugar de la cantidad de clientes.

Al ejecutar este código, el resumen de la segmentación RFM se puede ver de la siguiente manera:

# Summary of each cluster
rfm_summary <- rfm %>%
group_by(Cluster) %>%
summarise(
Recency = mean(Recency),
Frequency = mean(Frequency),
Monetary = mean(Monetary),
Count = n()
)
Figura 7: Resumen de la segmentación de RFM por autor

A partir del resumen, podemos obtener información de cada grupo. Las sugerencias varían mucho. Sin embargo, lo que se me ocurre si fuera un científico de datos en un negocio minorista en línea es lo siguiente:

  • Grupo 1: Recientemente realizaron una compra (normalmente hace un mes), lo que indica una interacción reciente. Sin embargo, este grupo de clientes tiende a realizar compras con poca frecuencia y gasta cantidades relativamente pequeñas en general, con un promedio de 1 a 2 compras. Implementar campañas de retención basadas en estos hallazgos puede resultar muy eficaz. Dada su interacción reciente, sería beneficioso considerar estrategias como correos electrónicos de seguimiento o programas de fidelización con ofertas personalizadas para fomentar las compras repetidas. Esto presenta una oportunidad para sugerir productos adicionales que complementen sus compras anteriores, lo que en última instancia aumenta el valor promedio de los pedidos y el gasto general de este grupo.
  • Grupo 2: Los clientes de este grupo compraron hace aproximadamente dos semanas y han demostrado hábitos de compra frecuentes con gastos significativos. Se los considera clientes destacados y merecen un trato VIP: excelente servicio al cliente, ofertas especiales y acceso anticipado a nuevos artículos. Aprovechando su satisfacción, podríamos ofrecer programas de recomendación con bonificaciones y descuentos para sus familiares y amigos, lo que podría aumentar nuestra base de clientes y las ventas generales.
  • Grupo 3: Los clientes de este segmento han estado inactivos durante más de tres meses, aunque su frecuencia y valor monetario son moderados. Para volver a atraer a estos clientes, deberíamos considerar el lanzamiento de campañas de reactivación. Enviar correos electrónicos de recuperación con descuentos especiales o mostrarles los nuevos productos podría incitarlos a volver. Además, recopilar comentarios para descubrir las razones detrás de su falta de compras recientes y abordar cualquier problema o inquietud que puedan tener puede mejorar significativamente su experiencia futura y reavivar su interés.
  • Grupo 4: Los clientes de este grupo solo han comprado en un máximo de siete meses, lo que indica un período significativo de inactividad. Muestran la frecuencia y el valor monetario más bajos, lo que los hace muy susceptibles a la pérdida de clientes. En estas situaciones, es esencial implementar estrategias diseñadas específicamente para clientes inactivos. El envío de correos electrónicos de reactivación basados ​​en ofertas importantes o incentivos personalizados suele resultar eficaz para que estos clientes regresen a su negocio. Además, realizar encuestas de salida puede ayudar a identificar las razones detrás de su inactividad, lo que le permitirá mejorar sus ofertas y servicio al cliente para satisfacer mejor sus necesidades y reavivar su interés.

¡Felicitaciones! Ya sabes cómo realizar la segmentación RFM usando K-Means, ahora es tu turno de hacer lo mismo con tu propio conjunto de datos.