BetaGeoBetaBinomModel#

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

Modelo Beta-Geométrico/Beta-Binomial (BG/BB).

Modelo CLV para oportunidades de compra discretas no contractuales, introducido por Fadel et al. [1].

El modelo BG/BB asume que la probabilidad de que un cliente se vuelva inactivo sigue una distribución Beta, y la probabilidad de realizar una compra también está distribuida según una Beta mientras los clientes aún están activos.

Este modelo requiere que los datos sean resumidos por recencia, frecuencia y T para cada cliente. T debe ser el mismo valor para todos los clientes.

Parámetros:
datos : DataFrameDataFrame

DataFrame que contiene las siguientes columnas:

  • customer_id: Identificador único del cliente

  • frequency: Número de compras repetidas

  • recency: Oportunidades de compra entre la primera y la última compra

  • T: Oportunidades de compra totales. Las suposiciones del modelo requieren T >= recencia y todos los clientes comparten el mismo valor para *T.

model_config : dict, opcionalpython:dict, opcional

Diccionario que contiene los parámetros del modelo:

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

  • beta: Parámetro de forma del proceso de compra; por defecto es 1-phi_purchase * kappa_purchase

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

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

  • phi_purchase: Prior anidado para los priors de alfa y beta; por defecto es Prior("Uniform", lower=0, upper=1)

  • kappa_purchase: Prior anidado para los priors de alfa y beta; por defecto es Prior("Pareto", alpha=1, m=1)

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

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

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]

Peter Fader, Bruce Hardie y Jen Shang. «Análisis de la Base de Clientes en un Entorno No Contractual de Tiempo Discreto». Marketing Science, Vol. 29, No. 6 (Nov-Dic, 2010), pp. 1086-1108. https://www.brucehardie.com/papers/020/fader_et_al_mksc_10.pdf

Ejemplos

import pymc as pm

from pymc_extras.prior import Prior
from pymc_marketing.clv import BetaGeoBetaBinomModel

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

# Initialize model with customer data; `model_config` parameter is optional
model = BetaGeoBetaBinomModel(
    model_config={
        "alpha": Prior("HalfFlat"),
        "beta": Prior("HalfFlat"),
        "gamma": Prior("HalfFlat"),
        "delta": Prior("HalfFlat"),
    },
)

# Fit model quickly to large datasets via Maximum a Posteriori
model.fit(data=rfm_df, fit_method="map")
print(model.fit_summary())

# Fit with the default 'mcmc' for more informative predictions and reliable performance on smaller datasets
model.fit(fit_method="mcmc")
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

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

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

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

BetaGeoBetaBinomModel.build_from_idata(idata)

Construya el modelo a partir del objeto InferenceData.

BetaGeoBetaBinomModel.build_model([data])

Construya el modelo.

BetaGeoBetaBinomModel.create_idata_attrs()

Cree atributos para los datos de inferencia.

BetaGeoBetaBinomModel.distribution_new_customer_dropout([...])

Muestra de la distribución Beta que representa las probabilidades de abandono para nuevos clientes.

BetaGeoBetaBinomModel.distribution_new_customer_purchase_rate([...])

Muestra de la distribución Beta que representa las probabilidades de compra para nuevos clientes.

BetaGeoBetaBinomModel.distribution_new_customer_recency_frequency([...])

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

BetaGeoBetaBinomModel.expected_probability_alive([...])

Predecir la probabilidad esperada de estar vivo.

BetaGeoBetaBinomModel.expected_purchases([...])

Predecir el número esperado de compras futuras.

BetaGeoBetaBinomModel.expected_purchases_new_customer([...])

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

BetaGeoBetaBinomModel.fit([data, method, ...])

Inferir la posterior del modelo.

BetaGeoBetaBinomModel.fit_summary(**kwargs)

Calcule el resumen del resultado del ajuste.

BetaGeoBetaBinomModel.graphviz(**kwargs)

Obtenga la representación graphviz del modelo.

BetaGeoBetaBinomModel.idata_to_init_kwargs(idata)

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

BetaGeoBetaBinomModel.load(fname[, check])

Cree una instancia de ModelBuilder a partir de un archivo.

BetaGeoBetaBinomModel.load_from_idata(idata)

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

BetaGeoBetaBinomModel.save(fname, **kwargs)

Guarde los datos de inferencia del modelo en un archivo.

BetaGeoBetaBinomModel.set_idata_attrs([idata])

Establecer atributos en un objeto InferenceData.

BetaGeoBetaBinomModel.table(**model_table_kwargs)

Obtenga la tabla resumen del modelo.

BetaGeoBetaBinomModel.thin_fit_result(keep_every)

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

Atributos

default_model_config

Configuración de modelo predeterminada.

default_sampler_config

Configuración de muestreador predeterminada.

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

version

idata

sampler_config

model_config