• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Simulador FIRE (Financial Independence, Retire Early)
    • Herramientas
      • Formateador / Minificador de JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Tasa de retención de clientes para CLV

junio 6, 2018 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 5 minutos

Compra on-line

El concepto de valor de ciclo de vida de cliente (CLV) se explico en una entrada anterior. Uno de los parámetros necesarios para obtener un valor correcto del CLV es la tasa de retención de los clientes. Este valor nos indica el porcentaje de clientes que continúan activos después de un periodo de tiempo.

Para un análisis básico se puede asumir que el valor de la tasa de retención es el mismo y constante para todos los clientes. Aunque realmente este depende de factores demográficos (edad, ubicación geográfica, profesión, …) y del comportamiento (recencia, frecuencia, …). En esta entrada veremos una forma de estimar este parámetro en base a los datos de comportamiento.

La tasa de retención en el CLV

Existen diferentes expresiones para calcular el CLV. Posiblemente una de las más utilizadas es la que se explico en la entrada que se dedico con anterioridad al concepto:

CLV = \sum_{t=0}^n \frac{b_t}{(1 + r)^t}

donde n son los años que dura la relación, b_t es el beneficio obtenido en al año t y r es la tasa de descuento. El beneficio de un cliente en el año t se puede asumir que es

b_t = p r^t

donde p son los ingresos anuales y r es la tasa de retención del cliente.

Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane
En Analytics Lane
Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane

La tasa de retención de los clientes se puede estimar realizando una regresión frente a los factores de comportamiento. Simplemente se ha de obtener los datos de comportamiento y los clientes que se mantienen activos después de un periodo. Con esto se puede entrenar un modelo logístico que nos indique la probabilidad de mantenerse activo.

La tasa de retención se calculará a partir de los valores de la recencia, frecuencia y valor monetario. Para esto se utilizarán los datos de CDNow que se pueden encontrar en http://www.brucehardie.com/datasets/

Conjunto de datos CDNow

Uno de los conjuntos de datos más utilizados para desarrollar modelos de CLV es el de la tienda de música online CDNow. En este conjunto se recoge el historial de compra de 23.570 clientes que realizaron una primera compra durante el el primer trimestre de 1997. El conjunto de datos contiene un total de 69.659 registros, correspondiente a compras realizadas entre enero de 1997 y finales de junio de 1998. En cada uno de los registros se tienen

  • el id del cliente
  • la fecha de la transacción
  • el número de discos compactos adquiridos
  • el valor monetario en dólares de la transacción.

Los primeros registros se muestran en la siguiente tabla:

IDDateValue
11/1/9711,77
212/1/9712,00
212/1/9777,00
32/1/9720,76
330/3/9720,76

En primer lugar, se ha de importar los datos del archivo. Para ello se utiliza el siguiente comando:

cdnow = pd.read_csv('CDNOW_master.txt', 
                    names=['ID', 'Date', 'CDs', 'Value'],
                    header=None,
                    delim_whitespace=True,
                    dtype={'Date': object})

Una vez importados los datos se ha de convertir la fecha de texto a formato datetime. Esto se consigue con el siguiente comando:

cdnow['Date'] = pd.to_datetime(cdnow['Date'], format='%Y%m%d')

Publicidad


Procesado de los datos

El conjunto de datos se va a dividir en dos, las compras realizadas entre el 1 de enero de 1997 y el 28 de febrero de 1998 se utilizarán para crear un modelo de comportamiento. El resto de los datos, los comprendidos entre el 1 marzo de 1998 y el 30 de abril del 1998, se utilizarán para identificar los clientes que continúan comprando en el siguiente periodo. En el primer subconjunto es necesario obtener la recencia, la frecuencia y el valor monetario promedio de los clientes. Para esto se utiliza el siguiente código:

def processData(cdnow, start, end):
    result = cdnow[(cdnow.Date &gt;= start) &amp; (cdnow.Date <= end)]
    
    frequency = result.groupby(["ID"]).agg(['count', 'sum'])
    frequency.reset_index(inplace=True) 
    frequency.columns = ['ID', 'Frequency', 'Monetary']
    
    frequency['Monetary'] = frequency['Monetary'] / frequency['Frequency']
    
    result = pd.merge(result, frequency, on='ID')
    result = result.drop_duplicates('ID', keep='last')
    
    result['Recency'] = ((end - result['Date']) / np.timedelta64(1, 'M')).astype(int)
    
    result = result.drop('Date', 1)
    result = result.drop('Value', 1)

    return result

En esta función lo primero que se hace es seleccionar los datos entre las fechas indicadas. Posteriormente se agrupan los datos por ID obteniendo el número ocurrencias y el total del valor monetario total. Dado que es necesario obtener el valor monetario promedio, este se ha de dividir por la frecuencia. La recencia se obtiene seleccionado únicamente la última ocurrencia para cada ID y calculando el tiempo, en meses, desde la última compra hasta el final del periodo.

Finalmente, se eliminan los registros que no se van a utilizar, la fecha y el valor monetario original del registro. Los primeros registros de esta tabla son:

IDFrequencyMonetaryRecency
1111,7713
2245,5013
3528,893
4425,122
51135,051

