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 clientefrequency: Número de compras repetidasrecency: Tiempo entre la primera y la última compraT: 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 esWeibull(alpha=2, beta=1)alpha: Parámetro de escala del tiempo entre compras; por defecto esWeibull(alpha=2, beta=10)s: Parámetro de forma del tiempo hasta la caída; por defecto esWeibull(alpha=2, beta=1)beta: Parámetro de escala del tiempo hasta la deserción; por defecto esWeibull(alpha=2, beta=10)purchase_covariates: Coeficientes para covariables de la tasa de compra; por defecto esNormal(0, 3)dropout_covariates: Coeficientes para covariables de abandono; por defecto esNormal.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.
- datos :
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.
Convierte la configuración del modelo y la configuración del muestreador de los atributos a argumentos de palabra clave.
Construya el modelo a partir del objeto InferenceData.
ParetoNBDModel.build_model([data])Construya el modelo.
Cree atributos para los datos de inferencia.
Calcule muestras predictivas posteriores de abandono, tasa de compra y frecuencia/recencia de nuevos clientes.
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.
Calcular la probabilidad esperada de estar vivo.
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.
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.
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_colsAll covariate column names.
default_model_configConfiguración de modelo predeterminada.
default_sampler_configConfiguración de muestreador predeterminada.
dropout_covariate_colsDropout covariate column names from model_config.
fit_resultObtenga el resultado de ajuste posterior fit_result.
idGenerar un valor hash único para el modelo.
posteriorposterior_predictivepredictionspriorprior_predictivepurchase_covariate_colsPurchase covariate column names from model_config.
versionidatasampler_configmodel_config