November 20, 2020

Analytics

One of the holy grail metrics for any business is **Customer Lifetime Value** (CLV, aka LTV). With sufficient data, you can place a dollar value for any of your customers, no matter what **purchase funnel stage** they are in, and consequently prioritize your actions based on it. The more data you have the more you can segment your customers which leads to a more accurate measure of CLV — for example, customers from different channels like Facebook ads or Google organic search; could have drastically different values.

Here are just a few things you can do with an accurate CLV:

- Prioritize your most valuable customers and keep them happy
- Double down on profitable acquisition channels (and scale down unprofitable ones) by comparing CLV to your customer acquisition costs (CAC)
- Personalize offers and campaigns based on different CLV tiers

In this post, I will guide you through a simple and effective way to calculate Customer Lifetime Value that doesn’t require any fancy modeling or machine learning. By the end of this post, I hope you will have developed some basic intuition about CLV that you can start incorporating into your own store and operations. This guide assumes you’ve made a **backup of all your Shopify data**, or have some way to access the metrics and values we describe here. For everyone else you can get these for free for your store with our **data science app Segments**.

Without further ado, here’s the formula:

CLV = Existing Customer Equity + Future Customer Equity

= (Total Past Sales) + [(Avg Order Value) * (Avg Number of Orders) * Max(0, (Avg Tenure - Current Tenure))]

Easy, right!? We’ll break each component down in the following section to make sure we have a thorough understanding as well as double-check our assumptions.

Aside: How is this calculation of CLV different fromShopify's Customer Lifetime Valueblog post from a while back? Shopify's CLV is calculated on at a segmented level based on RFM scores (Recency, Frequency, Monetary), with a simplified guide and walkthrough using Shopify exports and spreadsheets. It's a more top-down approach based on different RFM segments. Our CLV calculation, in contrast, is a more bottoms-up approach that calculates CLV at an individual level (albeit using some top-down averages) and doesn't require any initial segmentation. Both work fine, the key is understanding the different components and assumptions being made.

What we call “customer equity” is really just how much a customer has already spent with your store. If a new signup has yet to purchase anything, then this value is $0. If a customer has spent $100 with you, then this value is $100. We include this base “customer equity” value to make sure high spending customers are properly accounted for, and skew towards new “hot” customers who are just beginning to spend.

**Customer Equity = Total Sales**

Average order value, or AOV, should already be one of your core metrics. This metric represents exactly its name: the average dollars spent across all orders for a customer or customer segment. One thing to note is that this value— as well as the next metric, Average Number of Orders— is defined across a specified period of time to which we will need to normalize.

**Average Order Value = (Total Sales) / (Total Number of Orders)**

In ecommerce data science parlance this metric is also known as “Frequency” — for the time period we care about, what is the average number of orders that a customer in a particular segment will purchase. You can average the number of orders across as large or small of a customer segment as you’d like; for starters we can just take all customers from your store.

**Average Number of Orders = (Number of Orders) / (Number of Customers)**

Tenure can have several different definitions; the one we use is **the length of time between a customer’s first and last order dates**, normalized to the period of time you are using. We don’t use a customer’s account creation date (because what if they never buy anything?) and we also don’t use an indefinite end date (churn and churn win-back is a separate topic that we will discuss in a later post). A user that never buys anything is not counted, and a customer that only purchases 1 order has a tenure of 1 day. How do we know when a customer has purchased their “last” order? We can never be sure, but we can use a reasonable cutoff like “1 year since last purchase”. The average tenure, then, is the average (normalized) number of days between a customer segment’s first and last order dates.

**Average Tenure = (Total Customer Tenure) / (Number of Customers)**

For existing customers, like we mentioned above, we don’t actually know when their “last” order will be, but we can continue using our cutoff of 1 year. We use a slightly modified definition of tenure for “current tenure” which is the **length of time between today’s date and the most recent order date** (normalized). This modification makes sure we weigh recently purchased customers more highly, as intuitively they are more likely to keep coming back (in most cases).

**Current Tenure = (Current Date) - (Most Recent Order Date)**

Note that when the existing tenure is greater than the average tenure, then we’ll get a negative value for **(Avg Tenure - Existing Tenure)**; hence the **Max(0, …)** to make sure we just use a 0 value and assume the customer has churned.

Now we can put all the component pieces of CLV back together to our formula: In plain English, we can say that the Customer Lifetime Value for a given customer in a segment (could be your entire store) is a customer’s existing spend, plus the expected average spend spread out across the average remaining number of days the customer is expected to be an active shopper.

CLV = Existing Customer Equity + Future Customer Equity

= (Total Past Sales) + [(Avg Order Value) * (Avg Number of Orders) * Max(0, (Avg Tenure - Current Tenure))]

Questions? Hit us up in the comments or team@tresl.co.

Subscribe our newsletter & stay updated

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form.