← Customer lifetime value predictor

How to predict customer lifetime value: why "orders per year" overshoots by 68%

The usual shortcut is average order value × orders per year × years. It treats every customer as still buying. In a shop where customers come and go without telling you, many of them have already left, so the shortcut is too high, and it cannot tell your best customers from your quiet ones. A published model, BG/NBD, estimates the chance each customer is still active from just three numbers per customer.

Predict it on your own orders, free

The experiment

The tool's built-in invented shop: 1,200 customers and 3,307 orders over about two years. Every forecast below sees only orders up to 26 weeks before the end, then is scored against the repeat purchases customers actually made in those last 26 weeks (1,064 customers had bought by then; they made 578).

Forecast of next 26 weeksOrders predictedTotal errorError per customerReal orders in the 10% it ranks highest
BG/NBD model608+5%0.6048%
Each customer's own past rate carried forward973+68%0.8542%
Shop-wide average repeat rate for everyone879+52%0.9913%

What it shows

Both shortcuts overshoot by half or more, because they keep counting customers who have gone. Carrying each customer's own rate forward is the "orders per year" formula applied per person. It ranks customers fairly well (the top tenth it picks holds 42% of the real orders) but the total is far too high. The shop-wide average is both too high and cannot rank at all. The model is within 5% on the total, gives the best per-customer error, and its top tenth holds 48% of the real orders.

The sharpest gap is among customers who bought at least three times and then went silent: the model gives 26 such customers a low chance of being active, expects 3 orders from them and they made 5; the own-rate shortcut expects about 85.

This is one invented shop whose customers were generated to follow the model's own assumptions, so it shows the method works when those hold, not that your shop looks like this. Real data has seasonality, promotions, returns and customers who pause and come back, none of which the tool models. The tool back-tests itself on your last weeks so you can see how it does on your data.

Run the same comparison's model on your orders

How to do it by hand

1. Export customer, date and amount

One row per order, from your store or accounting tool. Orders on one day count as one purchase.

2. Find who is still buying

For each customer note the number of repeat purchases, how long between their first and last, and how long since their first. A customer whose gap since last purchase is far longer than their usual gap has probably left.

3. Value the ones still active

Expected orders × typical order value × margin, discounted over the horizon. Do not apply it to customers who have probably left.

4. Check it on the past

Hide the last few months, forecast them, and compare. If you cannot test the number, do not budget on it.

Questions

What is the simplest way to estimate customer lifetime value?

Average order value times orders per customer per year times expected years. It is fine for a rough budget, but it treats every customer as still buying, so it overstates the value of anyone who has quietly left.

What is BG/NBD?

BG/NBD (Fader, Hardie and Lee, 2005) is a published model for shops where customers buy at irregular times. From each customer's purchase count, the time of their last purchase and how long they have been observed, it estimates the chance they are still active and how many more purchases to expect.

How much order history do I need?

Enough that a good share of customers have bought more than once. A few hundred customers and a year or more of orders is a reasonable floor; the tool back-tests itself on your recent weeks so you can see how far to trust the result.

Does this work for subscriptions?

No. BG/NBD assumes customers can buy on any day and quietly stop. A subscription with fixed billing needs a churn or retention calculation instead.