6 Customer Lifetime Value
Customer lifetime value (CLV) is the expected present value of future customer contribution. Define the horizon, margin, discounting, and customer state before comparing estimates.
6.1 Basic formulations
A historical value over an observation window is:
\[ \text{Historical value}_i = \sum_t (\text{revenue}_{it} - \text{variable cost}_{it}) \]
A forward-looking value is:
\[ CLV_i = \sum_{t=1}^{T} \frac{E[M_{it} \mid \mathcal{I}_0]}{(1+d)^t} \]
where \(M_{it}\) is future contribution margin, \(d\) is a period discount rate, \(T\) is the horizon, and \(\mathcal{I}_0\) is information available at the prediction date.
Using revenue instead of margin can overstate economically useful value. Subtract acquisition cost only when the decision requires a post-acquisition net value and avoid subtracting it twice.
6.2 Cohort analysis
Cohorts reveal retention and value patterns without pretending to predict each individual precisely. The data below are synthetic.
cohorts <- data.frame(
cohort = c("A", "B", "C"),
acquired = c(1000, 800, 1200),
retained_month_3 = c(610, 520, 660),
margin_90d = c(72000, 68000, 78000),
acquisition_cost = c(30000, 28000, 42000)
)
cohorts$retention_3m <- cohorts$retained_month_3 / cohorts$acquired
cohorts$margin_per_customer_90d <- cohorts$margin_90d / cohorts$acquired
cohorts$net_margin_90d <- cohorts$margin_90d - cohorts$acquisition_cost
cohorts## cohort acquired retained_month_3 margin_90d acquisition_cost retention_3m
## 1 A 1000 610 72000 30000 0.61
## 2 B 800 520 68000 28000 0.65
## 3 C 1200 660 78000 42000 0.55
## margin_per_customer_90d net_margin_90d
## 1 72 42000
## 2 85 40000
## 3 65 36000
Comparisons require equivalent observation windows and maturity. A recent cohort has had less time to repurchase and churn.
6.3 Discounted expected value
Suppose a contractual customer has a probability of remaining active each month and produces an expected margin when active.
month <- 1:12
monthly_retention <- 0.92
expected_margin_if_active <- 18
monthly_discount <- 0.01
survival_probability <- monthly_retention ^ month
discount_factor <- 1 / (1 + monthly_discount) ^ month
expected_clv_12m <- sum(
survival_probability * expected_margin_if_active * discount_factor
)
expected_clv_12m## [1] 123.9635
This shortcut assumes stable retention and margin. Real cohorts may have tenure effects, seasonality, changing prices, reactivation, and heterogeneous customers.
6.4 Choose a model for the setting
- Contractual businesses: survival or hazard models can estimate time to churn when an active/inactive state is observable.
- Noncontractual purchases: probabilistic transaction models can estimate whether a customer remains active and how often they may purchase.
- Rich feature settings: regression or machine-learning models can predict future value over a fixed horizon.
- Strategic planning: cohort-level scenarios may be more interpretable and stable than individual rankings.
Use time-based validation. Randomly splitting customer rows can leak later behavior or give mature customers to both training and test sets.
6.5 Decision use
CLV can support acquisition bids, service levels, retention programs, and portfolio planning. Prediction alone does not identify the effect of an offer. The highest-value customers may purchase without intervention; targeting them can waste discounts. Use experiments or uplift methods when the decision is who should receive treatment.
6.6 Common failure modes
- comparing revenue CLV with margin CLV;
- treating all unobserved customers as churned;
- ignoring right censoring and cohort maturity;
- validating on information unavailable at scoring time;
- assuming historical channel mix will remain stable;
- presenting point estimates without uncertainty; and
- using protected or sensitive attributes without appropriate governance.
The classic review Modeling Customer Lifetime Value summarizes several CLV model families and their managerial applications.