latentAttrition {CLVTools} | R Documentation |
Formula Interface for Latent Attrition Models
Description
Fit latent attrition models for transaction with a formula interface
Usage
latentAttrition(formula, data, cov, optimx.args = list(), verbose = TRUE)
Arguments
formula |
Formula specifying the model to be fit. See Details. |
data |
Either a |
cov |
Optional |
optimx.args |
Additional arguments to control the optimization which are forwarded to |
verbose |
Show details about the running of the function. |
Details
Formula
A multi-part formula describing how to prepare data and fit the model.
Formula left hand side (LHS) specifies the data preparation which depends on the provided argument data
.
If
data
isclvdata
: Nothing, LHS is required to be empty.If
data
is adata.frame
: Data preparation using formula specialclvdata(time.unit, date.format, split)
. The formula is required to have a LHS.
Formula right hand side (RHS) specifies the model fitting and follows a multi-part notation.
1st part (required): The model to fit. One of either
pnbd
,bgnbd
, orggomnbd
. Depending on the model additional arguments may be given. See the respective model functions for details.
If the model is fit with covariates, further parts separated by |
are required:
2nd part (required): Which covariates to include for the lifetime process, potentially transforming them and adding interactions. The dot ('.') refers to all columns in the data except the identifier variables.
3rd part (required): Which covariates to include for the transaction process, potentially transforming them and adding interactions. The dot ('.') refers to all columns in the data except the identifier variables.
4th part (optional): Formula special
regularization(trans=, life=)
to specify the lambdas for regularization andconstraint(...)
to specify parameters to be equal on both processes. Both specials separated by+
may be given.
See the example section for illustrations on how to specify the formula parameter.
Covariate Data
For time-invariant covariates the data contains exactly one single row of covariate data for every customer appearing in the transaction data.
Requires a column Id
of customer identifiers.
See SetStaticCovariates
for details.
For time-varying covariates the data contains exactly 1 row for every combination of timepoint and customer.
Requires a column Id
of customer identifiers and a column Cov.Date
of dates.
For each customer appearing in the transaction data there needs to be covariate data at every timepoint that marks the start of a period as defined
by time.unit. It has to range from the start of the estimation sample (timepoint.estimation.start) until the end of
the period in which the end of the holdout sample (timepoint.holdout.end) falls.
Covariates of class character or factor are converted to k-1 numeric dummies.
See SetDynamicCovariates
and the the provided dataset apparelDynCov
for illustration.
See Also
Models for inputs to: pnbd, ggomnbd, bgnbd.
spending to fit spending models with a formula interface
Examples
data("apparelTrans")
data("apparelStaticCov")
clv.nocov <-
clvdata(apparelTrans, time.unit="w", date.format="ymd")
# Create static covariate data with 2 covariates
clv.staticcov <-
SetStaticCovariates(clv.nocov,
data.cov.life = apparelStaticCov,
names.cov.life = c("Gender", "Channel"),
data.cov.trans = apparelStaticCov,
names.cov.trans = c("Gender", "Channel"))
# Fit pnbd without covariates
latentAttrition(~pnbd(), data=clv.nocov)
# Fit bgnbd without covariates
latentAttrition(~bgnbd(), data=clv.nocov)
# Fit ggomnbd without covariates
latentAttrition(~ggomnbd(), data=clv.nocov)
# Fit pnbd with start parameters and correlation
latentAttrition(~pnbd(start.params.model=c(r=1, alpha=10, s=2, beta=8),
use.cor=TRUE),
data=clv.nocov)
# Fit pnbd with all present covariates
latentAttrition(~pnbd()|.|., clv.staticcov)
# Fit pnbd with selected covariates
latentAttrition(~pnbd()|Gender|Channel+Gender, data=clv.staticcov)
# Fit pnbd with start parameters for covariates
latentAttrition(~pnbd(start.params.life = c(Gender = 0.6, Channel = 0.4),
start.params.trans = c(Gender = 0.6, Channel = 0.4))|.|., data=clv.staticcov)
# Fit pnbd with transformed covariate data
latentAttrition(~pnbd()|Gender|I(log(Channel+2)), data=clv.staticcov)
# Fit pnbd with all covs and regularization
latentAttrition(~pnbd()|.|.|regularization(life=3, trans=8), clv.staticcov)
# Fit pnbd with all covs and constraint parameters for Channel
latentAttrition(~pnbd()|.|.|constraint(Channel), clv.staticcov)
# Fit pnbd on given data.frame, no split
latentAttrition(data()~pnbd(), data=apparelTrans)
# Fit pnbd, split data after 39 periods
latentAttrition(data(split=39)~pnbd(), data=apparelTrans)
# Same but also give date format and period definition
latentAttrition(data(split=39, format=ymd, unit=w)~pnbd(), data=apparelTrans)
# Fit pnbd on given data.frames w/ all covariates
latentAttrition(data()~pnbd()|.|., data=apparelTrans, cov=apparelStaticCov)
# Fit pnbd on given data.frames w/ selected covariates
latentAttrition(data()~pnbd()|Channel+Gender|Gender,
data=apparelTrans, cov=apparelStaticCov)