The customers

13 customers, one per state

Each one is an example of a state the model produces, not an audience of one. Open a customer to see their signature and walk the journey they enter, message by message. Or score one yourself further down, and watch the model decide.

Score one yourself

Change the inputs, watch the decision change

Load any of the customers above, or move the controls yourself. The tier and the segment recompute as you go, and the rule that fired is named, so you can see exactly why the model landed where it did.

Load a customer:

Inputs

R · Recency5

Recency, how recently they purchased (5 = today, 1 = long ago)

F · Frequency5

Frequency, activity rate, exposure-normalised

M · Monetary5

Monetary, typical spend per active occasion (intensity)

B · Breadth4

Breadth, distinct products used

12-month gross spend£1,900

Drives the value tier (× recency decay)

Tenure
Flags
Lifecycle state

Model output

RFMBT
Value tier
Platinum
£1,900 × 1.00 = £1,900
Behavioural segment
Champion

Top value, broad and loyal across the range.

What we do

Recognise, protect and keep first-to-know. Low pressure, high value.

Moves KPI:Spend per active
What crosses into Braze
value_tier = Platinum
behavioural_segment = champion
matched_rule = 10
lapse_risk = false
subscription_flag = false
cross_sell_target = none
in_holdout = assigned upstream

Seven attributes, and nothing else. The plan, the definitions, the holdout assignment logic and the lift stay upstream.

Decision tree, first match wins
✕On a subscription, so recency and frequency are pinned by the standing order → Subscriber
✕Registered, never purchased → Prospect
✕First 90 days, so there is too little history to read → Onboarding
✕Came back after a long silence → Reactivated
✕Gone quiet against their own rhythm, and was worth keeping → At-Risk
✕Silent a long time, and was valuable once → Hibernating
✕One lifetime purchase, then nothing → One-and-done
✕Only purchased around a seasonal sale, quiet in between → Deal-Driven
✕Still newish, but the purchase rate is climbing → Rising Customer
✓Established, top tier, and broad across products → Champion
11Established and frequent, but has never tried complementary range → Single-Category Loyalist
12Established and frequent, steady spend, a product or two → Loyal Habitual
13Nothing else fired, so keep them warm at low cost → Casual / Low-engagement

Rule 10 fired. That number is persisted alongside the segment, so a change of state is explainable after the fact rather than an argument. It is also what makes the tree testable: the same inputs give the same rule on any future date.

A teaching version of the same logic, running in your browser. In production it runs in your warehouse over your own data, but the rules are the ones you see here.

Same people, every model

One cast, read through every lens

This roster is not specific to RFM. Every other model in the catalogue re-reads the same customers: churn scores their lapse risk, pLTV their forward value, engagement their appetite. That is what makes one shared view of the customer worth building once.

That is RFM working on sample data. The service page has the rest: what it needs from you, how long it takes to build, what it pairs with, and how the lift gets proven.