BetaGeoModel#
- class pymc_marketing.clv.models.beta_geo.BetaGeoModel(data=None, *, model_config=None, sampler_config=None)[fuente]#
Modelo de distribución binomial negativa geométrica beta (BG/NBD) para una población de clientes no contractuales a lo largo del tiempo continuo.
Primero introducido por Fader, Hardie y Lee [1], con métodos predictivos adicionales y mejoras en [2], [R2639b53c1838-3], [4] y [5]
El modelo BG/NBD asume que las probabilidades de abandono para la población de clientes están distribuidas según una Beta, y el tiempo entre transacciones sigue una distribución Gamma mientras el cliente esté activo.
Este modelo requiere que los datos sean resumidos por recencia, frecuencia y T para cada cliente, utilizando
clv.utils.rfm_summary()o equivalente. Las suposiciones del modelo requieren T >= recencia.Los métodos predictivos se han adaptado de la clase BetaGeoFitter en la biblioteca heredada
lifetimes(ver CamDavidsonPilon/lifetimes).- 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
- model_config :
dict, opcionalpython:dict, opcional - Diccionario de parámetros previos del modelo:
alpha: Parámetro de escala para el tiempo entre compras; por defecto esPrior("Weibull", alpha=2, beta=10)r: Parámetro de forma para el tiempo entre compras; por defecto esPrior("Weibull", alpha=2, beta=1)a: Parámetro de forma del proceso de abandono; por defecto esphi_purchase*kappa_purchaseb: Parámetro de forma del proceso de abandono; por defecto es1-phi_dropout*kappa_dropoutphi_dropout: Prior anidado para los priors a y b; por defecto esPrior("Uniform", lower=0, upper=1)kappa_dropout: Prior anidado para los priors a y b; por defecto esPrior("Pareto", alpha=1, m=1)purchase_covariates: Coeficientes para covariables de tasa de compra; por defecto esNormal(0, 1)dropout_covariates: Coeficientes para covariables de abandono; por defecto esNormal.dist(0, 1)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 la deserción de clientes.
- sampler_config :
dict, opcionalpython:dict, opcional Diccionario de parámetros del muestreador. Por defecto es Ninguno.
- datos :
Referencias
[1]Fader, P. S., Hardie, B. G., y Lee, K. L. (2005). “Contando a sus clientes de la manera fácil: Una alternativa al modelo Pareto/NBD.» Ciencia del marketing, 24(2), 275-284. http://brucehardie.com/papers/018/fader_et_al_mksc_05.pdf
[2]Fader, P. S., Hardie, B. G., y Lee, K. L. (2008). «Cálculo de P (vivo) utilizando el modelo BG/NBD.» http://www.brucehardie.com/notes/021/palive_for_BGNBD.pdf.
[3]Fader, P. S. y Hardie, B. G. (2013) «Superando el problema de error #NUM! del modelo BG/NBD.» http://brucehardie.com/notes/027/bgnbd_num_error.pdf.
[4]Fader, P. S. y Hardie, B. G. (2019) «Una derivación paso a paso del modelo BG/NBD.» https://www.brucehardie.com/notes/039/bgnbd_derivation__2019-11-06.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
from pymc_extras.prior import Prior from pymc_marketing.clv import BetaGeoModel, rfm_summary # customer identifiers and purchase datetimes # are all that's needed to start modeling data = [ [1, "2024-01-01"], [1, "2024-02-06"], [2, "2024-01-01"], [3, "2024-01-02"], [3, "2024-01-05"], [4, "2024-01-16"], [4, "2024-02-05"], [5, "2024-01-17"], [5, "2024-01-18"], [5, "2024-01-19"], ] raw_data = pd.DataFrame(data, columns=["id", "date"] # preprocess data rfm_df = rfm_summary(raw_data,'id','date') # model_config and sampler_configs are optional model = BetaGeoModel( model_config={ "r": Prior("Weibull", alpha=2, beta=1), "alpha": Prior("HalfFlat"), "a": Prior("Beta", alpha=2, beta=3), "b": Prior("Beta", alpha=3, beta=2), }, sampler_config={ "draws": 1000, "tune": 1000, "chains": 2, "cores": 2, }, ) # The default 'mcmc' fit_method provides informative predictions # and reliable performance on small datasets model.fit(data=rfm_df) print(model.fit_summary()) # Maximum a Posteriori can quickly fit a model to large datasets, # but will give limited insights into predictive uncertainty. model.fit(fit_method='map') print(model.fit_summary()) # Predict number of purchases for current customers # over the next 10 time periods expected_purchases = model.expected_purchases(future_t=10) # Predict probability customers are still active probability_alive = model.expected_probability_alive() # Predict number of purchases for a new customer over 't' time periods expected_purchases_new_customer = model.expected_purchases_new_customer(t=10)
Métodos
BetaGeoModel.__init__([data, model_config, ...])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.
BetaGeoModel.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.
Muestree la distribución Beta para la tasa de abandono a nivel poblacional.
Muestree la distribución Gamma para la tasa de compra a nivel poblacional.
BetaGeoModel.distribution_new_customer_recency_frequency([...])Proceso BG/NBD que representa las compras a través de la población de clientes.
Calcule la probabilidad de que un cliente con historial de frecuencia, recencia y T esté actualmente activo.
Calcule la probabilidad de que un cliente con frecuencia, recencia y T en su historial tenga 0 compras en el período (T, T+t].
BetaGeoModel.expected_purchases([datos, futuro_t])Calcule el número esperado de compras futuras a lo largo de future_t períodos de tiempo dado recency, frequency y T para cada cliente.
Calcule el número esperado de compras para un nuevo cliente a lo largo de t períodos de tiempo.
BetaGeoModel.fit([data, method, fit_method])Inferir la posterior del modelo.
BetaGeoModel.fit_summary(**kwargs)Calcule el resumen del resultado del ajuste.
BetaGeoModel.graphviz(**kwargs)Obtenga la representación graphviz del modelo.
Cree los kwargs de inicialización a partir de un objeto InferenceData.
BetaGeoModel.load(fname[, check])Cree una instancia de ModelBuilder a partir de un archivo.
BetaGeoModel.load_from_idata(idata[, check])Cree una instancia de ModelBuilder a partir de un objeto InferenceData.
BetaGeoModel.save(fname, **kwargs)Guarde los datos de inferencia del modelo en un archivo.
BetaGeoModel.set_idata_attrs([idata])Establecer atributos en un objeto InferenceData.
BetaGeoModel.table(**model_table_kwargs)Obtenga la tabla resumen del modelo.
BetaGeoModel.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 del modelo predeterminado.
default_sampler_configConfiguración de muestreador predeterminada.
dropout_covariate_colsDropout covariate column names from model_config.
fit_resultObtenga el resultado de ajuste posterior.
idGenerar un valor hash único para el modelo.
posteriorposterior_predictivepredictionspriorprior_predictivepurchase_covariate_colsPurchase covariate column names from model_config.
versionidatasampler_configmodel_config