ModeloParetoNBD#

class pymc_marketing.clv.models.pareto_nbd.ParetoNBDModel(data=None, *, model_config=None, sampler_config=None)[fuente]#

Modelo Binomial Negativo de Pareto (Pareto/NBD).

Modelo para clientes continuos y no contractuales, introducido por primera vez por Schmittlein et al. [1], con derivaciones adicionales y métodos predictivos de Hardie y Fader [2] [3] [4] [5].

El modelo Pareto/NBD asume que la duración del tiempo en que un cliente está activo sigue una distribución Gamma, y el tiempo entre compras también se distribuye de manera Gamma mientras el cliente sigue activo.

Este modelo requiere que los datos sean resumidos por recencia, frecuencia y T para cada cliente, utilizando clv.rfm_summary() o equivalente. Las covariables que impactan en la deserción de clientes y las tasas de transacción son opcionales.

Parámetros:
datos : DataFrameDataFrame

DataFrame que contiene las siguientes columnas:

  • customer_id: Identificador único del cliente

  • frequency: Número de compras repetidas

  • recency: Tiempo entre la primera y la última compra

  • T: Tiempo entre la primera compra y el final del período de observación. Las suposiciones del modelo requieren T >= recency

Junto con columnas de covariables opcionales.

model_config : dict, opcionalpython:dict, opcional

Diccionario que contiene parámetros del modelo y nombres de columnas de covariables:

  • r: Parámetro de forma del tiempo entre compras; por defecto es Weibull(alpha=2, beta=1)

  • alpha: Parámetro de escala del tiempo entre compras; por defecto es Weibull(alpha=2, beta=10)

  • s: Parámetro de forma del tiempo hasta la caída; por defecto es Weibull(alpha=2, beta=1)

  • beta: Parámetro de escala del tiempo hasta la deserción; por defecto es Weibull(alpha=2, beta=10)

  • purchase_covariates: Coeficientes para covariables de la tasa de compra; por defecto es Normal(0, 3)

  • dropout_covariates: Coeficientes para covariables de abandono; por defecto es Normal.dist(0, 3)

  • purchase_covariate_cols: Lista que contiene los nombres de las columnas de covariables para las tasas de compra de los clientes.

  • dropout_covariate_cols: Lista que contiene los nombres de las columnas de covariables para las bajas de clientes.

Si no se proporciona, el modelo utilizará los priors predeterminados especificados en el atributo de clase default_model_config.

sampler_config : dict, opcionalpython:dict, opcional

Diccionario de parámetros del muestreador. Por defecto es None.

Referencias

[1]

David C. Schmittlein, Donald G. Morrison y Richard Colombo. «Contando a sus clientes: ¿Quiénes son y qué harán a continuación?». Management Science, Vol. 33, No. 1 (ene., 1987), pp. 1-24.

[2]

Fader, Peter y G. S. Hardie, Bruce (2005). «Una nota sobre la derivación del modelo Pareto/NBD y expresiones relacionadas». http://brucehardie.com/notes/009/pareto_nbd_derivations_2005-11-05.pdf

[3]

Fader, Peter y G. S. Hardie, Bruce (2014). «Resultados Adicionales para el Modelo Pareto/NBD». https://www.brucehardie.com/notes/015/additional_pareto_nbd_results.pdf

[4]

Fader, Peter y G. S. Hardie, Bruce (2014). «Derivando la PMF Condicional del Modelo Pareto/NBD». https://www.brucehardie.com/notes/028/pareto_nbd_conditional_pmf.pdf

[5]

Fader, Peter y G. S. Hardie, Bruce (2007). «Incorporando covariables invariantes en el tiempo en los modelos Pareto/NBD y BG/NBD». https://www.brucehardie.com/notes/019/time_invariant_covariates.pdf

Ejemplos

import pymc as pm

from pymc_extras.prior import Prior
from pymc_marketing.clv import ParetoNBDModel, rfm_summary

rfm_df = rfm_summary(raw_data,'id_col_name','date_col_name')

# Initialize model with customer data; `model_config` parameter is optional
model = ParetoNBDModel(
    model_config={
        "r": Prior("Weibull", alpha=2, beta=1),
        "alpha: Prior("Weibull", alpha=2, beta=10),
        "s": Prior("Weibull", alpha=2, beta=1),
        "beta": Prior("Weibull", alpha=2, beta=10),
    },
)

# Fit model quickly to large datasets via the default Maximum a Posteriori method
model.fit(data=rfm_df,method='map')
print(model.fit_summary())