Esta tabla se ha de cruzar con los datos del posteriores para identificar los clientes que vuelve a comprar en los dos meses posteriores al periodo de entrenamiento. Esto se puede hacer con el siguiente código:

result = pd.merge(train, forecast[['ID', 'Frequency']], on='ID', how = 'left')
result = result.rename(columns={'Frequency_x': 'Frequency', 'Frequency_y': 'Buy'})
result['Buy'] = result['Buy'].notnull()

A partir lo de lo queda la siguiente tabla

IDFrequencyMonetaryRecencyBuy
1111,7713False
2245,5013False
3528,893False
4425,122False
51135,051False

Primeros resultados

Con los datos obtenidos hasta ahora se puede hasta ahora se pude hacer un análisis para ver cómo afectan la recencia y la frecuencia a la probabilidad de compra de un cliente. Esto se puede observar en la siguiente gráfica en la que se muestra la probabilidad de compra frente a la recencia y a la frecuencia.

Resultados CLV

En estas gráficas se pueden comprobar lo que seria esperado. Los clientes con mayor recencia, los que han comprado hace poco, tiene mayor probabilidad de retención. Por otro lado, se observa lo contrario para la frecuencia, los que más veces han comprado tiene más posibilidades de continuar.

Modelado

Este conjunto de datos se puede utilizar para entrenar un modelo logístico. A partir del cual se podrá obtener la probabilidad de que un cliente con un perfil dado continúe activo en la tienda. Es decir, se va a obtener la ratio de retención. Esto se puede obtener mediante:

from sklearn.linear_model.logistic import LogisticRegression

model = LogisticRegression().fit(result[['Recency', 'Frequency', 'Monetary']], result['Buy'])

Así para un tipo de cliente se puede obtener tanto la probabilidad de que un cliente realice una compra o no en el siguiente periodo. Para esto se utiliza el método predict_proba.

p_buy = model.predict_proba(df)

Asumiendo que esta ratio se mantiene constante a lo largo del tiempo. Solamente es necesario definir una tasa de descuento y el número de periodos para obtener el CLV promedio de un perfil. A modo de ejemplo, un cliente con recencia igual a 2, frecuencia igual a 1 y valor monetario de 10 su CLV para los próximos 5 periodos será:

clv = 0

monetary = 10
discount = 0.10
period = 5

for period in range(1, period):
    clv += monetary * p_buy[0][1] / (1 + discount) ** period

Con lo que se obtienen un valor de 6,41 $ a valor presente.

Publicidad


Conclusiones

En esta entrada se ha realizado el cálculo CLV de los clientes utilizándose una regresión logística para estimar la tasa de retención. Ello implica que se asuma que esta tasa es constante a lo largo del tiempo. Lo que generalmente esto no es cierto. En una próxima entrada se verá el modelo BG / NBD en el que se tiene en cuenta que la ratio se reduce con el tiempo.

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Nuevo simulador FIRE en el laboratorio de aplicaciones de Analytics Lane
  • Nueva calculadora de préstamos e hipotecas en el laboratorio de aplicaciones de Analytics Lane
  • Hardening avanzado de NGINX: CSP, OCSP Stapling y defensa en profundidad
  • Nuevo generador y verificador de hashes en el laboratorio de aplicaciones de Analytics Lane
  • Nueva simulación de la estrategia Martingala en ruleta en el laboratorio de aplicaciones de Analytics Lane
  • Exactitud, precisión, recall… y los errores que cometemos al interpretarlas en proyectos reales
  • Nuevo simulador del problema de Monty Hall en el laboratorio de aplicaciones de Analytics Lane
  • Nuevo simulador interactivo de K-Means en el laboratorio de aplicaciones de Analytics Lane
  • Por qué los chatbots de inteligencia artificial parecen estar siempre de acuerdo contigo – Conversar con una inteligencia artificial – Parte I

Publicado en: Ciencia de datos Etiquetado como: CLV, Marketing

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Nueva herramienta: Comparador y Formateador de Texto y JSON en el laboratorio de Analytics Lane

abril 21, 2026 Por Daniel Rodríguez

Chatbots vs redes sociales: la diferencia clave entre la inteligencia artificial y los algoritmos de recomendación – Conversar con una inteligencia artificial – Parte II

abril 21, 2026 Por Daniel Rodríguez

Nueva Calculadora de Estadísticos Descriptivos en el laboratorio de aplicaciones de Analytics Lane

abril 20, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Buscar en Excel con dos o más criterios publicado el septiembre 7, 2022 | en Herramientas
  • Gráfica con los datos y las anomalías detectadas con OneClass SVM One-Class SVM: Detección de anomalías con máquinas de vector soporte publicado el marzo 15, 2024 | en Ciencia de datos
  • Método del codo (Elbow method) para seleccionar el número óptimo de clústeres en K-means publicado el junio 9, 2023 | en Ciencia de datos
  • Gráficos de barras en Matplotlib publicado el julio 5, 2022 | en Python
  • La similitud de Jaro–Winkler publicado el junio 24, 2020 | en Ciencia de datos, R

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.9 (11)

Pandas: Cambiar los tipos de datos en los DataFrames

Comentarios recientes

  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto