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

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 es Prior("Weibull", alpha=2, beta=10)

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

  • a: Parámetro de forma del proceso de abandono; por defecto es phi_purchase * kappa_purchase

  • b: Parámetro de forma del proceso de abandono; por defecto es 1-phi_dropout * kappa_dropout

  • phi_dropout: Prior anidado para los priors a y b; por defecto es Prior("Uniform", lower=0, upper=1)

  • kappa_dropout: Prior anidado para los priors a y b; por defecto es Prior("Pareto", alpha=1, m=1)

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

  • dropout_covariates: Coeficientes para covariables de abandono; por defecto es Normal.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.

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.

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

BetaGeoModel.build_from_idata(idata)

Construya el modelo a partir del objeto InferenceData.

BetaGeoModel.build_model([data])

Construya el modelo.

BetaGeoModel.create_idata_attrs()

Cree atributos para los datos de inferencia.

BetaGeoModel.distribution_new_customer([...])

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

BetaGeoModel.distribution_new_customer_dropout([...])

Muestree la distribución Beta para la tasa de abandono a nivel poblacional.

BetaGeoModel.distribution_new_customer_purchase_rate([...])

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.

BetaGeoModel.expected_probability_alive([data])

Calcule la probabilidad de que un cliente con historial de frecuencia, recencia y T esté actualmente activo.

BetaGeoModel.expected_probability_no_purchase(t)

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.

BetaGeoModel.expected_purchases_new_customer([...])

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.

BetaGeoModel.idata_to_init_kwargs(idata)

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_cols

All covariate column names.

default_model_config

Configuración del modelo predeterminado.

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.

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