RFM Analysis

Method

Scoring customers on three axes — how recently they bought, how often, and how much they spent — and grouping them by the combination.

Why it exists

A customer list of ten thousand used to get handled as one block. The same copy goes to all ten thousand, and revenue gets read as an average across all ten thousand. That produces a figure like $30 average spend, inside which somebody who spent $380 last week and somebody who spent $23 once two years ago and vanished carry identical weight. An average that blends those two describes neither of them.

Splitting them had no obvious basis either. Age and region are available and don't connect well to purchase behavior, and splitting by survey covers only the people who answered. The question was which basis produces a split that tells you what to do next.

RFM analysis finds that basis inside the purchase records. Order data already contains the three values: the date of the last purchase, the number of purchases, and the amount spent. Turn each into a score and combine them and the same ten thousand split into a handful of groups with different characters, each with a different action attached. Nothing extra has to be asked and no new data has to be collected, which is most of why the method has lasted.

How to run it

Converting three values into scores and combining them is the whole method. Five steps.

  1. Fix the window. Twelve months is common; products with long purchase cycles use twenty-four. Too short a window sets every frequency value to 1, which makes one axis meaningless.
  2. Pull three values per customer: days since the last purchase, purchase count inside the window, and total spend inside the window. Use the total for spend rather than the average — an average overlaps with the frequency axis.
  3. Convert each value to a five-point score. Rather than absolute thresholds, split the population into fifths and give the top 20 percent a 5, the next 20 percent a 4, and so on. Absolute thresholds skew the distribution to one side depending on industry and season. Recency is the one axis where shorter means a higher score. Quintiles also keep the group sizes even, which makes the counts comparable month to month.
  4. Concatenate the three scores into groups. That yields 125 combinations from 555 down to 111, which is unworkable as-is, so they get collapsed into six to eight. High on all three is the best-customer group; high spend and frequency with low recency is the at-risk group; recent with a single purchase is the new-customer group. Those three come up most in practice. Naming the groups matters as much as forming them, because the names are what other teams will repeat.
  5. Attach an action per group. Skip this and the analysis stays a table. The at-risk group gets a reason to come back, the best customers get early access rather than a discount, and new customers get whatever moves them to a second purchase. Writing the action down is what gives anyone a reason to recalculate next month.

When it fits and when it doesn't

The conditions are clear. One customer has to buy several times, which fits retail, add-on purchases on a subscription, and any business with repeat orders. On a product bought once in a lifetime, every frequency value is 1 and recency is just the signup date, so the three axes collapse into one. Checking that condition first saves building a table nobody can act on.

There has to be enough volume. With 300 customers, each fifth holds 60 people, and collapsing to six groups leaves about 50 per group. At that size differences between groups aren't distinguishable from chance. It's a method for thousands of customers upward, and below that, eyeballing a list of top customers is faster.

The largest limit is that it reads behavior and says nothing about reasons. Why the at-risk group left isn't in this table. Whether price was the issue, whether they moved to a competitor, whether the need went away — that takes asking, and gets paired with funnel analysis, which shows where people drop out by step, or segment analysis, which compares differences between groups.

It's also a photograph taken on one date. The table describes the day it was calculated, and recalculating a month later moves people between groups. Where retention analysis reads the flow over time, this reads the cross-section now. Most teams recalculate monthly and watch the movement between groups alongside it. A group label with no date attached is the most common way this analysis goes stale.

How it sounds at work

"The at-risk group is 1,200 accounts. Let's send to those first."

Picking one group rather than the whole list.

"Every frequency score is a 1. The window needs to go to twenty-four months."

One axis isn't functioning.

"Don't send the best customers a discount. They were going to buy anyway."

The action has to differ per group.

Pagedeck uses this on additional seat purchases by enterprise accounts. Ravi calculates the three scores on a twelve-month window and collapses them into six groups, and Sofia picked up the 1,200 accounts that scored low on recency alone.

The first result didn't match expectations. Calling that group, half said they had no plan to add seats, and the other half had a new owner who didn't know the product. What the table supplied was where to look; the reasons came out of the calls. Neither half would have shown up as a pattern in the order data.

What people get wrong

The most common move is summing the three scores into one grade. 555 becomes 15, 111 becomes 3, and customers line up in a single ranking, which looks easier to work with. But this collapses different states onto the same number. Recency 5 with spend 1 and recency 1 with spend 5 both land near 9 — the first is a brand-new customer, the second is a large account on its way out. Two groups with opposite required actions end up in one bucket, and whatever gets sent to that bucket is wrong for both. The three axes get read as a combination, never as a sum. The sum is easier to sort and it discards the only thing the method produces.

The other frequent view is that one split holds. A group name feels like a property of the customer, and stored in a tool it keeps getting used. But the value describes the date it was calculated, and the recency score in particular falls purely from time passing. An account that was a best customer in March lands in at-risk by June without doing anything. Teams that mail a six-month-old list send thank-yous to customers who already left and miss the ones leaving now. Recalculating costs less than the mistake.

Where to go next

Last updated 2026-09-16