Dominar la Segmentación de Clientes utilizando Datos de Transacciones de Tarjetas de Crédito

Mastering Customer Segmentation using Credit Card Transaction Data

Usar puntuaciones RFM para construir segmentos de clientes

Imagen de Andrea Piacquadio en Pexels

La segmentación de clientes es el proceso de identificar segmentos de clientes basados en patrones de compra históricos. Por ejemplo, puede implicar identificar clientes repetidos/leales, clientes de alto gasto, clientes que realizan compras únicas o infrecuentes y mucho más. Los segmentos se pueden crear utilizando información como frecuencia de compras, montos de transacciones, fechas de compra y más. Todas estas características se pueden utilizar para generar grupos bien definidos con características fáciles de interpretar.

Las características de estos segmentos pueden proporcionar una gran cantidad de información y valor comercial para las empresas. Por ejemplo, las empresas pueden utilizar estos segmentos para aumentar los ingresos a través de mensajes promocionales dirigidos, campañas de retención de clientes, programas de lealtad, venta cruzada de productos y más. Las empresas pueden dirigirse a segmentos de clientes con mensajes personalizados que sean relevantes para cada segmento. Además, estos segmentos pueden proporcionar información sobre qué canales son más receptivos para los clientes, ya sea correo electrónico, redes sociales o aplicaciones externas. Las empresas también pueden realizar ventas adicionales o ventas cruzadas utilizando segmentos de consumidores. Por ejemplo, pueden ofrecer opciones de alto precio para artículos comprados con frecuencia o productos complementarios a los artículos comprados previamente. Todas estas tácticas se pueden utilizar para aumentar los ingresos y la retención de clientes.

Existen una amplia variedad de técnicas utilizadas para la segmentación de clientes. Una técnica popular para generar segmentos de clientes es mediante puntuaciones de recencia, frecuencia y valor monetario (RFM).

Recencia, Frecuencia y Monetario

  1. Recencia es el número de días entre la última compra realizada por un cliente y una fecha de referencia, generalmente la fecha actual o la fecha máxima disponible en los datos.
  2. Frecuencia es el número de compras entre la fecha de su última compra y la fecha actual o máxima disponible en los datos.
  3. Monetario es el monto total de dinero gastado entre la fecha de su primera y última compra.

Puede utilizar estos valores para construir puntuaciones RFM que se pueden utilizar para segmentar e identificar clientes de alto y bajo valor. Estas puntuaciones se pueden utilizar para una amplia variedad de casos de uso empresariales, como marketing personalizado, análisis de abandono, optimización de precios y más.

Aquí veremos cómo calcular las puntuaciones RFM utilizando un conjunto de datos de transacciones con tarjeta de crédito. Para nuestros propósitos, trabajaremos con los datos sintéticos de transacciones con tarjeta de crédito disponibles en DataFabrica. Los datos contienen montos de transacciones con tarjeta de crédito sintéticas, información de tarjetas de crédito, identificadores de transacciones y más. El nivel gratuito se puede descargar, modificar y compartir de forma gratuita bajo la licencia Apache 2.0.

Para este trabajo, escribiré código en Deepnote, que es un cuaderno colaborativo de ciencia de datos que facilita la ejecución de experimentos reproducibles.

Explorando los Datos

Para empezar, naveguemos hasta Deepnote y creemos un nuevo proyecto (puedes registrarte de forma gratuita si aún no tienes una cuenta).

Instalemos los paquetes necesarios:

Incrustación creada por el autor

E importemos los paquetes que vamos a utilizar:

Incrustación creada por el autor

A continuación, leamos nuestros datos en un marco de datos de pandas y mostremos las primeras cinco filas de datos:

Incrustación creada por el autor

A continuación, filtremos nuestro marco de datos para incluir solo los clientes que compraron en Chick-fil-A:

Incrustación creada por el autor

A continuación, podemos ver el número de clientes por estado. Para hacer esto, debemos mapear el estado del comerciante a las abreviaturas de los estados, lo que nos permitirá graficar el recuento de clientes para cada estado en Plotly:

Incrustación creada por el autor

A continuación, mapeamos las abreviaturas de los estados y definimos nuestra tabla de recuento de estados. Hacemos esto realizando una operación de agrupación nunique() para cada titular de tarjeta para cada estado:

df['merchant_state_abbr'] = df['merchant_state'].map(state_abbreviations)state_counts = df.groupby('merchant_state_abbr')['cardholder_name'].nunique().reset_index()state_counts.columns = ['Estado', 'Recuento_Clientes']

A continuación, podemos utilizar el método chloropleth de Plotly Express para generar un geoplot del recuento de clientes para cada estado:

fig = px.choropleth(state_counts, locations='State', locationmode='USA-states', color='Customer_Count', scope='usa', color_continuous_scale='Blues', title='Número de clientes por estado')fig.show()

La lógica completa es:

Creación de incrustación por el autor

Generando puntuaciones RFM

Ahora definamos la lógica para crear nuestras puntuaciones RFM. Comencemos convirtiendo nuestra transaction_date en un objeto de fecha y hora de pandas y una variable NOW que es la fecha y hora máxima de transaction_date:

