! Si nos ha seguido, hemos recorrido un largo camino. En la Parte 1, hicimos el "trabajo sucio" de limpieza y preparación.
En la Parte 2, nos acercamos a una vista a gran altitud del mundo de NovaShop, detectando las grandes tormentas (países de altos ingresos) y los patrones estacionales (la avalancha masiva del cuarto trimestre).
Pero aquí está la cuestión: una empresa en realidad no vende a “meses” o “países”. Se vende a seres humanos.
Si tratas a todos los clientes exactamente igual, estás cometiendo dos errores muy costosos:
Sobredescuento: Dar un cupón de “20% de descuento” a alguien que ya estaba buscando su billetera. Ignorar a los “tranquilos”: no darse cuenta cuando un cliente anteriormente leal deja de visitarnos, hasta que ya no están por seis meses y ya es demasiado tarde para recuperarlos.
¿La solución? Segmentación conductual.
En lugar de adivinar, usaremos los datos para que los clientes nos digan quiénes son. Hacemos esto utilizando el estándar de oro de la analítica minorista: el análisis RFM.
Recency (R): ¿Qué tan recientemente compraron? (¿Siguen comprometidos con nosotros?) Frecuencia (F): ¿Con qué frecuencia compran? (¿Son leales o fue algo puntual?) Monetario (M): ¿Cuánto gastan? (¿Cuál es su impacto comercial total?)
Al final de esta parte, iremos más allá de los "10 productos principales" y asignaremos una etiqueta específica y procesable a cada cliente en la base de datos de NovaShop.
Preparación de datos: el pivote de la “identificación faltante”
Antes de que podamos empezar a puntuar, tenemos que abordar una decisión que tomamos en la Parte 1.
Si recuerda nuestra inspección inicial, notamos que aproximadamente al 25% de nuestras filas faltaba un ID de cliente. En ese momento, tomamos la decisión comercial estratégica de mantener esas filas. Los necesitábamos para calcular los ingresos totales exactos y ver qué productos eran populares en general.
Para el análisis RFM, las reglas cambian. No se puede rastrear el comportamiento sin una identidad consistente. ¡No podemos saber qué tan “frecuente” es un cliente si no sabemos quiénes son!
Entonces, nuestro primer paso en la Parte 3 es aislar nuestro "Universo rastreable" filtrando las filas donde existe un CustomerID.
Ingeniería de las métricas de RFM
Ahora que tenemos un conjunto de datos donde cada fila está vinculada a una persona específica, debemos agregar todas sus transacciones individuales en tres números resumidos: Actualidad, Frecuencia y Monetaria.
Definición de la fecha de la instantánea
Antes de calcular RFM, necesitamos un punto de referencia en el tiempo, comúnmente llamado fecha de instantánea.
Aquí, tomamos la fecha de transacción más reciente en el conjunto de datos y agregamos un día. Esta fecha instantánea representa el momento en el que estamos evaluando el comportamiento del cliente.
snapshot_date = df['FechaFactura'].max() + dt.timedelta(días=1)
Agregamos un día, por lo que los clientes que compraron en la fecha más reciente todavía tienen un valor de actualidad de 1 día, no 0. Esto mantiene la métrica intuitiva y evita problemas de casos extremos.
Agregación de transacciones a nivel de cliente
rfm = df.groupby('CustomerID').agg({ 'InvoiceDate': lambda x: (snapshot_date – x.max()).days, 'InvoiceNo': 'nunique', 'Ingresos': 'suma' })
Cada fila de nuestro conjunto de datos representa una única transacción. Para calcular RFM, debemos contraer estas transacciones en una fila por cliente.
Hacemos esto agrupando los datos por CustomerID y aplicando diferentes funciones de agregación:
Actualidad: para cada cliente, encontramos su fecha de compra más reciente y calculamos cuántos días han pasado desde entonces. Frecuencia: Contamos el número de facturas únicas asociadas a cada cliente. Esto nos dice con qué frecuencia han realizado compras. Monetario: sumamos los ingresos totales generados por cada cliente en todas las transacciones.
Cambiar el nombre de las columnas para mayor claridad
rfm.rename(columnas={ 'FechaFactura': 'Reciente', 'NºFactura': 'Frecuencia', 'Ingresos': 'Monetario' }, inplace=True)py
El paso de agregación mantiene los nombres de las columnas originales, lo que puede resultar confuso. Cambiarles el nombre hace que el marco de datos sea inmediatamente legible y lo alinea con la terminología RFM estándar.
Ahora cada columna responde claramente a una pregunta empresarial:
Actualidad → ¿Qué tan recientemente compró el cliente? Frecuencia → ¿Con qué frecuencia compran? Monetario → ¿Cuántos ingresos generan?
Inspeccionando el resultado
imprimir(rfm.head())
El marco de datos final de rfm contiene una fila por cliente, con tres métricas intuitivas que resumen su comportamiento.
Producción:
Repasemos esto como lo haríamos con NovaShop en una conversación real.
"¿Cuándo fue la última vez que este cliente nos compró?"
Eso es exactamente lo que responde Recency.
Tome al cliente 12347:
Actualidad = 2 Traducción: "Este cliente compró algo hace apenas dos días".
Están frescos. Recuerdan la marca. Todavía están comprometidos.
Ahora compárelo con el Cliente 12346:
Recencia = 326 Traducción: “No han comprado nada en casi un año”.
Aunque este cliente gastó mucho en el pasado, actualmente guarda silencio.
Desde la perspectiva de NovaShop: la actualidad nos dice quién sigue escuchando y quién podría necesitar un empujón (o una llamada de atención).
"¿Se trata de un comprador único o de alguien que vuelve una y otra vez?"
Ahí es donde entra en juego la frecuencia.
Mire nuevamente al Cliente 12347:
Frecuencia = 7 No compraron sólo una vez: volvieron una y otra vez.
Ahora mire varios otros:
Frecuencia = 1 Una compra y luego desaparece.
Desde una perspectiva empresarial, la frecuencia separa a los compradores ocasionales de los clientes leales.
“¿Quién aporta realmente el dinero?”
Esa es la columna Monetaria.
Y aquí es donde las cosas se ponen interesantes.
Cliente 12346:
Monetario = £77,183.60 Frecuencia = 1 Actualidad = 326
Esto cuenta una historia muy específica:
Un único pedido muy grande… hace mucho tiempo… y nada desde entonces.
Ahora compárelo con el Cliente 12347:
Menor gasto total Compras múltiples Actividad muy reciente
Información importante para NovaShop: un cliente de “alto valor” en el pasado no es necesariamente un cliente valioso hoy.
Por qué esta visión cambia la conversación
Si NovaShop solo considerara los ingresos totales, podría centrar toda su atención en clientes como 12346.
Pero RFM nos muestra que:
Algunos clientes gastaron mucho una vez y desaparecieron. Algunos gastan menos pero se mantienen leales. Algunos están activos en este momento y listos para participar.
Este resultado ayuda a NovaShop a dejar de adivinar y comenzar a priorizar:
¿Quién debería recibir correos electrónicos de retención? ¿Quién necesita campañas de reactivación? ¿Quién ya es leal y debería ser recompensado?
En este momento, estos son todavía números brutos.
En el siguiente paso, clasificaremos y calificaremos a estos clientes, para que NovaShop no tenga que interpretar las filas manualmente. En cambio, verán segmentos claros como:
Clientes leales de Champions en riesgo de pérdida
Ahí es donde esto se convierte en una verdadera herramienta para la toma de decisiones, no solo en un marco de datos.
Convertir números de RFM en segmentos de clientes significativos
En esta etapa, NovaShop tiene una tabla llena de números. Útil, pero no precisamente fácil de tomar decisiones.
De manera realista, un equipo de marketing no puede escanear cientos o miles de filas preguntando:
¿Una reciente de 19 es buena o mala? ¿Es impresionante la Frecuencia = 2? ¿Cuánto valor monetario es “alto”?
Nuestro objetivo es clasificar a los clientes entre sí y convertir los valores brutos en puntuaciones.
Paso 1: Clasificar a los clientes según cada métrica de RFM
En lugar de tratar lo reciente, la frecuencia y lo monetario como valores absolutos, analizamos la posición de cada cliente en comparación con los demás.
Los clientes con compras más recientes deberían obtener una puntuación más alta. Los clientes que compran con más frecuencia deberían obtener una puntuación más alta. Los clientes que gastan más deberían obtener una puntuación más alta.
En la práctica, hacemos esto dividiendo cada métrica en cuantiles (generalmente 4 o 5 grupos).
Sin embargo, hay un pequeño inconveniente en el mundo real. Esto es algo que encontré mientras trabajaba en este proyecto.
En conjuntos de datos transaccionales, es común ver:
Muchos clientes con la misma frecuencia (por ejemplo, compradores únicos) Valores monetarios muy sesgados Muestras pequeñas donde la agrupación de cuantiles puede fallar
Para mantener todo sólido y legible, incluiremos la lógica de puntuación en una pequeña función auxiliar.
def rfm_score(series, ascending=True, n_bins=5): # Clasificar los valores para garantizar la unicidad ranking = series.rank(method='first', ascending=ascending) # Usar pd.qcut en las filas para asignar contenedores return pd.qcut( ranking, q=n_bins, etiquetas=range(1, n_bins+1) ).astype(int)
Para explicar lo que está pasando aquí:
Estamos creando una función auxiliar que convierte una columna numérica sin formato en una puntuación RFM limpia mediante agrupación basada en cuantiles. Primero, se clasifican los valores. Entonces, en lugar de agrupar los valores brutos directamente, los clasificamos primero. Este paso garantiza pedidos únicos, incluso cuando muchos clientes comparten el mismo valor (un problema común en los datos de RFM). La bandera ascendente nos permite invertir la lógica según la métrica; por ejemplo, una menor actualidad es mejor, mientras que una mayor frecuencia y valores monetarios son mejores. A continuación, aplicaremos la agrupación basada en cuantiles. qcut divide los valores clasificados en n_bins grupos del mismo tamaño. A cada cliente se le asigna una puntuación del 1 al 5 (de forma predeterminada), donde la puntuación representa su posición relativa dentro de la distribución. Finalmente, los resultados se convertirán a números enteros para facilitar su uso en el análisis y la segmentación.
En resumen, esta función proporciona una forma sólida y reutilizable de calificar métricas de RFM sin encontrarse con errores duplicados en los bordes del contenedor y sin complicar demasiado la lógica.
Paso 2: aplicar las puntuaciones
Ahora podemos calificar cada métrica de manera limpia y consistente:
# Asignar puntuaciones R, F, M rfm['R_Score'] = rfm_score(rfm['Recency'], ascending=False) # Compras recientes = puntuación más alta rfm['F_Score'] = rfm_score(rfm['Frequency']) # Más frecuente = puntuación más alta rfm['M_Score'] = rfm_score(rfm['Monetary']) # Mayor gasto = puntuación más alta
El único caso especial aquí es la actualidad:
Los valores más bajos significan actividad más reciente. Así que invertimos la clasificación con ascendente=Falso. Todo lo demás sigue la regla natural "cuanto más alto, mejor".
Lo que esto significa para NovaShop
En lugar de ver esto:
Actualidad = 326 Frecuencia = 1 Monetaria = 77.183,60
NovaShop ahora ve algo como:
R = 1, F = 1, M = 5
Eso es instantáneamente más interpretable:
No reciente No frecuente Gastador elevado (históricamente)
Paso 3: creación de una puntuación RFM combinada
Ahora combinamos estas tres puntuaciones en un único código RFM:
rfm['RFM_Score'] = ( rfm['R_Score'].astype(str) + rfm['F_Score'].astype(str) + rfm['M_Score'].astype(str) )
Esto produce valores como:
555 → Mejores clientes 155 → Grandes gastadores que no han regresado 111 → Clientes que probablemente ya no están
Cada cliente lleva ahora una huella digital de comportamiento compacta. Y aún no hemos terminado.
Traducir puntuaciones de RFM en segmentos de clientes
Las puntuaciones brutas son buenas, pero seamos honestos: ningún gerente de marketing quiere mirar 555, 154 o 311 todo el día.
NovaShop necesita etiquetas que tengan sentido a simple vista. Ahí es donde entran los segmentos RFM.
Paso 1: Definir segmentos
Utilizando puntuaciones de RFM, podemos clasificar a los clientes en categorías significativas. A continuación se muestra un enfoque común:
Campeones: mayor actualidad, mayor frecuencia, mayor monetario (555): sus mejores clientes Clientes leales: compradores habituales, es posible que no sean los que más gastan, pero siguen regresando Grandes gastadores: alto monetario, pero no necesariamente reciente o frecuente En riesgo: solían comprar, pero no han regresado recientemente Perdido: puntajes bajos en las tres métricas; probablemente no estén comprometidos Prometedor/nuevo: clientes recientes con menor frecuencia o gasto monetario
Esto transforma los números abstractos en una narrativa sobre la que el marketing y la gestión pueden actuar.
Paso 2: Asignación de puntuaciones a segmentos
A continuación se muestra un ejemplo que utiliza lógica condicional simple:
def rfm_segment(fila): si fila['R_Score'] >= 4 y fila['F_Score'] >= 4 y fila['M_Score'] >= 4: devuelve elif 'Campeones' fila['F_Score'] >= 4: devuelve elif 'Clientes leales' fila['M_Score'] >= 4: devuelve elif 'Grandes gastadores' fila['R_Score'] <= 2: devuelve 'En riesgo' más: devuelve 'Otros' rfm['Segmento'] = rfm.apply(rfm_segment, eje=1)
Ahora cada cliente tiene una etiqueta legible por humanos, lo que la hace procesable de inmediato.
Repasemos nuestros resultados usando rfm.head()
Paso 3: convertir segmentos en estrategia
Con segmentos etiquetados, NovaShop puede:
Recompense a los campeones → Ofertas exclusivas, puntos de fidelidad Vuelva a atraer a los grandes gastadores y a los clientes en riesgo → Correos electrónicos personalizados o descuentos Enfoque el marketing de manera inteligente → No desperdicie esfuerzos en clientes que están realmente perdidos
Este es el momento donde los datos se convierten en estrategia.
Qué debería hacer NovaShop a continuación (conclusiones clave y recomendaciones)
Al comienzo de este análisis, NovaShop tenía un problema familiar:
Muchos datos transaccionales, pero claridad limitada sobre el comportamiento del cliente.
Al aplicar el marco RFM, hemos convertido el historial de compras sin procesar en una vista clara y estructurada de quiénes son los clientes de NovaShop y cómo se comportan.
Ahora hablemos de qué hacer realmente con él.
1. Proteja y recompense a sus mejores clientes
Los campeones y los clientes leales ya están haciendo lo que toda empresa quiere:
Compran recientemente Compran con frecuencia Generan ingresos constantes
Estos clientes no necesitan grandes descuentos: necesitan reconocimiento.
Acciones recomendadas:
Acceso temprano a ventas Puntos de fidelidad o niveles VIP Correos electrónicos de agradecimiento personalizados
El objetivo aquí no es la adquisición, es la retención.
2. Vuelva a atraer a los clientes de alto valor antes de que se pierdan
El segmento más peligroso para NovaShop no son los clientes “perdidos”.
Son personas en riesgo y grandes gastadoras.
Estos clientes:
Han mostrado un valor claro en el pasado Pero no han comprado recientemente Están a un paso de deshacerse por completo
Acciones recomendadas:
Campañas de recuperación específicas Ofertas personalizadas (no descuentos generales) Correos electrónicos de recordatorio vinculados a comportamientos de compra anteriores
Recuperar a un cliente existente casi siempre es más barato que adquirir uno nuevo.
3. No invierta demasiado en clientes verdaderamente perdidos
Algunos clientes inevitablemente abandonarán el negocio. RFM ayuda a NovaShop a identificar a esos clientes de manera temprana y evitar gastar presupuesto publicitario, descuentos y esfuerzos de marketing en usuarios que es poco probable que regresen. No se trata de ser frío, sino de ser eficiente.
4. Utilice RFM como un marco vivo, no como un análisis único
El verdadero poder de RFM surge cuando:
Se recalcula mensual o trimestralmente. Integrado en paneles. Se utiliza para rastrear el movimiento entre segmentos a lo largo del tiempo.
Para NovaShop, esto significa hacer preguntas como:
¿Cuántos clientes en riesgo se volvieron leales este mes? ¿Los campeones están aumentando o disminuyendo? ¿Qué campañas realmente hacen ascender a los clientes?
RFM convierte el comportamiento del cliente en algo medible y rastreable.
Reflexiones finales: Cerrando la EDA en serie pública
Cuando comencé esta serie de EDA en público, no estaba tratando de crear el análisis perfecto ni demostrar técnicas avanzadas. Quería reducir el ritmo y compartir cómo pienso realmente cuando trabajo con datos reales. No la versión pulida, sino el proceso iterativo y desordenado que normalmente permanece oculto.
Este proyecto comenzó con un CSV ruidoso y muchas preguntas abiertas. En el camino, hubo pequeños problemas que solo surgieron una vez que presté más atención: fechas almacenadas como cadenas, suposiciones que no se sostenían del todo, métricas que necesitaban contexto antes de que tuvieran sentido. Trabajar esos momentos en público fue a veces incómodo, pero también genuinamente valioso. Cada corrección hizo que el análisis fuera más sólido y honesto.
Una cosa que este proceso reforzó para mí es que la mayoría de las ideas significativas no provienen de la complejidad. Surgen de desacelerar, estructurar los datos adecuadamente y hacer mejores preguntas. Cuando llegué al análisis RFM, el valor no estaba en las fórmulas en sí mismas, sino en lo que me obligaban a enfrentar. Un cliente que alguna vez gastó mucho no es necesariamente valioso hoy. Lo reciente importa. La frecuencia importa. Y ninguna de estas métricas significa mucho por sí sola.
Terminar la serie con RFM pareció deliberado. Se sitúa en el punto donde el trabajo técnico se encuentra con el pensamiento empresarial, donde las mesas se convierten en conversaciones y los números en decisiones. Es también donde el análisis exploratorio deja de ser puramente descriptivo y comienza a volverse práctico. En esa etapa, el objetivo ya no es sólo comprender los datos, sino decidir qué hacer a continuación.
Hacer este trabajo en público cambió mi forma de abordar el análisis. Escribir cosas me obligó a explicar mi razonamiento, cuestionar mis suposiciones y sentirme cómoda mostrando un trabajo imperfecto. Me recordó que EDA no es una lista de verificación que uno revisa rápidamente: es un diálogo con los datos. Compartir ese diálogo te hace más reflexivo y responsable.
Esta puede ser la parte final de la serie EDA en público, pero no parece un punto final. Todo aquí podría evolucionar hacia paneles de control, procesos automatizados o análisis más profundos de los clientes.
Y si usted es un fundador, analista o equipo que trabaja con datos de clientes o de ventas y trata de darles sentido, este tipo de trabajo exploratorio suele ser de donde proviene la mayor claridad. Estos son exactamente los tipos de problemas que disfruto resolver: lenta, reflexivamente y teniendo en cuenta el contexto empresarial.
Si está documentando sus propios análisis, me encantaría ver cómo lo aborda. Y si tiene preguntas similares en sus datos y desea hablar sobre ellas, no dude en comunicarse con cualquiera de las plataformas a continuación. Las buenas conversaciones sobre datos suelen comenzar ahí.
¡Gracias por seguirnos!
Medio
Gorjeo
YouTube