Este documento discute el cálculo del valor de vida del cliente (CLV) y presenta un modelo alternativo al modelo de Pareto para estimar el CLV. Explica que el CLV es el valor presente de los flujos de efectivo futuros de un cliente y depende de factores como la frecuencia de compra, la tasa de abandono y la tasa de descuento. Luego, introduce un modelo basado en la distribución de Poisson y Gamma para predecir las compras futuras basadas en el historial de compras de un cliente. Finalmente, muestra ejemplos de cómo aplicar
6. Son preguntas complejas.
Llevan encima de la mesa mucho tiempo.
Hay mucha documentación académica y empresarial escrita al respecto.
Vivimos un nuevo paradigma que nos permitirá dar mejores respuestas.
8. El CLV es un principio de marketing que estudia el valor del cliente en el tiempo.
Es el valor presente de los cash flows (flujos de caja) futuros con el cliente.
Es una visión a largo plazo de la relación con el cliente en la empresa.
Es el beneficio neto basado en una predicción. No hay que confundirlo con la
rentabilidad del cliente, basado en el beneficio histórico.
10. CLV es una predicción, es un valor esperado, no es un concepto
cuantificable (“real”) en el presente.
Es individual. No todos los clientes tienen el mismo CLV.
Es dinámico. El CLV evoluciona a lo largo del tiempo.
12. 𝐶𝐿𝑉 = σ 𝑡=0
𝑇 𝑝 𝑡−𝑐 𝑡 𝑟𝑡
1+𝑖 𝑡 − 𝐴𝐶 (1a)
Donde
𝑝𝑡 = precio que paga el cliente en un momento determinado del tiempo t
𝑐𝑡 = coste directo de dar servicio al cliente en un tiempo t
𝑖 = tasa de descuento de coste del capital para la empresa
𝑟𝑡 = probabilidad de que el cliente vuelva a comprar o de que esté “vivo” en un tiempo t.
𝐴𝐶 = coste de adquisición
𝑇 = horizonte temporal para estimar el CLV
16. 𝐸(𝐶𝐿𝑉) = 0
∞
𝐸 𝑣 𝑡 𝑆 𝑡 𝑑 𝑡 𝑑𝑡
Donde
E[v(t)] = valor esperado (de los cash flows netos) del cliente en un tiempo t (si está activo).
S(t) = probabilidad de que el cliente permanezca activo en un tiempo t.
d(t) = factor de descuento que refleja el valor `presente de una cantidad recibida en un tiempo t.
18. Se calcularán 𝐸 𝑣 𝑡 , 𝑆 𝑡 y 𝑑 𝑡 en un contexto concreto de negocio, y a partir de
ahí, se solucionará la integral.
Es importante distinguir entre clientes potenciales, clientes nuevos y clientes
antiguos. Cuyo cálculo del CLV tendrá algunos matices.
1. Clientes nuevos:
𝐸(𝐶𝐿𝑉) = න
0
∞
𝐸 𝑣 𝑡 𝑆 𝑡 𝑑 𝑡 𝑑𝑡
2. Clientes antiguos:
𝐸(𝐶𝐿𝑉) = න
𝑇
∞
𝐸 𝑣 𝑡 𝑆 𝑡|𝑡 > 𝑇 𝑑 𝑡 − 𝑇 𝑑𝑡
20. Relación no contractual con los clientes. Ésto
implica que el tiempo en el que el cliente abandona (pasa de
activo a inactivo) es indefinido (unobserved).
Transacciones (compras) continuas.
22. Dado un histórico de transacciones, se harán
predicciones de compra para el próximo periodo.
Los clientes se analizarán individual y conjuntamente.
25. Mientras está activo, el número de transacciones realizadas por un cliente
en un periodo de tiempo t, se distribuye como una Poisson (arriba), con
tasa de transacción 𝛌.
La heterogeneidad en la tasa de transacción de los clientes, 𝛌, sigue una
distribución Gamma (𝑟, 𝛼).
27. Después de una transacción cualquiera, un cliente se convierte en inactivo
con probabilidad 𝒑. Por lo tanto, el punto en el que un cliente abandona se
distribuye a lo largo de varias transacciones de acuerdo a una distribución
geométrica pmf* (arriba).
La heterogeneidad en la tasa de abandono, sigue una distribución Beta
(a,b).
• PMF = Probability Mass Function
31. Se trasladará todo el desarrollo del modelo matemático (BG/NBD)
de Peter S. Fader, como una alternativa al modelo de Pareto/NBD
a un notebook de Python a través de la librería Lifetimes 0.2.0.0.
desarrollado por Cam Davidson-Pilon, con licencia del MIT,
Copyright del 2015.
33. En nuestro estudio, exploraremos el rendimiento del
modelo BG/NBD usando datos de las compras de los
CDs en la tienda online CDNOW.
Calibraremos el modelo usando los datos de las
transacciones repetidas para la muestra de 2357 clientes
sobre la primera mitad del periodo de 78 semanas y las
compras predichas de las siguientes 39.
34.
35.
36. En nuestro notebook de Python, se analizarán la actividad o
inactividad del consumidor final, basándonos en un tiempo
finito: al cabo de un tiempo concreto la relación con el cliente
"morirá". El objetivo será tratar de predecir la frecuencia con la
que un potencial cliente visitará nuestra web. Estudiando el
histórico de compras, trataremos de predecir la repetición de
una compra, el abandono de una aplicación, y calcular el CLTV.
37. Tabla 1: Muestra del dataset cdnow_customers
ID Frequency Recency T
1 2 30.43 38.86
2 1 1.71 38.86
3 0 0.00 38.86
4 0 0.00 38.86
5 0 0.00 38.86
En la Tabla 1 observamos una pequeña muestra del dataset cdnow_customers, tenemos:
La frecuencia de compra de los clientes (calculado como el total menos 1).
T el tiempo que lleva el cliente en la empresa, en una unidad de tiempo cualquiera (una
semana, en nuestro caso). Es igual al tiempo transcurrido entre la primera y la última
compra total.
Recency es el momento de la última compra. Es la diferencia entre la primera y la última
compra individual. Nótese que 1 compra tiene una recency de 0. Lo notaremos como 𝑡 𝑥.
39. Figura 1: Matriz de Frecuencias
La Matriz de Frecuencias, calcula el número
de transacciones esperadas de un cliente en
el próximo período, dado su Recency (edad
de la última compra) y Frecuency (número
de compras repetidas).
Observamos que, si un cliente ha realizado más de 25
compras, y su última compra fue cuando llevaba 35
semanas con nosotros, entonces es uno de nuestros
mejores clientes (abajo a la derecha del gráfico). Por lo
tanto, tiene muchas probabilidades de repetir su consumo
inminentemente (color rojo).
Por el contrario, se considera que nuestros clientes menos
activos son aquellos que hicieron muchas compras
repetidas y desaparecen durante semanas. Como
observamos en la esquina superior derecha en color azul
oscuro.
40. Figura 2: Matriz de frecuencias probabilidad-actividad
Otra matriz interesante es la que tenemos
en la figura 2. En ella estudiamos la
probabilidad de que un cliente permanezca
activo en base a su histórico de compras del
que obtenemos su frecuency y recency
comentados.
Observamos, por ejemplo, como el color
rojo indica la alta probabilidad de actividad
de un cliente ya que han comprado con
frecuencia en el pasado y por otra parte ha
transcurrido tiempo desde que no nos
visitan. Sin embargo, se espera su vuelta.
42. Tabla 2: Ranking de clientes en base a sus compras esperadas.
ID Frequency Recency T
Predicted_Purchases
(Probabilidad)
509 18 35.14 35.86 0.424877
841 19 34.00 34.14 0.474738
1981 17 28.43 28.86 0.486526
157 29 37.71 38.00 0.662396
1516 26 30.96 31.00 0.710623
A continuación haremos una pequeña predicción en base a un histórico de compras y
construiremos con ello un ranking de clientes ordenados de menor a mayor número de
transacciones esperadas para el próximo período. Nótese que coincide con un creciente
frecuency.
Observamos por ejemplo como los clientes que han hecho 26 compras, y nos han
comprado recientemente, probablemente lo vuelvan a hacer en el próximo período.
44. Figura 3: Histograma para evaluar el ajuste del modelo
Hasta el momento hemos predicho y
visualizado el comportamiento de nuestros
clientes, pero ahora vamos a evaluar si
nuestro modelo es bueno o no. Lo primero
que haremos será comparar nuestros datos
con datos artificiales con los parámetros
ajustados del modelo.
Se refleja claramente como los datos reales
y simulados se alinean bien. Esto prueba
que el modelo funciona correctamente
para todos los tipos de cliente que
realizaron transacciones con diversas
frecuencias.
46. Tabla 3: Datos transaccionales
Date ID
0 2014-03-08 00:00:00 0
1 2014-05-21 00:00:00 1
2 2014-03-14 00:00:00 2
3 2014-04-09 00:00:00 2
4 2014-05-21 00:00:00 2
La mayoría de las veces los datos que manejamos son transaccionales como vemos en la
tabla 3, que desplegamos desde aquí. Incorporamos el tiempo, aunque justo en éste caso no
nos da mucha información. Lo significativo es la transformación.
Utilizaremos algunas funciones interesantes para transformar esos datos transaccionales
(una fila por compra) en datos agregados (un dataset que combine frecuency, antigüedad del
cliente y recency).
48. Tabla 4: Nuevos datos agregados transformados
ID Frequency Recency T
0 0 0 298
1 0 0 224
2 6 142 292
3 0 0 147
4 2 9 183
Con lo anterior, obtenemos un nuevo dataset de datos agregados.
50. Predicciones del cliente individual
Basándonos en el histórico de compras del cliente, haremos una predicción las futuras
compras.
En el ejemplo, la probabilidad de que un individuo vuelva a repetir la compra en base a
los nuestros parámetros comentados (t, frecuency, recency y T) es de 0.05765.
t = 10 #Predicción de compras para los próximos 10 periodos
individual = summary.iloc[20]
# La función de abajo es un alias de `bfg.conditional_expected_number_of_purchases_up_to_time`
bgf.predict(t, individual['frequency'], individual['recency'], individual['T'])
0.057651166220182973
51. Figura 5:
Probabilidad de actividad de un cliente frente a sus compras efectivas.
Dado un histórico de compras del
cliente, podemos calcular su
probabilidad de estar activo, de
acuerdo al modelo que acabamos de
entrenar. A continuación, el ejemplo.
En la figura 5 podemos observar el
histórico de actividad que refleja las
compras de un cliente individual (id =
35) que lleva 200 días realizando
compras en nuestra web a la vez que
visualizamos su probabilidad estimada
de estar activo.
53. Segundo ajuste del modelo
A continuación, vamos a evaluar el rendimiento de nuestro modelo ya parametrizado.
Normalmente, la observación del sobreajuste, es decir, la falta de generalización, pasa
lógicamente por utilizar una muestra para la modelización/entrenamiento (también
llamado training o calibration en nuestro caso), distinta a la utilizada para la
evaluación/prueba (test o holdout). El ratio de acierto (o la medida que se utilice para la
evaluación) obtenida en la muestra de training o calibration (acierto aparente) se
comparará con la obtenida en la muestra de test o holdout.
Con nuestros datos transaccionales, podemos particionar el dataset en un calibration
period dataset y un dataset de validación o test (houldout dataset). Esto es importante
porque queremos comprobar el funcionamiento de nuestro modelo con datos no vistos
hasta el momento (cross-validation). A continuación utilizamos una función para
particionar el dataset hasta las dos fechas determinadas del 2014 que vemos a
continuación.
54. Tabla 5:
Dataset dividido en calibration period dataset y houldout dataset.
ID Frequency_Cal Recency_Cal T_Cal Frequency_Holdout Duration_Holdout
0 0 0 177 0 121
1 0 0 103 0 121
2 6 142 171 0 121
3 0 0 26 0 121
4 2 9 62 0 121
A partir de aquí, vemos como particiona el dataset en dos subconjuntos con sus
respectivas recency y frecuency para nuestras pruebas. Es sólo la cabecera, pero nos sirve
para visualizar lo que hacemos. En general, se tratará de general muestras de training y
test lo suficientemente amplias como para garantizar que la evaluación en ambas es
confiable.
57. Figura 4:
Evaluación de la capacidad predictiva de nuestro modelo.
Salvando las limitaciones y el riesgo
que supone la utilización de una única
muestra de entrenamiento y otra de
validación, comprobamos que nuestro
modelo predice bastante bien frente a
nuestros datos de prueba.
En la figura 4, estamos comparando las
compras reales del conjunto de test
con sus compras predichas, y
evaluando si se ajustan bien. Parece
que, para compras elevadas, difieren
más (de la quinta a la sexta compra), el
modelo pierde capacidad predictiva.
59. Customer_id Frequency Recency T Monetary_value
1 2 30.43 38.86 22.35
2 1 1.71 38.86 11.77
6 7 29.43 38.86 73.74
7 1 5.00 38.86 11.77
9 2 35.71 38.86 25.55
Tabla 6: Nuevo dataset transformado
Hasta este momento no hemos tenido en cuenta el valor económico de cada compra y
nos hemos enfocado principalmente en la existencia de estas transacciones. Para
estimar esto podemos usar el sub-modelo Gamma-Gamma. Pero primero necesitamos
crear datos agregados de datos transaccionales que también contengan valores
económicos de estas transacciones (por ejemplo, beneficios o ingresos). En la tabla 6
apreciamos mejor esa transformación.
62. El sub modelo Gamma-Gamma y el supuesto de independencia
El modelo que vamos a usar para estimar para el CLV para nuestra base de
datos de clientes se llama sub-modelo Gamma-Gamma, que es necesario para
incluir los valores monetarios que expondremos a continuación. El submodelo
Gamma-Gamma supone que no hay relación entre el valor monetario y la
frecuencia de compra. En la práctica, vamos a comprobar primero si el
coeficiente de correlación de Pearson entre los dos vectores se aproxima a
cero para poder usar éste modelo.
63. Monetary_value Frequency
Monetary_value 1.000000 0.113884
Frequency 0.113884 1.000000
Tabla 7:
Coeficiente de correlación entre el valor monetario y la frecuencia de compra.
Confirmamos que no hay relación entre el precio de los bienes de nuestro dataset y
su frecuencia de compra. Parece que el precio determina poco la compra.
Obviamente esto sería muy característico del tipo de bien que estudiamos. Para éste
caso concreto, la correlación es muy baja.
A partir de aquí, entrenaremos nuestro submodelo Gamma-Gamma y trataremos de
predecir el valor esperado medio de nuestros clientes.
68. De los 2357 individuos en nuestro dataset, 946 hicieron como mínimo una compra, y
es con los que hemos trabajado para concluir que por el método de máxima
verosimilitud, los valores de los tres parámetros de nuestro modelo (p, q, 𝛾) son (6.25,
3.74, 15.45) respectivamente. Una vez que tenemos nuestro modelo Gamma-Gamma
parametrizado, procedemos a calcular el CLV que debe de exponerse en unidades
monetarias.
from lifetimes import GammaGammaFitter
ggf = GammaGammaFitter(penalizer_coef = 0)
ggf.fit(returning_customers_summary['frequency'],
returning_customers_summary['monetary_value'])
print ggf
<lifetimes.GammaGammaFitter: fitted with 946 subjects, p: 6.25, q: 3.74, v: 15.45>
69. Customer_ID CLV
1 24.658617
2 18.911481
3 35.171002
4 35.171002
5 35.171002
Tabla 8: CLV esperado por cliente
(Modelo BD/NBD)
Finalmente en la tabla 8 obtenemos el CLV esperado
por cada cliente para la empresa de nuestro dataset.
70. Ahora ya podemos mostrar el resultado del valor medio del CLV de nuestros clientes
(averange Customer Lifetime Value) como sigue.
Resultando un beneficio medio esperado por cliente de 35.25 unidades monetarias, y un
beneficio medio de 35.07 u.m. Lo que los aproxima mucho, concluyendo con la fiabilidad de
la predicción.
Para hacer una comparación entre los dos métodos, ahora vamos a calcular el CLV total
usando el método de DFC (discounted cash flows) ajustado para el coste del capital con una
tasa de descuento de 0.7.
print "Expected conditional average profit: %s, Average profit: %s" % (
ggf.conditional_expected_average_profit(
summary_with_money_value['frequency'],
summary_with_money_value['monetary_value']
).mean(),
summary_with_money_value[summary_with_money_value['frequency']>0]['monetary_value'].mean()
)
Expected conditional average profit: 35.2529582528, Average profit: 35.078551797
72. Customer_ID CLV
1 27.535073
2 3.568359
3 6.598023
4 6.598023
5 6.598023
6 210.596295
7 5.294988
8 6.598023
9 32.905050
10 6.598023
Tabla 9: CLV por el método de DFC.
En la tabla 9 observamos el Customer Lifetime Value en valores monetarios para cada
cliente, con el método del DFC. Así, observamos que hay significativas diferencias entre
los valores de unos clientes y otros. Pero sobretodo, entre unos modelos y otros.
73. Customer_ID CLV
1 27.535073
2 3.568359
3 6.598023
4 6.598023
5 6.598023
6 210.596295
7 5.294988
8 6.598023
9 32.905050
10 6.598023
Tabla 9: CLV por el método de DFC.
Customer_ID CLV
1 24.658617
2 18.911481
3 35.171002
4 35.171002
5 35.171002
Tabla 8: CLV esperado por cliente
(Modelo BD/NBD)
COMPARATIVA
75. En nuestro modelo, el reto es diferenciar los clientes inactivos (clientes que han
abandonado definitivamente la empresa), de los considerados activos en el pasado
pero que no han abandonado del todo la empresa.
Y en general, extraer más valor de los datos transaccionales de los cuales las
empresas si tienen mucha información.
Fusionar los micro y macro modelos en un contexto coherente.
En definitiva, entender mejor al cliente.
77. Hacer modelos más complejos, relacionados y complementarios,
basados en la teoría económica.
Incluir a la competencia.
Incluir la experiencia del cliente.
79. La evolución natural será complementar los modelos de riesgo
de retención de los clientes con distribuciones binomiales
negativas que al fin y al cabo tienen un alto componente
estocástico, con modelos económicos mucho más completos.