• 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
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Negocios
      • CLV
      • Scoring
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ 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 test de normalidad interactivo en el laboratorio de Analytics Lane
En Analytics Lane
Nuevo test de normalidad interactivo en el laboratorio 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 test de normalidad interactivo en el laboratorio de Analytics Lane
  • Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
  • Calculadora de Contrastes de Hipótesis: interpreta correctamente el p-valor y toma decisiones estadísticas con confianza
  • Calculadora de Tamaño del Efecto: la herramienta clave para entender cuánto importa realmente una diferencia
  • Simulador de DBSCAN: descubre cómo encontrar clusters reales (y ruido) sin fijar K
  • Conversor de Colores: convierte, compara y valida cualquier color en tiempo real
  • Analytics Lane lanza su Generador de UUIDs: identificadores únicos, seguros y listos para producción en segundos
  • 1200 publicaciones en Analytics Lane
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas

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

De la Regresión Logística al Scorecard: La Transformación Matemática

mayo 19, 2026 Por Daniel Rodríguez

Noticias

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

mayo 18, 2026 Por Daniel Rodríguez

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

mayo 14, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Gráficos de correlación en Seaborn: Mapas de calor y gráficos de pares publicado el julio 27, 2023 | en Python
  • Números calientes en Bonoloto: mismos resultados que el azar publicado el octubre 9, 2020 | en Opinión
  • Segmentar datos numéricos en Pandas con la función cut() publicado el noviembre 6, 2023 | en Python
  • Media, mediana y moda: Descubre cómo interpretar las medidas de tendencia central con ejemplos claros y sin complicaciones publicado el mayo 16, 2025 | en Ciencia de datos
  • Selección del valor óptimo de K en SelecKBest de scikit-learn publicado el febrero 23, 2024 | en Ciencia de datos

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.1 (11)

Aplicar el método D’Hondt en Excel

Comentarios recientes

  • bif en JSON en bases de datos: cuándo es buena idea y cuándo no
  • bif en Cómo desinstalar Oracle Database 19c en Windows
  • 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

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