bgnbd {CLVTools} | R Documentation |
BG/NBD models
Description
Fits BG/NBD models on transactional data without and with static covariates.
Usage
## S4 method for signature 'clv.data'
bgnbd(
clv.data,
start.params.model = c(),
optimx.args = list(),
verbose = TRUE,
...
)
## S4 method for signature 'clv.data.static.covariates'
bgnbd(
clv.data,
start.params.model = c(),
optimx.args = list(),
verbose = TRUE,
names.cov.life = c(),
names.cov.trans = c(),
start.params.life = c(),
start.params.trans = c(),
names.cov.constr = c(),
start.params.constr = c(),
reg.lambdas = c(),
...
)
Arguments
clv.data |
The data object on which the model is fitted. |
start.params.model |
Named start parameters containing the optimization start parameters for the model without covariates. |
optimx.args |
Additional arguments to control the optimization which are forwarded to |
verbose |
Show details about the running of the function. |
... |
Ignored |
names.cov.life |
Which of the set Lifetime covariates should be used. Missing parameter indicates all covariates shall be used. |
names.cov.trans |
Which of the set Transaction covariates should be used. Missing parameter indicates all covariates shall be used. |
start.params.life |
Named start parameters containing the optimization start parameters for all lifetime covariates. |
start.params.trans |
Named start parameters containing the optimization start parameters for all transaction covariates. |
names.cov.constr |
Which covariates should be forced to use the same parameters for the lifetime and transaction process. The covariates need to be present as both, lifetime and transaction covariates. |
start.params.constr |
Named start parameters containing the optimization start parameters for the constraint covariates. |
reg.lambdas |
Named lambda parameters used for the L2 regularization of the lifetime and the transaction covariate parameters. Lambdas have to be >= 0. |
Details
Model parameters for the BG/NBD model are r, alpha, a, and b
.
r
: shape parameter of the Gamma distribution of the purchase process.
alpha
: scale parameter of the Gamma distribution of the purchase process.
a
: shape parameter of the Beta distribution of the dropout process.
b
: shape parameter of the Beta distribution of the dropout process.
If no start parameters are given, r = 1, alpha = 3, a = 1, b = 3 is used. All model start parameters are required to be > 0. If no start values are given for the covariate parameters, 0.1 is used.
Note that the DERT expression has not been derived (yet) and it consequently is not possible to calculated values for DERT and CLV.
The BG/NBD model
The BG/NBD is an "easy" alternative to the Pareto/NBD model that is easier to implement. The BG/NBD model slight adapts the behavioral "story" associated with the Pareto/NBD model in order to simplify the implementation. The BG/NBD model uses a beta-geometric and exponential gamma mixture distributions to model customer behavior. The key difference to the Pareto/NBD model is that a customer can only churn right after a transaction. This simplifies computations significantly, however has the drawback that a customer cannot churn until he/she makes a transaction. The Pareto/NBD model assumes that a customer can churn at any time.
BG/NBD model with static covariates
The standard BG/NBD model captures heterogeneity was solely using Gamma distributions. However, often exogenous knowledge, such as for example customer demographics, is available. The supplementary knowledge may explain part of the heterogeneity among the customers and therefore increase the predictive accuracy of the model. In addition, we can rely on these parameter estimates for inference, i.e. identify and quantify effects of contextual factors on the two underlying purchase and attrition processes. For technical details we refer to the technical note by Fader and Hardie (2007).
The likelihood function is the likelihood function associated with the basic model where alpha, a, and b are replaced with alpha = alpha0*exp(-g1z1), a = a_0*exp(g2z2), and b = b0*exp(g3z2) while r remains unchanged. Note that in the current implementation, we constrain the covariate parameters and data for the lifetime process to be equal (g2=g3 and z2=z3).
Value
Depending on the data object on which the model was fit, bgnbd
returns either an object of
class clv.bgnbd or clv.bgnbd.static.cov.
The function summary
can be used to obtain and print a summary of the results.
The generic accessor functions coefficients
, vcov
, fitted
,
logLik
, AIC
, BIC
, and nobs
are available.
References
Fader PS, Hardie BGS, Lee KL (2005). ““Counting Your Customers” the Easy Way: An Alternative to the Pareto/NBD Model” Marketing Science, 24(2), 275-284.
Fader PS, Hardie BGS (2013). “Overcoming the BG/NBD Model's #NUM! Error Problem” URL http://brucehardie.com/notes/027/bgnbd_num_error.pdf.
Fader PS, Hardie BGS (2007). “Incorporating time-invariant covariates into the Pareto/NBD and BG/NBD models.” URL http://www.brucehardie.com/notes/019/time_invariant_covariates.pdf.
Fader PS, Hardie BGS, Lee KL (2007). “Creating a Fit Histogram for the BG/NBD Model” URL https://www.brucehardie.com/notes/014/bgnbd_fit_histogram.pdf
See Also
clvdata
to create a clv data object, SetStaticCovariates
to add static covariates to an existing clv data object.
gg to fit customer's average spending per transaction with the Gamma-Gamma
model
predict
to predict expected transactions, probability of being alive, and customer lifetime value for every customer
plot
to plot the unconditional expectation as predicted by the fitted model
pmf
for the probability to make exactly x transactions in the estimation period, given by the probability mass function (PMF).
The generic functions vcov
, summary
, fitted
.
Examples
data("apparelTrans")
clv.data.apparel <- clvdata(apparelTrans, date.format = "ymd",
time.unit = "w", estimation.split = 40)
# Fit standard bgnbd model
bgnbd(clv.data.apparel)
# Give initial guesses for the model parameters
bgnbd(clv.data.apparel,
start.params.model = c(r=0.5, alpha=15, a = 2, b=5))
# pass additional parameters to the optimizer (optimx)
# Use Nelder-Mead as optimization method and print
# detailed information about the optimization process
apparel.bgnbd <- bgnbd(clv.data.apparel,
optimx.args = list(method="Nelder-Mead",
control=list(trace=6)))
# estimated coefs
coef(apparel.bgnbd)
# summary of the fitted model
summary(apparel.bgnbd)
# predict CLV etc for holdout period
predict(apparel.bgnbd)
# predict CLV etc for the next 15 periods
predict(apparel.bgnbd, prediction.end = 15)
# To estimate the bgnbd model with static covariates,
# add static covariates to the data
data("apparelStaticCov")
clv.data.static.cov <-
SetStaticCovariates(clv.data.apparel,
data.cov.life = apparelStaticCov,
names.cov.life = c("Gender", "Channel"),
data.cov.trans = apparelStaticCov,
names.cov.trans = c("Gender", "Channel"))
# Fit bgnbd with static covariates
bgnbd(clv.data.static.cov)
# Give initial guesses for both covariate parameters
bgnbd(clv.data.static.cov, start.params.trans = c(Gender=0.75, Channel=0.7),
start.params.life = c(Gender=0.5, Channel=0.5))
# Use regularization
bgnbd(clv.data.static.cov, reg.lambdas = c(trans = 5, life=5))
# Force the same coefficient to be used for both covariates
bgnbd(clv.data.static.cov, names.cov.constr = "Gender",
start.params.constr = c(Gender=0.5))
# Fit model only with the Channel covariate for life but
# keep all trans covariates as is
bgnbd(clv.data.static.cov, names.cov.life = c("Channel"))