Un tutorial práctico sobre la predicción del valor de vida útil del cliente (CLTV)

Estás leyendo la publicación: Un tutorial práctico sobre la predicción del valor de vida útil del cliente (CLTV)

Customer Lifetime Value (CLTV) mide qué tan valioso es un cliente para su empresa, no solo dentro del alcance de una sola transacción sino a lo largo de toda la relación. Como parte de un programa de experiencia del cliente, es importante realizar un seguimiento del valor de vida del cliente (CLTV) para lograr una gran retención de clientes. En general, CLTV representa la ganancia asociada con una relación con un cliente en particular. En este artículo, estaríamos aprendiendo cómo calcular el CLTV en python y predecir las probabilidades de un cliente. Los puntos principales que se tratarán en este artículo se enumeran a continuación.

Tabla de contenido

  1. ¿Qué es CLTV?
  2. Descripción del conjunto de datos
  3. ¿Qué es RFM?
  4. Predecir el CLTV
  5. Calcular la probabilidad de retención de clientes
  6. Efecto del tiempo en la predicción de transacciones

Primero comprendamos qué es CLTV.

¿Qué es el valor de vida del cliente (CLTV)?

El valor de por vida del cliente (CLTV) es todos los beneficios potenciales que un cliente en particular puede aportar a la organización. Por ejemplo, tiene una tienda de ropa y un nuevo cliente compró una zapatilla de deporte en su tienda. En el futuro, pueden comprar otro par de zapatillas o una camiseta o una camisa. Todas estas compras potenciales en CLTV. En otras palabras, si estima el CLTV de un cliente en ₹ 50k, no gastaría más que eso para mantener la relación. El costo simplemente no vale la pena. En última instancia, CLTV debe guiar cuánto debe invertir para mantener la relación.

¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos? echa un vistazo aquí.

¿Como calcular?

CLTV de un cliente se puede calcular con la ayuda de las fórmulas mencionadas a continuación,

Valor medio de compra = Ingresos totalesNúmero de pedidos

Tasa de frecuencia de compra promedio = Número de compras Número de clientes

Valor del cliente = Valor de compra promedio * Tasa de frecuencia de compra promedio

Valor de vida del cliente (CLTV) = Valor del cliente * Vida útil promedio del cliente

Descripción del conjunto de datos

Los datos utilizados en el artículo están relacionados con la segmentación de clientes minoristas en línea en función de sus compras. Este conjunto de datos se ha tomado de un repositorio de kaggle que se menciona en las referencias. Contiene un total de 8 columnas que contienen información diferente sobre las compras del cliente. La descripción de las columnas se menciona a continuación:

  • Número de factura: un número único de 6 dígitos asignado a la factura de la orden de compra.
  • Código de stock: código de 5 dígitos asignado a los distintos productos.
  • Descripción: Breve descripción de los productos.
  • Cantidad: Número de productos adquiridos por el cliente.
  • Fecha de factura: Fecha de la compra.
  • Precio unitario: Precio del producto por unidad comprada.
  • Customer id: Número de identificación único del cliente.
  • País: Ubicación del cliente.
🔥 Recomendado:  Probar y validar modelos y datos de aprendizaje automático con Deepchecks

Data de muestra

Hay todas las columnas requeridas pero no hay ninguna columna relacionada con las ventas totales por pedido. Podemos calcular las ventas por pedido multiplicando la cantidad y el precio unitario.

¿Qué es RFM?

En esta sección, se usará la metodología RFM en los datos para asignar un valor a los clientes en función de sus compras, que luego se usaría para predecir el CLTV.

R significa Actualidad de compra, qué tan recientemente un cliente ha realizado una compra. Esto se puede averiguar comprobando la fecha de compra reciente de la última compra del cliente.

F significa Frecuencia de compra, con qué frecuencia un cliente realiza una compra. Esto podría calcularse dividiendo el número de compras por el número de días.

M representa el valor monetario de la compra, cuánto dinero gasta un cliente en compras. Calcular los ingresos totales generados por el cliente.

Implementación de RFM en datos

Importar bibliotecas

importar numpy como np importar pandas como pd importar vidas desde vidas.utils importar calibración_y_retención_datos

Leer el conjunto de datos

