El economista italiano Vilfredo Pareto afirmaba que el 80% del efecto procede del 20% de las causas: es la regla 80/20 o principio de Pareto. Del mismo modo, el 80% del negocio de muchas empresas proviene del 20% de sus clientes. Las compañías deben identificar a esos clientes clave y cultivar su relación para asegurar ingresos constantes. Para mantener una relación a largo plazo con los clientes, conviene planificar programas de fidelización como descuentos, ofertas, cupones, puntos y regalos.
Captar un cliente nuevo suele ser más caro que retener a uno existente: no necesitas invertir tantos recursos, tiempo ni esfuerzo en adquisición; basta con mantener satisfechos a los que ya tienes. Los analistas de negocio calculan con precisión el coste de adquisición de clientes usando el CLTV (Customer Lifetime Value). El CLTV indica los ingresos totales que aporta un cliente durante toda su relación con la empresa. Ayuda a centrarse en aquellos clientes con mayor potencial de ingresos futuros.
Customer Lifetime Value (CLTV)
«Customer Lifetime Value es un valor monetario que representa la cantidad de ingresos o beneficio que un cliente aportará a la empresa durante el tiempo que dure la relación». El CLTV muestra las implicaciones de captar clientes a largo plazo frente a clientes a corto plazo. El customer lifetime value (CLV) te ayuda a responder las preguntas de ventas más importantes para cualquier empresa:
¿Cómo identificar a los clientes más rentables?
¿Cómo puede una empresa ofrecer el mejor producto y maximizar los ingresos?
¿Cómo segmentar a los clientes rentables?
¿Qué presupuesto hay que invertir para captar clientes?
Calcular el customer lifetime value
Existen muchos enfoques para calcular el CLTV. Cada cual tiene su punto de vista. Para calcularlo necesitamos datos históricos de clientes, por lo que no se puede estimar directamente para clientes nuevos. Para resolverlo, los analistas de negocio desarrollan modelos de machine learning que predicen el CLTV de nuevos clientes. Veamos algunos enfoques para calcular el CLTV:
1) Puedes calcularlo sumando el beneficio/ingresos del cliente en un período dado. Por ejemplo, si el cliente lleva contigo 3 años, suma todo el beneficio de esos 3 años. Puedes promediar por año, semestre o mes, pero con este enfoque no podrás construir un modelo predictivo para clientes nuevos.
2) Construye un modelo de regresión para clientes existentes. Usa los últimos seis meses como variables independientes y los ingresos totales de tres años como variable dependiente, y entrena un modelo de regresión con estos datos.
3) El CLTV también puede implementarse usando valores RFM (recencia, frecuencia y valor monetario). Para más detalles, puedes consultar mi tutorial.
4) Usando la siguiente ecuación: CLTV = ((valor medio de pedido × frecuencia de compra)/tasa de abandono) × margen de beneficio.
Average Order Value (AOV): el valor medio de pedido es el cociente entre los ingresos totales y el número total de pedidos. Representa la cantidad media que gasta un cliente en un pedido.
Average Order Value = Total Revenue / Total Number of Orders
Con la tecnología de
Purchase Frequency (PF): la frecuencia de compra es el cociente entre el número total de pedidos y el número total de clientes. Indica el promedio de pedidos por cliente.
Purchase Frequency = Total Number of Orders / Total Number of Customers
Con la tecnología de
Churn rate: la tasa de abandono es el porcentaje de clientes que no vuelven a realizar un pedido.
Customer lifetime: es el período durante el cual el cliente ha estado realizando pedidos de forma continuada.
Repeat rate: se define como el cociente entre el número de clientes con más de un pedido y el número de clientes únicos. Ejemplo: si tienes 10 clientes en un mes y 4 repiten, tu repeat rate es del 40%.
Implementación de CLTV en Python (usando la fórmula)
Importar las librerías necesarias
#import modulesimport pandas as pd # for dataframesimport matplotlib.pyplot as plt # for plotting graphsimport seaborn as sns # for plotting graphsimport datetime as dt
import numpy as np
Con la tecnología de
Cargar el dataset
Primero cargamos el dataset Online Retail usando la función de pandas para leer CSV/Excel. Puedes descargar los datos desde aquí.
A veces el dataset llega con ruido. Puede haber duplicados que sesguen tu análisis. En Python, pandas ofrece la función drop_duplicates(), que elimina los registros repetidos.
filtered_data=data[['Country','CustomerID']].drop_duplicates()Con la tecnología de
Vamos con los insights
#Top ten country's customer
filtered_data.Country.value_counts()[:10].plot(kind='bar')Con la tecnología de
<class'pandas.core.frame.DataFrame'>Int64Index:495478 entries,0 to 541893
Data columns(total 8 columns):
InvoiceNo 495478 non-null object
StockCode 495478 non-null object
Description 494024 non-null object
Quantity 495478 non-null int64
InvoiceDate 495478 non-null datetime64[ns]
UnitPrice 495478 non-null float64
CustomerID 361878 non-null float64
Country 495478 non-null object
dtypes: datetime64[ns](1),float64(2),int64(1),object(4)
memory usage:34.0+MBCon la tecnología de
La función describe() de pandas es muy útil para obtener estadísticas de resumen: devuelve el recuento, la media, la desviación estándar, los valores mínimo y máximo y los cuartiles.
# Change the name of columns
uk_data_group.columns=['num_days','num_transactions','num_units','spent_money']
uk_data_group.head()Con la tecnología de
num_days
num_transactions
num_units
spent_money
CustomerID
12346.0
0
1
74215
77183.60
12747.0
366
103
1275
4196.01
12748.0
372
4596
25748
33719.73
12749.0
209
199
1471
4090.88
12820.0
323
59
722
942.34
Calcular el CLTV con la siguiente fórmula:
CLTV=((Average Order Value x Purchase Frequency)/Churn Rate) x Profit margin.
Customer Value = Average Order Value * Purchase Frequency
Con la tecnología de
1. Calcular el valor medio de pedido
# Average Order Value
uk_data_group['avg_order_value']=uk_data_group['spent_money']/uk_data_group['num_transactions']Con la tecnología de
El margen de beneficio es un ratio de rentabilidad muy usado. Representa qué porcentaje de las ventas totales se convierte en ganancia. Supongamos que nuestro negocio tiene aproximadamente un 5% de margen sobre la venta total.
# Profit Margin
uk_data_group['profit_margin']=uk_data_group['spent_money']*0.05Con la tecnología de
La tabla dinámica (pivot table) agrupa columnas en una tabla bidimensional para ofrecer un resumen multidimensional de los datos.
sale=uk_data.pivot_table(index=['CustomerID'],columns=['month_yr'],values='TotalPurchase',aggfunc='sum',fill_value=0).reset_index()Con la tecnología de
Debes dividir las columnas en variable dependiente (o objetivo) e independientes (o de entrada). Selecciona los últimos 6 meses como variables independientes.
X=sale[['Dec-2011','Nov-2011','Oct-2011','Sep-2011','Aug-2011','Jul-2011']]
y=sale[['CLV']]Con la tecnología de
Dividir los datos
Para evaluar el rendimiento del modelo, es buena práctica dividir el dataset en entrenamiento y prueba.
Separamos el dataset con train_test_split(). Hay que pasar 3 parámetros: features, target y el tamaño del conjunto de prueba. Además, puedes usar random_state como semilla para garantizar reproducibilidad. Si random_state es None, el generador usa np.random y la partición variará en cada ejecución.
#split training set and test setfrom sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,random_state=0)Con la tecnología de
Desarrollo del modelo
Importa el módulo de regresión lineal y crea el objeto. Ajusta el modelo al conjunto de entrenamiento con fit() y realiza predicciones en test con predict().
# import modelfrom sklearn.linear_model import LinearRegression
# instantiate
linreg = LinearRegression()# fit the model to the training data (learn the coefficients)
linreg.fit(X_train, y_train)# make predictions on the testing set
y_pred = linreg.predict(X_test)Con la tecnología de
# print the intercept and coefficientsprint(linreg.intercept_)print(linreg.coef_)Con la tecnología de
[208.50969617][[0.998805510.803812541.602268291.674332281.528608132.87959449]]Con la tecnología de
¿Qué tal se ajusta el modelo a los datos?
Para evaluar el ajuste global del modelo lineal usamos el R-cuadrado. Es la proporción de varianza explicada por el modelo y toma valores entre 0 y 1. Cuanto más alto, mejor, porque indica que el modelo explica mayor varianza.
from sklearn import metrics
# compute the R Square for modelprint("R-Square:",metrics.r2_score(y_test, y_pred))Con la tecnología de
Este modelo tiene un R-cuadrado alto (0,96), por lo que ajusta bien a los datos.
Evaluación del modelo
Para problemas de regresión se usan las siguientes métricas (Ritchie Ng):
MAE (error absoluto medio): media del valor absoluto de los errores.
MSE (error cuadrático medio): media de los errores al cuadrado.
RMSE (raíz del error cuadrático medio): raíz cuadrada del MSE.
# calculate MAE using scikit-learnprint("MAE:",metrics.mean_absolute_error(y_test,y_pred))#calculate mean squared errorprint("MSE",metrics.mean_squared_error(y_test, y_pred))# compute the RMSE of our predictionsprint("RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred)))Con la tecnología de
MAE:595.0282284701234MSE2114139.8898678957RMSE:1454.0082151995896Con la tecnología de
El RMSE es más popular que MSE y MAE porque se interpreta en las mismas unidades que y.
Ventajas y limitaciones del CLTV
El CLTV te ayuda a diseñar un plan de negocio eficaz y a escalar tu actividad. Permite crear segmentos de clientes con sentido, que a su vez ayudan a identificar las necesidades de cada segmento.
El customer lifetime value es una herramienta, no una estrategia. El CLTV identifica a los clientes más rentables, pero cómo rentabilizarlos depende de tu estrategia. A menudo los modelos de CLTV se confunden o se usan mal. La obsesión por el CLTV puede generar puntos ciegos: las empresas se enfocan solo en el mejor segmento y en repetir negocio con él, pero también es importante atender al resto de clientes.
Conclusión
¡Enhorabuena, has llegado al final del tutorial!
En este recorrido has visto en detalle qué es el customer lifetime value, distintos enfoques para calcular el CLTV, su implementación desde cero en Python, un modelo de predicción y sus pros y contras. También repasaste conceptos básicos de pandas como groupby y pivot table para resumir columnas y filas seleccionadas.
Ojalá ahora puedas aplicar el concepto de CLTV 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 sobre la regresión logística, sus propiedades básicas, y construye un modelo de machine learning sobre una aplicación del mundo real en Python.
El economista italiano Vilfredo Pareto afirmaba que el 80% del efecto procede del 20% de las causas: es la regla 80/20 o principio de Pareto. Del mismo modo, el 80% del negocio de muchas empresas proviene del 20% de sus clientes. Las compañías deben identificar a esos clientes clave y cultivar su relación para asegurar ingresos constantes. Para mantener una relación a largo plazo con los clientes, conviene planificar programas de fidelización como descuentos, ofertas, cupones, puntos y regalos.
Captar un cliente nuevo suele ser más caro que retener a uno existente: no necesitas invertir tantos recursos, tiempo ni esfuerzo en adquisición; basta con mantener satisfechos a los que ya tienes. Los analistas de negocio calculan con precisión el coste de adquisición de clientes usando el CLTV (Customer Lifetime Value). El CLTV indica los ingresos totales que aporta un cliente durante toda su relación con la empresa. Ayuda a centrarse en aquellos clientes con mayor potencial de ingresos futuros.
Customer Lifetime Value (CLTV)
«Customer Lifetime Value es un valor monetario que representa la cantidad de ingresos o beneficio que un cliente aportará a la empresa durante el tiempo que dure la relación». El CLTV muestra las implicaciones de captar clientes a largo plazo frente a clientes a corto plazo. El customer lifetime value (CLV) te ayuda a responder las preguntas de ventas más importantes para cualquier empresa:
Calcular el customer lifetime value
Existen muchos enfoques para calcular el CLTV. Cada cual tiene su punto de vista. Para calcularlo necesitamos datos históricos de clientes, por lo que no se puede estimar directamente para clientes nuevos. Para resolverlo, los analistas de negocio desarrollan modelos de machine learning que predicen el CLTV de nuevos clientes. Veamos algunos enfoques para calcular el CLTV:
1) Puedes calcularlo sumando el beneficio/ingresos del cliente en un período dado. Por ejemplo, si el cliente lleva contigo 3 años, suma todo el beneficio de esos 3 años. Puedes promediar por año, semestre o mes, pero con este enfoque no podrás construir un modelo predictivo para clientes nuevos.
2) Construye un modelo de regresión para clientes existentes. Usa los últimos seis meses como variables independientes y los ingresos totales de tres años como variable dependiente, y entrena un modelo de regresión con estos datos.
3) El CLTV también puede implementarse usando valores RFM (recencia, frecuencia y valor monetario). Para más detalles, puedes consultar mi tutorial.
4) Usando la siguiente ecuación: CLTV = ((valor medio de pedido × frecuencia de compra)/tasa de abandono) × margen de beneficio.
Average Order Value (AOV): el valor medio de pedido es el cociente entre los ingresos totales y el número total de pedidos. Representa la cantidad media que gasta un cliente en un pedido.
Purchase Frequency (PF): la frecuencia de compra es el cociente entre el número total de pedidos y el número total de clientes. Indica el promedio de pedidos por cliente.
Churn rate: la tasa de abandono es el porcentaje de clientes que no vuelven a realizar un pedido.
Customer lifetime: es el período durante el cual el cliente ha estado realizando pedidos de forma continuada.
Repeat rate: se define como el cociente entre el número de clientes con más de un pedido y el número de clientes únicos. Ejemplo: si tienes 10 clientes en un mes y 4 repiten, tu repeat rate es del 40%.
Implementación de CLTV en Python (usando la fórmula)
Importar las librerías necesarias
Cargar el dataset
Primero cargamos el dataset Online Retail usando la función de pandas para leer CSV/Excel. Puedes descargar los datos desde aquí.
Eliminar duplicados
A veces el dataset llega con ruido. Puede haber duplicados que sesguen tu análisis. En Python, pandas ofrece la función drop_duplicates(), que elimina los registros repetidos.
Vamos con los insights
En el dataset, la mayoría de clientes son del «United Kingdom». Así que puedes filtrar los datos para clientes del Reino Unido.
La función describe() de pandas es muy útil para obtener estadísticas de resumen: devuelve el recuento, la media, la desviación estándar, los valores mínimo y máximo y los cuartiles.
Aquí se observa que algunos clientes han pedido cantidades negativas, lo cual no es posible. Por tanto, filtra Quantity mayor que cero.
Filtrar las columnas necesarias
Aquí filtramos las columnas imprescindibles para calcular el CLTV. Solo necesitas cinco: CustomerID, InvoiceDate, InvoiceNo, Quantity y UnitPrice.
Ahora vamos a realizar estas operaciones:
Renombrar columnas
Calcular el CLTV con la siguiente fórmula:
1. Calcular el valor medio de pedido
2. Calcular la frecuencia de compra
3. Calcular el repeat rate y la tasa de abandono
4. Calcular el margen de beneficio
El margen de beneficio es un ratio de rentabilidad muy usado. Representa qué porcentaje de las ventas totales se convierte en ganancia. Supongamos que nuestro negocio tiene aproximadamente un 5% de margen sobre la venta total.
5. Calcular el customer lifetime value
Modelo predictivo de CLTV
Vamos a construir un modelo de predicción de CLTV.
Aquí vas a predecir el CLTV con un modelo de regresión lineal.
Primero, usa los datos cargados y filtrados arriba.
Extrae mes y año de InvoiceDate.
La tabla dinámica (pivot table) agrupa columnas en una tabla bidimensional para ofrecer un resumen multidimensional de los datos.
Sumemos las ventas de todos los meses.
Selección de variables
Debes dividir las columnas en variable dependiente (o objetivo) e independientes (o de entrada). Selecciona los últimos 6 meses como variables independientes.
Dividir los datos
Para evaluar el rendimiento del modelo, es buena práctica dividir el dataset en entrenamiento y prueba.
Separamos el dataset con train_test_split(). Hay que pasar 3 parámetros: features, target y el tamaño del conjunto de prueba. Además, puedes usar random_state como semilla para garantizar reproducibilidad. Si random_state es None, el generador usa np.random y la partición variará en cada ejecución.
Desarrollo del modelo
Importa el módulo de regresión lineal y crea el objeto. Ajusta el modelo al conjunto de entrenamiento con fit() y realiza predicciones en test con predict().
¿Qué tal se ajusta el modelo a los datos?
Para evaluar el ajuste global del modelo lineal usamos el R-cuadrado. Es la proporción de varianza explicada por el modelo y toma valores entre 0 y 1. Cuanto más alto, mejor, porque indica que el modelo explica mayor varianza.
Este modelo tiene un R-cuadrado alto (0,96), por lo que ajusta bien a los datos.
Evaluación del modelo
Para problemas de regresión se usan las siguientes métricas (Ritchie Ng):
El RMSE es más popular que MSE y MAE porque se interpreta en las mismas unidades que y.
Ventajas y limitaciones del CLTV
El CLTV te ayuda a diseñar un plan de negocio eficaz y a escalar tu actividad. Permite crear segmentos de clientes con sentido, que a su vez ayudan a identificar las necesidades de cada segmento.
El customer lifetime value es una herramienta, no una estrategia. El CLTV identifica a los clientes más rentables, pero cómo rentabilizarlos depende de tu estrategia. A menudo los modelos de CLTV se confunden o se usan mal. La obsesión por el CLTV puede generar puntos ciegos: las empresas se enfocan solo en el mejor segmento y en repetir negocio con él, pero también es importante atender al resto de clientes.
Conclusión
¡Enhorabuena, has llegado al final del tutorial!
En este recorrido has visto en detalle qué es el customer lifetime value, distintos enfoques para calcular el CLTV, su implementación desde cero en Python, un modelo de predicción y sus pros y contras. También repasaste conceptos básicos de pandas como groupby y pivot table para resumir columnas y filas seleccionadas.
Ojalá ahora puedas aplicar el concepto de CLTV para analizar tus propios datasets. ¡Gracias por leer!
Si quieres seguir aprendiendo a analizar datos de clientes en Python, haz el curso de DataCamp Customer Analytics & A/B Testing in Python.