BG-NBD Model

Summary

The beta-geometric/NBD (BG/NBD) model (Fader, Hardie & Lee 2005, Marketing Science) changes one line of the Pareto-NBD Model story: instead of dying at an exponentially distributed time, a customer becomes inactive immediately after a purchase with probability , with across customers. The purchase process while alive (Poisson, gamma-mixed) is unchanged. The payoff is a likelihood built from gamma and beta functions only — estimable with Excel’s Solver — while fit and forecasts on CDNOW and on 81 simulated Pareto/NBD “worlds” are nearly indistinguishable from the original model (individual-level predictions correlate 0.996). The main limitation is structural: a customer with no repeat purchase cannot have dropped out, so the model struggles when penetration or purchase frequency is very low.

Overview

The authors “have no misgivings about the [Pareto/NBD] model whatsoever, besides its computational complexity” (Sec. 8). The BG/NBD is proposed as “a small, relatively inconsequential, change” that “does not require any different psychological theories, nor does it have any noteworthy managerial implications”, but makes the framework accessible to anyone with a spreadsheet. Data requirements are identical: for each customer, frequency , recency and length of observation .

Main Content

BG/NBD assumptions ^def-bgnbd-assumptions

(Sec. 3)

  1. While active, transactions follow a Poisson process with rate (exponential interpurchase times).
  2. across customers (Eq. 1).
  3. After any transaction the customer becomes inactive with probability , so dropout is distributed across transactions as a shifted geometric: .
  4. across customers (Eq. 2).
  5. and vary independently across customers.

As in SMC, all customers are assumed active at the start of the observation period.

Individual-level likelihood ^thm-bgnbd-individual-likelihood

Multiply the exponential density of each interpurchase time by the survival probability at each preceding purchase; after the last purchase at , either the customer died (probability ) or stayed alive and bought nothing in (probability ). Collecting terms (Eq. 3):

with if and otherwise. As with the Pareto/NBD, “information on the timing of the transactions is not required; a sufficient summary of the customer’s purchase history is .”

Likelihood for a randomly chosen customer ^thm-bgnbd-likelihood

Integrating over the gamma and beta (Eq. 6):

For the spreadsheet (Sec. 7) write with

Only GAMMALN, LN and EXP are needed; the sample log-likelihood (Eq. 7) is maximized with Solver.

Dropout in calendar time. Conditional on , , so the lifetime is exponential with rate (Sec. 4.3). Unlike the Pareto/NBD, the dropout process is explicitly tied to the purchase rate: heavy buyers face more dropout opportunities per unit time.

Expected purchases for a new customer ^thm-bgnbd-expected

Individual level (Eq. 5): . Randomly chosen customer (Eq. 9):

This needs a single evaluation, and only after estimation — “this expectation is only used after the likelihood function has been maximized.”

Conditional expectation and probability alive ^thm-bgnbd-conditional-expectation

For a customer with history , the expected number of purchases in is (Eq. 10, derived in the Appendix via Eqs. A1–A8):

The individual-level probability of being active (Eq. A2) is the “alive” term of the likelihood over the whole likelihood, , and equals 1 when . Taking the same ratio with the mixed likelihood (Eq. 6) gives

which is exactly the reciprocal of the denominator of Eq. 10 (the paper does not display this population-level expression separately; it follows directly from Eqs. 6 and A2). The numerator of Eq. 10 is Eq. 9 with updated parameters , , .

Simulation: when does BG/NBD fail to mimic Pareto/NBD?

Section 6 simulates a -cell factorial of Pareto/NBD worlds (; ), each with 4,000 households over 104 weeks; penetration ranges from 13% to 76% and mean purchase frequency among buyers from 2.1 to 8.2. BG/NBD is fitted on weeks 1–52 and its weeks 53–104 cumulative forecast scored by MAPE.

MAPEPenetrationAvg. purchase frequency
Worst 10 worlds5.29%26%2.6
Other 71 worlds2.32%43%3.8

Average MAPE is 2.68%, worst case 6.97% (Table 1). The failures cluster where buying is sparse: “under the BG/NBD, a customer cannot become inactive before making his first purchase”, whereas Pareto/NBD death can precede any repeat purchase. The suggested remedy is a one-parameter extension for a segment of “hard core nonbuyers”.

Empirical comparison on CDNOW

Calibration: 2,357 customers, weeks 1–39; holdout weeks 40–78 (Sec. 7).

BG/NBDPareto/NBD
Parameters
Log-likelihood
Histogram fit
Holdout cumulative salesunder-forecast 4%under-forecast 2%
Zero-class cond. expectation (actual )0.230.14
Corr. with actual holdout transactions0.6260.630

The two models’ individual-level conditional expectations correlate 0.996 (Table 3). A three-group ANOVA of actual vs the two predictions is not significant ().

Implementation caveats (Sec. 8)

  • Fit separately by cohort (acquisition quarter, channel); for a mature base, by coarse RFM segment.
  • Transferring one cohort’s parameters to another requires the cohorts to be comparable.
  • Forecasts assume future marketing resembles the past; the model is a baseline for evaluating changes.
  • Covariates are possible, but if customers were targeted on past RFM, “we must be aware of econometric issues such as endogeneity bias (Shugan 2004) and sample selection bias.”
  • A spend model (normal-normal, or the Gamma-Gamma Model of Monetary Value) is required before CLV can be computed.

Examples

Reproducing two rows of the paper’s Excel sheet (Fig. 1). With :

  • Customer 0001: , , . , , , , so . ; expected purchases in the next 39 weeks (own calculation from Eq. 10).
  • Customer 0003: . ; by construction; .
  • Customer 0006: , : , — lower survival probability than customer 0001 despite far more purchases, because nine silent weeks are more damning for a frequent buyer.
import numpy as np
from scipy.special import gammaln, hyp2f1
 
def bgnbd_loglik(r, al, a, b, x, tx, T):
    A1 = gammaln(r+x) - gammaln(r) + r*np.log(al)
    A2 = gammaln(a+b) + gammaln(b+x) - gammaln(b) - gammaln(a+b+x)
    A3 = -(r+x)*np.log(al+T)
    A4 = np.where(x > 0, np.log(a) - np.log(np.maximum(b+x-1, 1e-12)) - (r+x)*np.log(al+tx), -np.inf)
    return A1 + A2 + np.logaddexp(A3, A4)
 
def bgnbd_cond_exp(r, al, a, b, x, tx, T, t):          # Eq. 10
    num = (a+b+x-1)/(a-1) * (1 - ((al+T)/(al+T+t))**(r+x)
          * hyp2f1(r+x, b+x, a+b+x-1, t/(al+T+t)))
    den = 1 + (x > 0) * a/(b+x-1) * ((al+T)/(al+tx))**(r+x)
    return num/den

Connections

See Also