I am trying to segment our customers based on their purchase data. And I came to know about the RFM technique (Recency, Frequency and Monetary) through these posts here, here etc.

Recency - How recently they made a purchase

Frequency - How many times they made a purchase

Monetary - How much revenue did company got from that customer

I also came across a python package called lifetimes here

while I understand the idea of RFM, I am confused as to why do the consider average revenue of a customer (from all his/her transactions) instead of Total revenue for all his/her transactions?

For ex: If a new customer places 2 huge orders for 100K and 200K, then he contributed 300K to the company and could be classified as "New but promising" or "New but Heavy spender" etc.

But doesn't taking average normalize everyone on the equal scale? So, then monetary value doesn't become useful metric to segment customers. Instead we have to use only Recency and Frequency (because they have raw values).

Is there any reason why you think average revenue is better than Total revenue?

  • 1
    $\begingroup$ Given you have frequency data, don't total and mean revenue provide equivalent information? $\endgroup$
    – whuber
    Commented May 23, 2022 at 14:02
  • $\begingroup$ Meaning, why are customers scored on their mean revenue to the company? Basically, in RFM, they score customers based on their values of recency, frequency and monetary. So, if I take average revenue to score a customer, then it is very much possible that I miss niche segments like "New but heavy spenders"...so, I am trying to understand what could be the idea behing scording customers based on average $\endgroup$
    – The Great
    Commented May 23, 2022 at 14:29
  • $\begingroup$ I think @whuber makes a good point. In both cases (total or mean monetary) you would be able to convert to the other case using the frequency. For example with mean monetary we could still capture a "new but heavy spender" because they would have a good recency score, a high mean monetary, and a high frequency. In your original example, if the new customer placed 2 huge orders for 100k and 200k, then their mean monetary value would be 150k, so we know they have made 2 purchases with an average of 150k, so they are a heavy spender! So both mean and total work, just depends on your preference! $\endgroup$
    – DataMan
    Commented Apr 29 at 14:06
  • $\begingroup$ I made a pairplot and I think using total is more intuitive for plots and segmentation. But both total and mean make sense. In the case of lifetimes (now replaced by github.com/pymc-labs/pymc-marketing), I think the reason they used certain definitions is because they are not actually doing RFM segmentation analysis, but rather are using RFM as an intermediate for CLV analysis. For example here they have the include_first_transaction variable that they say to change if doing segmentation. $\endgroup$
    – DataMan
    Commented Apr 29 at 14:51
  • $\begingroup$ Sorry I realized the last link I gave is not a permalink since it points to main and main can change over time. Here is the permalink $\endgroup$
    – DataMan
    Commented May 13 at 11:43

1 Answer 1


The 3 RTM are selected since they are often uncorrelated with each other, but you are free to redefine them or supplement them as you choose. Average revenue is a different metric than total revenue, although they are correlated so it might make sense to create a flag in your analysis for 'new heavy spenders' . While total revenue might be translated by average revenue * frequency, that is not always true if frequency is measured by multiple items which are often grouped together in an invoice. Sometimes businesses also include # of items as a separate variable.

All of these metrics are better off being scaled to within a timeframe, lets say the last year or 2 years, since you don't want to give equal weight to customers who have spent heavily a long time ago, but aren't spending anything now. So, if you are averaging, consider an exponentially smoothed average which would give greater weight to the most recent spending. But, on the other hand, if you have a 'Win Back' program, that is, trying to capture higher spend customers (or frequent) who are bought in the past, but now may be inactive, you could give greater weight to the older transactions.

  • $\begingroup$ Useful and detailed response. Two quick questions though. 1st question - So, you say it doesn't make any dofference whether I do avg or total revenue. Whatever measure I choose, I should make sure to interpret them correctly. Am i right? $\endgroup$
    – The Great
    Commented May 23, 2022 at 23:30
  • $\begingroup$ 2nd question - when you say to assign the variables weight, I am already assignimg scores to each customer for each criteria R,F and M on a scale of 1 to 5. Meaning, a customer's monetary value is bucketed into 5 groups from extremely low to extremely high...isn't that called weighting? Why to apply additional weighting? $\endgroup$
    – The Great
    Commented May 23, 2022 at 23:33
  • $\begingroup$ I would pick average or total revenue. Probably average since total revenue might be biased toward loyal customers who have been with you for a long time. So you might consider adding number of the years customer has been active as an additional variable. 2-I see that you have recoded data to ranked scale. So you are no longer able to do weighing of the revenue numbers $\endgroup$ Commented May 24, 2022 at 12:55
  • $\begingroup$ Isn't creating ranked scale same as weighting? Meaning, swgment with scale valie 5 is considered loyal whereas segment with scale value 1 is consodered at risk to leave or lost $\endgroup$
    – The Great
    Commented May 24, 2022 at 13:50
  • $\begingroup$ if we take average revenue, aren't we normalizing the monetary criteria? How does average revenue help in identofying loyal and new customer. For ex, new customer two transactions might have an average of 500 USD...Similiarly, old customer with 100 trabsactions over the years can also have 500 as average. In this case, how do you seperate between new and old based on monetary? So, you have to purely rely only on recency, frequency and time since signed up etc $\endgroup$
    – The Great
    Commented May 24, 2022 at 13:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.