Presetación TFT PalomaCuestaUria

Post on 22-Jan-2018

109 views 3 download

Transcript of Presetación TFT PalomaCuestaUria

¿CUÁNTO VALE UN CLIENTE?

UNA ALTERNATIVA AL MODELO DE PARETO.

Experto en Big Data y Data Science: ciencia e ingeniería de datos

ALGUNAS PREGUNTAS

¿Cuánto vale un cliente?

¿Qué es el Customer Lifetime Value (CLV)?

¿Cómo se calcula?

¿Todos los clientes “valen” lo mismo?

¿Qué clientes parece que serán más activos?

¿Cuánto podrían comprar (transacciones esperadas)?

REFLEXIONES

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.

ALGUNAS RESPUESTAS

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.

CLAVES

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.

UNA FÓRMULA

𝐶𝐿𝑉 = σ𝑡=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

MÁS SENCILLO

𝐶𝐿𝑉 = σ𝑡=0𝑇 𝑟𝑡

1+𝑑 𝑡 𝑚

Donde

𝑚 = 𝑛𝑒𝑡 𝑐𝑎𝑠ℎ 𝑓𝑙𝑜𝑤 𝑝𝑒𝑟 𝑝𝑒𝑟𝑖𝑜𝑑 (𝑖𝑓 𝑎𝑐𝑡𝑖𝑣𝑒)

𝑟 = 𝑟𝑒𝑡𝑒𝑛𝑡𝑖𝑜𝑛 𝑟𝑎𝑡𝑒

𝑑 = 𝑑𝑖𝑠𝑐𝑜𝑢𝑛𝑡 𝑟𝑎𝑡𝑒

𝑇 = ℎ𝑜𝑟𝑖𝑧𝑜𝑛 𝑓𝑜𝑟 𝑐𝑎𝑙𝑐𝑢𝑙𝑎𝑡𝑖𝑜𝑛

MÁS CORRECTO

𝐸(𝐶𝐿𝑉) = 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.

EL CÁLCULO DE 𝐸(𝐶𝐿𝑉)

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:

𝐸(𝐶𝐿𝑉) = න𝑇

𝐸 𝑣 𝑡 𝑆 𝑡|𝑡 > 𝑇 𝑑 𝑡 − 𝑇 𝑑𝑡

NUESTRO CONTEXTO

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.

NUESTRO OBJETIVO

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.

NUESTRO MODELO

MOMENTO DE COMPRA

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 (𝑟, 𝛼).

MOMENTO DE ABANDONO

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

NUESTRA FUNCIÓN

Simplificando al máximo (ver memoria y referencias), para una implementación paramétrica rápida, se puede obtener la función de probabilidad del modelo como

𝓛 𝒓, 𝜶, 𝒂, 𝒃 𝒙, 𝒕𝒙, 𝑻 = 𝑨𝟏 · 𝑨𝟐 · 𝑨𝟑 + 𝜹𝒙>𝟎𝑨𝟒

donde,

𝐴1 =Г 𝑟+𝑥 α𝑟

Г(𝑟)𝐴2 =

Г 𝑎+𝑏 Г(𝑏+𝑥)

Г(𝑏)Г(𝑎+𝑏+𝑥)

𝐴3 =1

α+𝑇

𝑟+𝑥𝐴4 =

𝑎

𝑏+𝑥−1

1

α+𝑡𝑥

𝑟+𝑥

IMPLEMENTACIÓN

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.

NUESTROS DATOS

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.

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.

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 𝑡𝑥 .

ALGUNAS VISUALIZACIONES

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.

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.

UNA PREDICCIÓN

Tabla 2: Ranking de clientes en base a sus compras esperadas.

ID Frequency Recency TPredicted_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.

¿ES CORRECTA NUESTRA PREDICCIÓN?

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.

DATOS TRANSACCIONALES

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).

TRANSFORMAMOS LOS DATOS

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.

MÁS PREDICCIONES

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

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.

CROSS-VALIDATION

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 calibrationperiod 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.

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.

PERO…

¿REALMENTE LO HACEMOS BIEN?

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.

AÑADIMOS VALOR MONETARIO

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.

PERO…

¿HAY RELACIÓN ENTRE EL VALOR MONETARIO

Y LA FRECUENCIA DE COMPRA?

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.

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.

¿EN SERIO?

BUENO. ESO NOS DICEN NUESTROS DATOS.

Y AHORA SI

NUESTRO CLV

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>

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.

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

VS OTROS MÉTODOS

Customer_ID CLV

1 27.535073

2 3.5683593 6.5980234 6.5980235 6.5980236 210.5962957 5.2949888 6.5980239 32.90505010 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.

Customer_ID CLV

1 27.535073

2 3.5683593 6.5980234 6.5980235 6.5980236 210.5962957 5.2949888 6.5980239 32.90505010 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

RETOS

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.

IDEAS

Hacer modelos más complejos, relacionados y complementarios,

basados en la teoría económica.

Incluir a la competencia.

Incluir la experiencia del cliente.

CONCLUSIÓN

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.

MÁS PREGUNTAS…

Paloma Cuesta Uría

Tutor: José Ramón Dorronsoro Íbero

Septiembre 2016