# Use 'demz' for more informative predictions and reliable performance on smaller datasets
model.fit(data=rfm_df,method='demz')
print(model.fit_summary())

# Predict number of purchases for customers over the next 10 time periods
expected_purchases = model.expected_purchases(
    data=rfm_df,
    future_t=10,
)

# Predict probability of customer making 'n' purchases over 't' time periods
# Data parameter is omitted here because predictions are ran on original dataset
expected_num_purchases = model.expected_purchase_probability(
    n=[0, 1, 2, 3],
    future_t=[10,20,30,40],
)

new_data = pd.DataFrame(
    data = {
    "customer_id": [0, 1, 2, 3],
    "frequency": [5, 2, 1, 8],
    "recency": [7, 4, 2.5, 11],
    "T": [10, 8, 10, 22]
    }
)

# Predict probability customers will still be active in 'future_t' time periods
probability_alive = model.expected_probability_alive(
    data=new_data,
    future_t=[0, 3, 6, 9],
)

# Predict number of purchases for a new customer over 't' time periods.
expected_purchases_new_customer = model.expected_purchases_new_customer(
    t=[2, 5, 7, 10],
)

Métodos

ParetoNBDModel.__init__([data, ...])

Inicializar la configuración del modelo y la configuración del muestreador para el modelo.

ParetoNBDModel.attrs_to_init_kwargs(attrs)

Convierte la configuración del modelo y la configuración del muestreador de los atributos a argumentos de palabra clave.

ParetoNBDModel.build_from_idata(idata)

Construya el modelo a partir del objeto InferenceData.

ParetoNBDModel.build_model([data])

Construya el modelo.

ParetoNBDModel.create_idata_attrs()

Cree atributos para los datos de inferencia.

ParetoNBDModel.distribution_new_customer([...])

Calcule muestras predictivas posteriores de abandono, tasa de compra y frecuencia/recencia de nuevos clientes.

ParetoNBDModel.distribution_new_customer_dropout([...])

Muestra de la distribución Gamma que representa los tiempos de abandono para nuevos clientes.

ParetoNBDModel.distribution_new_customer_purchase_rate([...])

Muestra de la distribución Gamma que representa las tasas de compra para nuevos clientes.

ParetoNBDModel.distribution_new_customer_recency_frequency([...])

Proceso Pareto/NBD que representa las compras a través de la población de clientes.

ParetoNBDModel.expected_probability_alive([...])

Calcular la probabilidad esperada de estar vivo.

ParetoNBDModel.expected_purchase_probability([...])

Calcule la probabilidad esperada de n_purchases durante future_t períodos de tiempo.

ParetoNBDModel.expected_purchases([datos, ...])

Calcular el número esperado de compras futuras.

ParetoNBDModel.expected_purchases_new_customer([...])

Calcule el número esperado de compras para un nuevo cliente a lo largo de t períodos de tiempo.

ParetoNBDModel.fit([data, method, fit_method])

Inferir los posteriores de los parámetros del modelo para realizar predicciones.

ParetoNBDModel.fit_summary(**kwargs)

Calcule el resumen del resultado del ajuste.

ParetoNBDModel.graphviz(**kwargs)

Obtenga la representación graphviz del modelo.

ParetoNBDModel.idata_to_init_kwargs(idata)

Cree los kwargs de inicialización a partir de un objeto InferenceData.

ParetoNBDModel.load(fname[, check])

Cree una instancia de ModelBuilder a partir de un archivo.

ParetoNBDModel.load_from_idata(idata[, check])

Cree una instancia de ModelBuilder a partir de un objeto InferenceData.

ParetoNBDModel.save(fname, **kwargs)

Guarde los datos de inferencia del modelo en un archivo.

ParetoNBDModel.set_idata_attrs([idata])

Establecer atributos en un objeto InferenceData.

ParetoNBDModel.table(**model_table_kwargs)

Obtenga la tabla resumen del modelo.

ParetoNBDModel.thin_fit_result(keep_every)

Devuelva una copia del modelo con un resultado de ajuste reducido.

Atributos

covariate_cols

All covariate column names.

default_model_config

Configuración de modelo predeterminada.

default_sampler_config

Configuración de muestreador predeterminada.

dropout_covariate_cols

Dropout covariate column names from model_config.

fit_result

Obtenga el resultado de ajuste posterior fit_result.

id

Generar un valor hash único para el modelo.

posterior

posterior_predictive

predictions

prior

prior_predictive

purchase_covariate_cols

Purchase covariate column names from model_config.

version

idata

sampler_config

model_config