df=pd.read_csv(‘/content/customer_segmentation.csv’,encoding=’cp1252′) df.head()

Ingeniería de características

d.f.[‘InvoiceDate’]=pd.to_datetime(df[‘InvoiceDate’])[‘orderdate’]=df[‘InvoiceDate’].map(fecha lambda: fecha.fecha())

Conversión de la columna ‘InvoiceDate’ al tipo de datos DateTime para más cálculos y facilidad y almacenamiento solo de las fechas en la nueva columna ‘orderdate’.

Aplicar RFM

final_período_calibración=”2011-09-05″ calib_holdout = calibración_y_retención_datos(df, id_cliente_col=”ID_cliente”, datetime_col=”fechapedido”, frecuencia = ‘D’, #días final_período_calibración=fin_período_calibración, final_período_observación=’2011-12-9′ ) calib_holdout .cabeza()

lifes.utils.calibration_and_holdout_data () resume cada cliente en función del período de calibración y retención. La calibración es el entrenamiento y la retención es la prueba. Los parámetros proporcionados a las funciones son:

  • actas: Hay que dar los datos.
  • cliente_id_col: Se debe describir la columna de identificación del cliente.
  • fechahora_col: Se debe proporcionar la columna de fecha de pedido.
  • frecuencia: Días
  • final_del_periodo_de_calibración: Mencione la fecha en que se debe realizar la capacitación.
  • final_del_periodo_de_observación: Mencione la fecha en que se debe realizar la prueba.

En la muestra de clientes anterior, sus valores de RFM se calcularon tanto para la calibración como para la retención.

🔥 Recomendado:  Una guía para la minería de reglas de asociación interpretable usando PyCaret

Predecir el CLTV

Como en la sección anterior se han calculado los valores de RFM para todos los clientes, ahora pasemos a la parte de predicción. Para predecir el CLTV de futuros clientes, necesitamos entrenar un modelo de aprendizaje automático.

Entrenamiento – modelo MBG/NBD

Este modelo tiene algunos supuestos que se enumeran a continuación:

  1. La tasa de transacción de un cliente activo (λ) sigue un proceso de Poisson.
  2. La heterogeneidad a través de la tasa de transición (λ) se rige por una distribución Gamma con parámetros de forma (Г) y parámetro de escala (𝛼)
  3. Los clientes se vuelven inactivos en el tiempo cero y después de cada compra con una probabilidad constante (p)
  4. La probabilidad (p) es heterogénea entre los clientes según la distribución Gamma con los parámetros a y b
  5. La probabilidad de abandono (p) y la tasa de transacción (λ) no dependen entre sí y varían de forma independiente entre los clientes.

Importando biblioteca:

de importación de por vida ModifiedBetaGeoFitter

Construcción del modelo y datos de entrenamiento basados ​​en RFM:

mbg_nbd = ModifiedBetaGeoFitter(penalizer_coef=0.01) mbg_nbd.fit(calib_holdout[‘frequency_cal’]calibre_retención[‘recency_cal’]calibre_retención[‘T_cal’]detallado=Verdadero)

Al instalador Beta Geo modificado (MBG) se le asigna un parámetro penalizer_coef que se aplica en la norma L2 o Norma euclidiana.

Norma euclidiana es la distancia más corta para ir de un punto a otro.

El modelo fue entrenado en 3388 datos de clientes diferentes.

Estimación de CLTV en el segundo modelo Gamma-Gamma

Gamma-Gamma asume que no hay relación entre el valor monetario y la frecuencia de compra. Para eso, necesitamos verificarlo usando la prueba de correlación de Pearsons.

raw_summary=lifetimes.utils.summary_data_from_transaction_data(df,’CustomerID’,’orderdate’,’Sales’) raw_summary.head() raw_summary=raw_summary[raw_summary[‘monetary_value’]>0]gg=lifetimes.GammaGammaFitter(penalizer_coef=0.01) gg.fit(raw_summary[‘frequency’]raw_summary[‘monetary_value’],tiempo=1) gg.resumen

El parámetro de tiempo no da días en el futuro, por lo que estamos tomando 1 mes o 30 días. Depende de usted inicializar el valor de acuerdo con su análisis. Entrenó el modelo en los datos de resumen sin procesar formados por la funciónlifelifes.utils.summary_data_from_transaction_data().

Podemos ver el resumen de salida del rendimiento del modelo de ajuste gamma-gamma en los datos. Usando el modelo de ajuste gamma-gamma, ahora predeciremos el CLTV para los clientes.

raw_summary[‘predicted_CLTV’]=gg.customer_lifetime_value(mbg_nbd, raw_summary[‘frequency’]raw_summary[‘monetary_value’]raw_summary[‘recency’]raw_summary[‘T’]) raw_summary.head()

Se ha agregado una nueva columna al marco de datos de resumen con todos los valores predichos por el modelo de ajuste gamma-gamma.

Calcular la probabilidad de retención de clientes

Veamos el historial de un cliente en particular y calculemos la probabilidad de retención del cliente en el futuro.

Importación de bibliotecas

de vidas.plotting import plot_history_alive de fecha y hora fecha de importación de vidas.utils importar calcular_ruta_viva

🔥 Recomendado:  Explorando el valor del arte generado por IA

Crear un gráfico

cliente = calib_holdout.iloc[3265]
cliente_id = cliente.nombre total = 365*90 hoy = fecha.hoy() hace = hoy.reemplazar(año=hoy.año – 12) ahora = hoy.reemplazar(año=hoy.año + 1)

Describir los detalles de los clientes e inicializar el número total de unidades de tiempo, definiendo la fecha futura y la fecha pasada para trazar el historial.

tran = df.loc[df[‘CustomerID’] == cust_id]total = (hoy – tran.orderdate.min()).days p_alive_today = pd.DataFrame(calculate_alive_path(mbg_nbd, tran, ‘orderdate’, t, freq=’D’))[0].tail(1).valores p_vivo_hoy = np.round(p_vivo_hoy[0]2) print(‘La probabilidad de que ese cliente esté vivo hoy es’, p_alive_today)

Producción:

La probabilidad de que ese cliente esté vivo hoy es [0.57]

Cálculo de la probabilidad de retención del cliente como futuro comprador.

total = (ahora – tran.orderdate.min()).days ax = plot_history_alive(mbg_nbd, total, tran, ‘orderdate’, start_date=ago) ax.vlines(x=hoy, ymin=0, ymax=1.05 ) ax .hlines(y=0.8, xmin=hace, xmax=ahora) ax.set_xlim(hace, ahora) ax.set_ylim(0, 1.05) plt.xticks(rotación=-90) text(0.75, 0.1, p_alive_today, ha= “centro”, va=”centro”, transform=ax.transEjes) sns.despine()

Trazado de la información anterior obtenida.

Efecto del tiempo en la predicción de transacciones

Importar bibliotecas

from lifes.utils importar transacciones_acumulativas_esperadas

En esto, solo se requiere la identificación del cliente y la fecha del pedido, por lo que creamos un nuevo marco de datos con solo estas columnas.

df1=df[[‘CustomerID’,’orderdate’]]

Predecir las transacciones

unidad_tiempo = (df1.fechapedido.max() – df1.fechapedido.min()).días df2 = transacciones_acumulativas_esperadas(mbg_nbd, df1, ‘fechapedido’, ‘IDCliente’, unidad_tiempo) df2.cabeza()

En la muestra anterior, podemos observar que hay variación en las predicciones. Grafiquemos y tengamos una vista más detallada de la variación debido al tiempo.

cal = datetime.strptime(‘2011-12-05’, ‘%Y-%m-%d’) from vidas.plotting import plot_cumulative_transactions time_unit = (df1.orderdate.max() – df1.orderdate.min()) .days time_unit_cal = (cal.date() – df1.orderdate.min()).days plot_acumulative_transactions(mbg_nbd, df1, ‘orderdate’, ‘CustomerID’, time_unit, time_unit_cal, freq=’D’) sns.despine()

Conclusión

En este artículo, aprendimos cómo se pueden utilizar los datos demográficos de clientes segmentados para predecir el valor de vida útil del cliente (CLTV), la probabilidad de retención de clientes y el efecto del tiempo en la predicción de transacciones.

Referencias

  1. Enlace para el código anterior
  2. Documentación de utilidades de por vida
  3. conjunto de datos