RFM analysis
What it is for
In a large customer base people buy in different ways. Some buy often and were here recently, some came once and have not been back for a long time. RFM analysis splits the base into nine segments. Each segment gets its own trigger, and that trigger works with this group on its own.
That covers different jobs:
- Number of purchases. Rare buyers get a reason to come again. Frequent buyers get a next step while the rhythm still holds.
- Average ticket. The same customers can also be divided by spend: average ticket, turnover, or the balance on the card. The offer is then based on that amount.
- Return rate. People who have been away for a long time get their own message. A longer pause gets a different text.
- Retention. Frequent recent buyers stay apart from the offer aimed at people who disappeared.
- The second purchase. Newcomers are brought back for a repeat while the first visit is still fresh.
- Who to contact. A short pause for a frequent buyer and a long pause for a rare buyer are different groups, and they need different calls.
A trigger’s action for a segment is to send a message, change the template, add balance, or change a field. Links to those sections are at the end of the article. Below is how to build the nine segments.
How recency and frequency are calculated
Recency and frequency are written onto the card as two variables. Technical support can turn the calculation on. Once it is on, the card stores:
- order_days — days since the last purchase;
- order_count — purchases inside the calculation window.
Spend is not part of those two variables. It comes from a separate field: average ticket, turnover, or the balance the CRM already writes to the card.
Why the minimum is nine segments
The basic grid is three recency bands by three frequency bands. That is 9 segments. A customer has one recency value and one frequency value, so they land in a single cell.
Dividing by spend as well — average ticket or turnover — multiplies the grid by three. That is 27 segments. The grid below uses recency and frequency only.
How to set the bands
You set the band edges. The worked example below covers one year. Recency is divided at 121 and 242 days, frequency at 4 and 24 purchases. Your own numbers go in the same way: three bands on each axis, and neighboring bands meet exactly.
Recency comes from order_days — days since the last purchase:
- Recent — order_days ≤ 121;
- Mid recency — order_days ≥ 122 and order_days ≤ 242;
- Long ago — order_days ≥ 243 and order_days ≤ 365.
Frequency comes from order_count — purchases inside the calculation window:
- Often — order_count ≥ 25;
- Sometimes — order_count ≥ 5 and order_count ≤ 24;
- Rarely — order_count ≤ 4.
The bands do not overlap. Day 121 is still recent, day 122 is mid recency. 4 purchases is rarely, 5 is sometimes, 24 is still sometimes, 25 is often. In this example the grid covers the last year: the top of the “long ago” band is 365 days.
The nine-cell grid
The vertical axis is the purchase count: the most frequent buyers are at the top. The horizontal axis is recency: recent purchases are on the left, and the arrow points right, toward older ones. Both axes start from the same point. The name in a cell is the segment. The cell is built from both bands together.
attention, 243–365 days, 25 or more purchases
How to write a cell as segment criteria
Each cell is its own segment. A card enters the segment when it matches every criterion on it. A range is two criteria: a lower bound and an upper bound. Recent and often need only one bound: days since a purchase start at zero, and the purchase count has no upper limit.
| Segment | Who is in it | Criteria |
|---|---|---|
| Champions | Buy often and visited recently | order_days ≤ 121 order_count ≥ 25 |
| Loyal | Used to buy often, last purchase is no longer fresh | order_days ≥ 122 order_days ≤ 242 order_count ≥ 25 |
| Need attention | Used to buy often, away for a long time | order_days ≥ 243 order_days ≤ 365 order_count ≥ 25 |
| Growing | Visited recently, already several purchases | order_days ≤ 121 order_count ≥ 5 order_count ≤ 24 |
| On the brink | Mid recency and mid frequency | order_days ≥ 122 order_days ≤ 242 order_count ≥ 5 order_count ≤ 24 |
| At risk | Away for a long time, a modest number of purchases | order_days ≥ 243 order_days ≤ 365 order_count ≥ 5 order_count ≤ 24 |
| Newcomers | Visited recently, few purchases | order_days ≤ 121 order_count ≤ 4 |
| Hesitant | Mid recency and few purchases | order_days ≥ 122 order_days ≤ 242 order_count ≤ 4 |
| Dormant | Away for a long time and rarely buying | order_days ≥ 243 order_days ≤ 365 order_count ≤ 4 |
Two cards, as a check. order_days = 40 and order_count = 30 is Champions: 40 stays within 121 days, and 30 purchases is already in the “often” band. order_days = 200 and order_count = 10 is On the brink: 200 sits between 122 and 242, and 10 purchases sit between 5 and 24.
One trigger per segment
A segment collects the group. The action for that group is a trigger, and one trigger is tied to one segment. Nine segments mean nine triggers. Through the trigger for its own group you can:
Segment criteria are set in Working with segments. How to turn a trigger on and pick the action is in Working with triggers. Ready-made segment and trigger setups are in Automation examples.
In short
The base is divided into nine groups. Each group has its own trigger and its own action: a message to come back, a new template, or a balance bonus. Purchase count, average ticket, and return rate move by group, and each group gets its own.
Get started free
Try Passquare — it’s free & easy.
Create an account, set up your signup form, design your cards, issue a few wallet passes, and send your first push notifications.
Sign up for free