Why the simple average falls short
The quick version divides total revenue by the number of customers. It is easy to produce and easy to misuse. A business with a small group of heavy buyers and a long tail of one-time buyers gets one average that describes nobody. If you set a retention budget from that number, you spend the same on a customer who buys every month as on one who bought once two years ago.
What a predictive CLV model does instead
A predictive model forecasts each customer separately. A common, practical framing is: given everything we knew about this customer on a cutoff date, how much will they spend in the next 12 months? The inputs are usually built from transaction history: how recently the customer bought, how often, how much they spend, how those patterns have changed, and what they tend to buy. Gradient boosting models such as LightGBM handle this kind of tabular data well and cope with uneven, skewed spending.
Validate on the future, not on a random split
This is where many CLV projects quietly go wrong. If you shuffle all customers and split them randomly, information from the future leaks into training and the results look better than they will be in real use. A sound setup picks a cutoff date, builds features only from data before it, and measures the forecast against what customers actually spent afterwards. Then you repeat it at an earlier cutoff to check the result is stable. Any feature that could only be known after the cutoff has to go.
Give the forecast a range
A single number per customer looks precise and is not. A forecast of 400 with a plausible range of 100 to 900 should lead to a different decision than a forecast of 400 with a range of 350 to 450. Conformal prediction is one way to produce intervals that come with a stated coverage rate, for example 80 percent, measured on held-out data. The guarantee rests on assumptions, mainly that future customers behave like the ones used to calibrate, so it is worth re-checking coverage over time.
Explain what drives it
SHAP values break each forecast down into the contribution of each input. That helps in two ways: you can check the model is relying on sensible signals, and the marketing or retention team gets a reason to go with the score rather than a black box.
How the result gets used
- Spend more on keeping the customers whose expected value is high.
- Treat high-uncertainty customers differently from clearly low-value ones.
- Compare the total forecast with budget and plan revenue with a range, not a single line.
CLV also tells you who is worth keeping, not who can be persuaded to stay. If the question is where a retention offer actually changes behaviour, that needs a different kind of analysis, uplift modelling, covered in the churn checklist.
See it in a working project
I built a public case study around this topic (read the full write-up), with code and documentation on GitHub: predictive-customer-lifetime-value. It runs on synthetic data generated for the project, so it demonstrates the method and the engineering rather than results from a real client.
Further reading
- scikit-learn: TimeSeriesSplit: Validating on later periods rather than a random split.
- scikit-learn: probability calibration: Checking that predicted probabilities are trustworthy.
- SHAP documentation: Explaining which inputs drive a model prediction.