df['transaction_date'] = pd.to_datetime(df['transaction_date'])NOW = df['transaction_date'].max()

A continuación, realicemos una operación de agregación de groupby que nos permite calcular recencia, frecuencia y valor monetario.

  1. Recencia: fecha máxima en general menos fecha máxima del cliente: df.groupby('cardholder_name').agg({'transaction_date': lambda x: (NOW — x.max()).days})
  2. Frecuencia: número de ID de transacción para cada cliente: df.groupby('cardholder_name').agg({'transaction_id': lambda x: len(x)})
  3. Valor monetario: suma del monto de transacción para cada cliente: df.groupby('cardholder_name').agg({'transaction_amount': lambda x: x.sum()})

También convertiremos transaction_date, que se transforma en recencia, a un número entero:

rfmTable = df.groupby('cardholder_name').agg({'transaction_date': lambda x: (NOW - x.max()).days, 'transaction_id': lambda x: len(x), 'transaction_amount': lambda x: x.sum()})rfmTable['transaction_date'] = rfmTable['transaction_date'].astype(int)

A continuación, renombremos nuestras columnas adecuadamente.

  1. transaction_date se convierte en recency
  2. transaction_id se convierte en frequency
  3. transaction_amount se convierte en monetary_value
rfmTable.rename(columns={'transaction_date': 'recency', 'transaction_id': 'frequency', 'transaction_amount': 'monetary_value'}, inplace=True)rfmTable = rfmTable.reset_index()

La lógica completa es:

Creación de incrustación por el autor

Podemos observar la distribución en recencia:

Creación de incrustación por el autor

Frecuencia:

Creación de incrustación por el autor

Y valor monetario:

Creación de incrustación por el autor

A continuación, podemos calcular los cuartiles utilizando el método qcut de Pandas para recencia, frecuencia y valor monetario:

rfmTable['r_quartile'] = pd.qcut(rfmTable['recency'], q=4, labels=range(1,5), duplicates='raise')rfmTable['f_quartile'] = pd.qcut(rfmTable['frequency'], q=4, labels=range(1,5), duplicates='drop')rfmTable['m_quartile'] = pd.qcut(rfmTable['monetary_value'], q=4, labels=range(1,5), duplicates='drop')rfm_data = rfmTable.reset_index()

A continuación, podemos visualizar el mapa de calor de recencia/frecuencia, donde cada celda muestra el porcentaje de clientes con los valores correspondientes de recencia y frecuencia. Primero, calculemos los porcentajes:

heatmap_data = rfm_data.groupby(['r_quartile', 'f_quartile']).size().reset_index(name='Percentage')heatmap_data['Percentage'] = heatmap_data['Percentage'] / heatmap_data['Percentage'].sum() * 100

A continuación, generemos nuestra matriz de mapa de calor:

heatmap_matrix = heatmap_data.pivot('r_quartile', 'f_quartile', 'Percentage')

Generemos el mapa y etiquetemos/titulemos nuestro mapa de calor usando Seaborn y Matplotlib:

sns.set()sns.heatmap(heatmap_matrix, annot=True, fmt=".2f", cmap="YlGnBu")plt.title("Segmentación de clientes - Mapa de calor")plt.xlabel("Cuartil de frecuencia")plt.ylabel("Cuartil de recencia")plt.show()

La lógica completa es:

Incrustación creada por el autor

Podemos ver las siguientes ideas de nuestro mapa de calor:

  1. El 16.21% de los clientes compraron recientemente pero de forma infrecuente.
  2. El 3.45% de los clientes son clientes frecuentes y recientes.
  3. El 10% de los clientes compraron con frecuencia pero no durante mucho tiempo.
  4. El 5.86% de nuestros clientes no han comprado recientemente y no compran con frecuencia.

Solo estamos considerando al único comerciante Chick-fil-A, pero te animo a que repitas este análisis para algunos de los otros comerciantes de comida informal y de alta cocina.

A continuación, podemos generar nuestras puntuaciones RFM concatenando los cuartiles en recencia, frecuencia y valor monetario:

Incrustación creada por el autor

Y podemos visualizar la distribución en nuestras puntuaciones RFM:

Incrustación creada por el autor

Aquí vemos que la puntuación RFM más común es ‘411’, que corresponde a un cliente reciente que gasta de forma infrecuente y muy poco.

Generando y visualizando segmentos de clientes usando puntuaciones RFM

A continuación, podemos generar nuestros segmentos de clientes. Este paso es un poco subjetivo, pero definimos nuestros segmentos de la siguiente manera:

  1. Cliente Premium: r, f y m todos ≥ 3
  2. Cliente Frecuente: f ≥ 3 y r o m ≥ 3
  3. Mejor Comprador: m ≥ 3 y f o r ≥ 3
  4. Cliente en Riesgo: dos o más de r, f y m ≤ 2
  5. Cliente Inactivo: dos o más = 1
  6. Otro: cualquier otra cosa

Incrustación creada por el autor

A continuación, podemos ver la distribución en segmentos:

Incrustación creada por el autor

