En el sector retail, las cadenas de hipermercados generan una cantidad de datos enorme. Estos datos se producen a diario en todas las tiendas. Esta base de datos tan extensa de transacciones de clientes debe analizarse para diseñar estrategias rentables.
Cada cliente tiene necesidades distintas. A medida que crece la base de clientes y el volumen de transacciones, no es fácil comprender lo que necesita cada uno. Identificar a los clientes con mayor potencial puede mejorar las campañas de marketing y, en última instancia, aumentar las ventas. La segmentación ayuda a agrupar a los clientes en distintos segmentos para poder abordarlos mejor.
¿Qué es la segmentación de clientes?
La segmentación de clientes es un método para dividir a los clientes en grupos o clústeres en función de características comunes. En el modelo B2C, la investigación de mercado puede segmentar clientes según características demográficas como ocupación, género, edad, ubicación y estado civil; características psicográficas como clase social, estilo de vida y personalidad; y características de comportamiento como gasto, hábitos de consumo, uso de productos/servicios y compras anteriores. En el modelo B2B, puede basarse en características de la empresa como tamaño, tipo de industria y ubicación.
Por qué necesitas segmentar a tus clientes
Ayuda a identificar a los clientes con mayor potencial.
Permite a los responsables comunicarse con facilidad con un grupo objetivo.
Facilita la elección del mejor canal para llegar al segmento objetivo.
Mejora la calidad del servicio, la fidelidad y la retención.
Mejora la relación con el cliente al comprender mejor las necesidades de cada segmento.
Abre oportunidades de upselling y cross-selling.
Ayuda a diseñar ofertas especiales para clientes objetivo y animarles a comprar más.
Permite a las empresas llevar la delantera frente a la competencia.
Ayuda a identificar nuevos productos que podrían interesar a los clientes.
Tipos de segmentación
Segmentación de clientes con análisis RFM
El análisis RFM (Recency, Frequency, Monetary) es un enfoque basado en el comportamiento que agrupa a los clientes en segmentos. Los agrupa según sus transacciones de compra anteriores: cuán reciente, con qué frecuencia y cuánto ha comprado un cliente. RFM clasifica a los clientes en distintos grupos para poder darles un mejor servicio. Ayuda a los responsables a identificar clientes con potencial para hacer el negocio más rentable. Por ejemplo, puede haber clientes que gastan mucho, pero ¿y si solo han comprado una vez o hace mucho? ¿Compran con frecuencia nuestros productos? Además, ayuda a ejecutar campañas promocionales eficaces y personalizadas.
Recency (R): ¿quién ha comprado recientemente? Número de días desde la última compra (menor recencia).
Frequency (F): ¿quién compra con frecuencia? Es el número total de compras (alta frecuencia).
Monetary value (M): ¿quién gasta más? Es el total de dinero que ha gastado el cliente (alto valor monetario).
Aquí, cada una de las tres variables (Recency, Frequency y Monetary) se divide en cuatro grupos iguales, lo que crea 64 (4x4x4) segmentos de clientes diferentes.
Pasos del análisis RFM (Recency, Frequency, Monetary):
Calcular los valores de Recency, Frequency y Monetary para cada cliente.
Asignar los valores de segmento (bins) a la tabla RFM usando cuartiles.
Concatenar la puntuación RFM del cliente en una sola columna y ordenarla en orden ascendente.
1. Calcula los valores de Recency, Frequency y Monetary para cada cliente.
2. Añade los valores de segmento a la tabla RFM usando cuartiles.
3. Concatena todas las puntuaciones en una sola columna (RFM_Score).
Identifica segmentos de clientes potenciales con RFM en Python
Importar las bibliotecas necesarias
#import modulesimport pandas as pd # for dataframesimport matplotlib.pyplot as plt # for plotting graphsimport seaborn as sns # for plotting graphsimport datetime as dt
Con la tecnología de
Cargar el conjunto de datos
Primero vamos a cargar el dataset de HR necesario con la función read CSV de pandas. Puedes descargar los datos desde este enlace.
A veces el dataset viene desordenado. Puede haber duplicados que distorsionen el análisis. En python, pandas ofrece la función drop_duplicates(), que elimina los registros repetidos o duplicados.
filtered_data=data[['Country','CustomerID']].drop_duplicates()Con la tecnología de
Vamos con algunos insights
#Top ten country's customer
filtered_data.Country.value_counts()[:10].plot(kind='bar')Con la tecnología de
En el dataset proporcionado, se observa que la mayoría de clientes son del "United Kingdom". Por tanto, puedes filtrar los datos para clientes del United Kingdom.
<class'pandas.core.frame.DataFrame'>Int64Index:361878 entries,0 to 541893
Data columns(total 8 columns):
InvoiceNo 361878 non-null object
StockCode 361878 non-null object
Description 361878 non-null object
Quantity 361878 non-null int64
InvoiceDate 361878 non-null datetime64[ns]
UnitPrice 361878 non-null float64
CustomerID 361878 non-null float64
Country 361878 non-null object
dtypes: datetime64[ns](1),float64(2),int64(1),object(4)
memory usage:24.8+MBCon la tecnología de
La función describe() de pandas es muy útil para obtener estadísticas descriptivas. Devuelve el recuento, media, desviación estándar, valores mínimo y máximo, y los cuantiles de los datos.
Aquí se observa que algunos clientes han realizado pedidos con cantidad negativa, lo cual no es posible. Por tanto, filtra Quantity para que sea mayor que cero.
<class'pandas.core.frame.DataFrame'>Int64Index:354345 entries,0 to 541893
Data columns(total 8 columns):
InvoiceNo 354345 non-null object
StockCode 354345 non-null object
Description 354345 non-null object
Quantity 354345 non-null int64
InvoiceDate 354345 non-null datetime64[ns]
UnitPrice 354345 non-null float64
CustomerID 354345 non-null float64
Country 354345 non-null object
dtypes: datetime64[ns](1),float64(2),int64(1),object(4)
memory usage:24.3+MBCon la tecnología de
Filtrar las columnas necesarias
Aquí vas a filtrar las columnas imprescindibles para el análisis RFM. Solo necesitas cinco: CustomerID, InvoiceDate, InvoiceNo, Quantity y UnitPrice. CustomerID identifica de forma única a cada cliente; InvoiceDate te permite calcular la recencia; InvoiceNo te ayuda a contar cuántas transacciones se han realizado (frecuencia). La cantidad comprada en cada transacción y el precio unitario de cada artículo te permiten calcular el importe total comprado.
uk_data=uk_data[['CustomerID','InvoiceDate','InvoiceNo','Quantity','UnitPrice']]Con la tecnología de
uk_data['TotalPrice']= uk_data['Quantity']* uk_data['UnitPrice']Con la tecnología de
Los clientes con menor recencia y mayor frecuencia y valor monetario se consideran los mejores.
qcut() es una función de discretización basada en cuantiles. Divide los datos en bins según los cuantiles de la muestra. Por ejemplo, 1000 valores en 4 cuantiles producirán un objeto categórico que indica a qué cuantil pertenece cada cliente.
rfm['r_quartile']= pd.qcut(rfm['recency'],4,['1','2','3','4'])
rfm['f_quartile']= pd.qcut(rfm['frequency'],4,['4','3','2','1'])
rfm['m_quartile']= pd.qcut(rfm['monetary'],4,['4','3','2','1'])Con la tecnología de
Combina los tres cuartiles (r_quartile, f_quartile, m_quartile) en una sola columna. Este rango te ayudará a segmentar mejor a tus clientes.
rfm['RFM_Score']= rfm.r_quartile.astype(str)+ rfm.f_quartile.astype(str)+ rfm.m_quartile.astype(str)
rfm.head()Con la tecnología de
monetary
frequency
recency
r_quartile
f_quartile
m_quartile
RFM_Score
CustomerID
12346.0
325
77183.60
1
1
1
1
111
12747.0
2
4196.01
103
4
1
4
414
12748.0
0
33719.73
4596
4
1
4
414
12749.0
3
4090.88
199
4
1
4
414
12820.0
3
942.34
59
3
2
4
324
# Filter out Top/Best cusotmers
rfm[rfm['RFM_Score']=='111'].sort_values('monetary', ascending=False).head()Con la tecnología de
monetary
frequency
recency
r_quartile
f_quartile
m_quartile
RFM_Score
CustomerID
16754.0
372
2002.4
2
1
1
1
111
12346.0
325
77183.6
1
1
1
1
111
15749.0
235
44534.3
10
1
1
1
111
16698.0
226
1998.0
5
1
1
1
111
13135.0
196
3096.0
1
1
1
1
111
Conclusión
¡Enhorabuena, has llegado al final de este tutorial!
En este tutorial has visto en detalle la segmentación de clientes: qué es, por qué la necesitas, los tipos de segmentación, el análisis RFM y cómo implementarlo desde cero en python. También repasaste conceptos básicos de pandas como la gestión de duplicados, groupby y qcut() para crear bins basados en cuantiles de muestra.
Esperamos que ahora puedas aplicar el modelado de temas para analizar tus propios datasets. ¡Gracias por leer!
Descubre cómo escribir funciones en Python reutilizables y eficientes. Domina los parámetros, las sentencias return y temas avanzados como las funciones lambda. Organiza mejor tu código con main() y otras buenas prácticas.
Aprende a gestionar hilos y procesos con el módulo de multiprocesamiento de Python. Descubre las técnicas clave de la programación paralela. Mejora la eficacia de tu código con ejemplos.
En el sector retail, las cadenas de hipermercados generan una cantidad de datos enorme. Estos datos se producen a diario en todas las tiendas. Esta base de datos tan extensa de transacciones de clientes debe analizarse para diseñar estrategias rentables.
Cada cliente tiene necesidades distintas. A medida que crece la base de clientes y el volumen de transacciones, no es fácil comprender lo que necesita cada uno. Identificar a los clientes con mayor potencial puede mejorar las campañas de marketing y, en última instancia, aumentar las ventas. La segmentación ayuda a agrupar a los clientes en distintos segmentos para poder abordarlos mejor.
¿Qué es la segmentación de clientes?
La segmentación de clientes es un método para dividir a los clientes en grupos o clústeres en función de características comunes. En el modelo B2C, la investigación de mercado puede segmentar clientes según características demográficas como ocupación, género, edad, ubicación y estado civil; características psicográficas como clase social, estilo de vida y personalidad; y características de comportamiento como gasto, hábitos de consumo, uso de productos/servicios y compras anteriores. En el modelo B2B, puede basarse en características de la empresa como tamaño, tipo de industria y ubicación.
Por qué necesitas segmentar a tus clientes
Tipos de segmentación
Segmentación de clientes con análisis RFM
El análisis RFM (Recency, Frequency, Monetary) es un enfoque basado en el comportamiento que agrupa a los clientes en segmentos. Los agrupa según sus transacciones de compra anteriores: cuán reciente, con qué frecuencia y cuánto ha comprado un cliente. RFM clasifica a los clientes en distintos grupos para poder darles un mejor servicio. Ayuda a los responsables a identificar clientes con potencial para hacer el negocio más rentable. Por ejemplo, puede haber clientes que gastan mucho, pero ¿y si solo han comprado una vez o hace mucho? ¿Compran con frecuencia nuestros productos? Además, ayuda a ejecutar campañas promocionales eficaces y personalizadas.
Aquí, cada una de las tres variables (Recency, Frequency y Monetary) se divide en cuatro grupos iguales, lo que crea 64 (4x4x4) segmentos de clientes diferentes.
Pasos del análisis RFM (Recency, Frequency, Monetary):
1. Calcula los valores de Recency, Frequency y Monetary para cada cliente.
2. Añade los valores de segmento a la tabla RFM usando cuartiles.
3. Concatena todas las puntuaciones en una sola columna (RFM_Score).
Identifica segmentos de clientes potenciales con RFM en Python
Importar las bibliotecas necesarias
Cargar el conjunto de datos
Primero vamos a cargar el dataset de HR necesario con la función read CSV de pandas. Puedes descargar los datos desde este enlace.
Eliminar duplicados
A veces el dataset viene desordenado. Puede haber duplicados que distorsionen el análisis. En python, pandas ofrece la función drop_duplicates(), que elimina los registros repetidos o duplicados.
Vamos con algunos insights
En el dataset proporcionado, se observa que la mayoría de clientes son del "United Kingdom". Por tanto, puedes filtrar los datos para clientes del United Kingdom.
La función describe() de pandas es muy útil para obtener estadísticas descriptivas. Devuelve el recuento, media, desviación estándar, valores mínimo y máximo, y los cuantiles de los datos.
Aquí se observa que algunos clientes han realizado pedidos con cantidad negativa, lo cual no es posible. Por tanto, filtra Quantity para que sea mayor que cero.
Filtrar las columnas necesarias
Aquí vas a filtrar las columnas imprescindibles para el análisis RFM. Solo necesitas cinco: CustomerID, InvoiceDate, InvoiceNo, Quantity y UnitPrice. CustomerID identifica de forma única a cada cliente; InvoiceDate te permite calcular la recencia; InvoiceNo te ayuda a contar cuántas transacciones se han realizado (frecuencia). La cantidad comprada en cada transacción y el precio unitario de cada artículo te permiten calcular el importe total comprado.
Análisis RFM
Aquí vas a realizar las siguientes operaciones:
Cálculo de cuantiles para los valores RFM
Los clientes con menor recencia y mayor frecuencia y valor monetario se consideran los mejores.
qcut() es una función de discretización basada en cuantiles. Divide los datos en bins según los cuantiles de la muestra. Por ejemplo, 1000 valores en 4 cuantiles producirán un objeto categórico que indica a qué cuantil pertenece cada cliente.
Interpretación de resultados RFM
Combina los tres cuartiles (r_quartile, f_quartile, m_quartile) en una sola columna. Este rango te ayudará a segmentar mejor a tus clientes.
Conclusión
¡Enhorabuena, has llegado al final de este tutorial!
En este tutorial has visto en detalle la segmentación de clientes: qué es, por qué la necesitas, los tipos de segmentación, el análisis RFM y cómo implementarlo desde cero en python. También repasaste conceptos básicos de pandas como la gestión de duplicados, groupby y qcut() para crear bins basados en cuantiles de muestra.
Esperamos que ahora puedas aplicar el modelado de temas para analizar tus propios datasets. ¡Gracias por leer!
Si quieres aprender más sobre Python, haz el curso gratuito de DataCamp Intro to Python for Data Science.