RFM Customer Segmentation

11 segments

Every customer scored 1 to 5 on recency, frequency and money, then placed in one of eleven segments, from Champions to Lost.

Kind of work
Customer analytics
Year
2025
Built with
Power BI, DAX
A recency against frequency scatter chart, with bubbles sized by money spent and coloured by segment.

RFM segmentation built step by step in Power BI. Three DAX measures, percentile scores and a lookup sort every customer into a segment a marketing team can act on.

Why not just rank by revenue

A “top customers by revenue” list rewards one big purchase. Customer A spent $575 once, 150 days ago. Customer B has spent $450 over eight orders, the last one ten days ago. Revenue puts A first, but B is the one still buying. RFM asks three questions instead of one: how recently, how often and how much.

It is the same approach I used at Qucoon to find the customers a microfinance bank was most likely to lose.

The build

Three measures give every customer their raw values:

Recency = DATEDIFF(CALCULATE(MAX(Orders[Order Date])), TODAY(), DAY)
Frequency = CALCULATE(DISTINCTCOUNT(Orders[Order ID]))
Monetary = CALCULATE(SUM(Orders[Sales]))

A calculated table summarises them per customer. Calculated columns then score each value from 1 to 5 by percentile, where a low recency scores high:

R = SWITCH(TRUE(),
    'RFM table'[Recency] <= PERCENTILE.INC('RFM table'[Recency], 0.20), 5,
    'RFM table'[Recency] <= PERCENTILE.INC('RFM table'[Recency], 0.40), 4,
    'RFM table'[Recency] <= PERCENTILE.INC('RFM table'[Recency], 0.60), 3,
    'RFM table'[Recency] <= PERCENTILE.INC('RFM table'[Recency], 0.80), 2,
    1)

The three scores join into one code such as 545, and a lookup against a segment table turns the code into a name.

Reading the result

The segment chart shows where the customer base sits. The scatter of recency against frequency, sized by money, shows the customers behind each segment. Champions, Loyal Customers and Potential Loyalists get the loyalty work. At Risk and Can’t Lose Them get targeted win-back campaigns. Hibernating and Lost get low-cost reactivation. Refreshed with new orders, the model shows customers moving between segments over time.