Aquí vemos que el segmento de clientes más grande son los clientes inactivos, seguidos por los de riesgo, los mejores compradores, los clientes frecuentes y los clientes premium.

Y también visualizar la distribución:

Incrustación creada por el autor

También podemos ver el valor monetario promedio para cada segmento de clientes:

Incrustación creada por el autor

Vemos que el valor monetario promedio es más alto para los clientes premium, los clientes frecuentes y los mejores compradores. Además, los clientes inactivos y de riesgo tienen valores monetarios bajos.

El valor de frecuencia promedio para cada segmento de clientes:

Incrustación creada por el autor

Vemos que los clientes premium, los clientes frecuentes y los mejores compradores son los más frecuentes, mientras que los clientes de riesgo y los clientes inactivos tienen una frecuencia baja.

Finalmente, el valor de recencia promedio para cada segmento de clientes:

Incrustación creada por el autor

Vemos que la categoría ‘otro’ tiene las compras más recientes. Esto puede ser un buen segmento para los clientes “nuevos” cuyos patrones de compra son inconclusos.

Utilizando segmentos de clientes para marketing personalizado

Puedes utilizar estos segmentos de clientes para generar mensajes de marketing personalizados relevantes para cada segmento. Por ejemplo, puedes recompensar a los clientes premium con promociones especiales y ofertas de lealtad. También puedes promocionar otros productos en los que puedan estar interesados en comprar según su historial de compras. Para los clientes repetitivos/leales, puedes desarrollar campañas de correo electrónico automatizadas para mantener su lealtad. Los clientes en riesgo suelen estar desvinculados. Podemos desarrollar campañas basadas en estos clientes para volver a captar su atención y lograr que vuelvan a comprar. Se puede desarrollar una campaña similar para los clientes inactivos. Por último, para los mejores compradores, podemos ofrecer promociones especiales y ofertas en productos de alto precio que es probable que vuelvan a comprar.

Utilizando estos datos, podemos llevar nuestro análisis un paso más allá y utilizar los campos de items y prices para crear estas campañas de marketing personalizadas para estos segmentos.

Te animo a que descargues el código de GitHub y repitas este análisis por tu cuenta para otros comerciantes de restaurantes.

Conclusiones

Aquí discutimos cómo realizar la segmentación de clientes en datos sintéticos de transacciones con tarjetas de crédito. Comenzamos realizando una exploración de datos sencilla en la que observamos el número de clientes en cada estado para el comerciante Chick-fil-A. A continuación, calculamos las columnas necesarias para generar las puntuaciones RFM, recencia, frecuencia y valor monetario. Luego mostramos cómo generar cuartiles en recencia, frecuencia y valor monetario para cada cliente, que luego utilizamos para construir las puntuaciones RFM. Luego utilizamos la puntuación RFM para generar segmentos de clientes como “Cliente Premium”, “Cliente Frecuente”, “Mejor Comprador”, “Cliente en Riesgo” y “Cliente Inactivo”. A continuación, generamos algunas visualizaciones que nos permitieron analizar la distribución de los segmentos de clientes en los datos.

Utilizar los puntajes RFM para generar segmentos de clientes con perspicacia es una habilidad invaluable para cualquier científico de datos que desee ofrecer valores empresariales. Construir segmentos interpretables y extraer ideas de estos segmentos puede ayudar a las empresas a diseñar estrategias de campañas de marketing que pueden aumentar los ingresos y la retención de clientes. Comprender el comportamiento de compra de los clientes permite a las empresas adaptar las ofertas promocionales a las bases de clientes adecuadas. ¡Este artículo proporciona los fundamentos necesarios para comenzar!

La versión gratuita de los datos sintéticos de tarjetas de crédito se encuentra aquí . El conjunto de datos completo se puede encontrar aquí .

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Aprendizaje de Diferencia Temporal y la importancia de la exploración Una guía ilustrada

Recientemente, los algoritmos de Aprendizaje por Reforzamiento (RL) han ganado mucha atención al resolver problemas d...

Inteligencia Artificial

Enfoque de IA produce un perro robótico 'inteligente atléticamente

Un equipo internacional de investigadores ha desarrollado un algoritmo basado en visión que permite a los robots cuad...

Inteligencia Artificial

Perro robot establece récord mundial de velocidad

El Instituto Avanzado de Ciencia y Tecnología de Corea ha recibido reconocimiento del Guinness World Records por su i...

Inteligencia Artificial

¡La Bendición de la Dimensionalidad?! (Parte 1)

Creemos que se puede lograr un gran avance en uno o más de estos problemas si un grupo cuidadosamente seleccionado de...

Inteligencia Artificial

Los empleados quieren ChatGPT en el trabajo. Los jefes se preocupan de que revelen secretos.

Algunos líderes corporativos han prohibido el uso de herramientas de inteligencia artificial generativa debido a preo...

Inteligencia Artificial

Microsoft lanza TypeChat una biblioteca de IA que facilita la creación de interfaces de lenguaje natural utilizando tipos.

La biblioteca TypeChat de Microsoft es un intento de facilitar la creación de interfaces de lenguaje natural basadas ...