Patternbank·Buyer Segmentation
v1-final · 2026-04-29

11,734 buyers.
13 distinct groups.
Here's where the money lives.

Patternbank's buyers are not one audience. We've split them into thirteen named groups using twelve years of transaction data. Some are gone. Some are ours to keep. One small group is slipping away — and it's worth more than the rest combined.

£884Average spend per buyer
12 yrsTransaction history
3Currencies normalised
0Buyers uncategorised

The five families

Before we look at the thirteen segments individually, here's how they group. This is the picture leadership should hold in their head.

Heroes 4.9%
Climbers 5.5%
Slipping 12.9%
Already Lost 55.4%
Trend Audience 21.4%

Width is proportional to buyer count (11,734 total).

Family 1

Heroes

Our base. Small group, outsized revenue. They keep coming back at full price.

573
4.9% of buyers
Champions404
3.4% · last bought this quarter
Frequent, high-spend, recently engaged. Mean lifetime spend £6,880 across 22 purchases. They're shopping every 1-3 months.
VIP early access. Personalised content. Never discount-led.
Loyal Regulars169
1.4% · last bought within ~9 months
Multi-year, multi-purchase, mid-to-high spend. Mean £3,265 across 14 purchases. They're a Champion-track audience that's recently slowed slightly.
Keep them on trend content. Upsell to Champion frequency.
Family 2

Climbers

Buyers still getting to know us. Recently active, building a relationship — they could become Heroes if cultivated.

641
5.5% of buyers
New Big Spenders125
1.1% · 1-2 purchases, big basket
Came in recently and spent heavily — £1,387 average across just 2 transactions. Likely procurement-style or big-project buyers. Cultivate to retain.
Curated follow-ups. Designer + category recommendations.
New Starters332
2.8% · one purchase, last ~6 months
Recently joined buyers with one modest purchase under their belt. They've shown interest. The next step is a second purchase.
Onboarding nurture. Second-purchase trigger.
Promising184
1.6% · 2-3 purchases, modest spend
Already converted twice or three times. Building habit. Mean spend £328 across 2.3 purchases — they're testing us.
Cross-category discovery. Light upsell nudge.
Family 3 · headline

Slipping

Used to be our base. Started drifting. Not gone, just absent. The biggest revenue recovery opportunity on the platform.

1,510
12.9% of buyers
Drifting Regulars146
1.2% · last bought 1-2 years ago
Multi-purchase moderate-spend buyers slipping into at-risk. Modest size but the early-warning cohort — catch them now and they don't fall further.
Preventative reactivation. Light-touch pull-back.
Slipping VIPs ★1,099
9.4% · last bought 1-5 years ago
High-value buyers who used to spend £2,894 each across 10 purchases. They've drifted but they're recoverable. This is the priority cohort.
Personalised reactivation. Lead with content. Hold the discount.
Hibernating VIPs265
2.3% · last bought 5+ years ago
Former big spenders — mean £4,746 across 15 purchases — who've gone deeply quiet. Not slipping, hibernating. Higher reach cost, but the spend ceiling is real.
Deep win-back. Personalised reach. Low frequency.
Family 4

Already Lost

More than half our buyer base. Already gone. Stop spending money trying to bring most of them back. Mass-touch only.

6,496
55.4% of buyers
One-and-Done2,754
23.5% · one purchase, gone
Bought once, never came back. Average spend £88. They're the "tried us and didn't stick" cohort — at scale.
De-prioritise. Cheap mass touch only.
Faded Regulars984
8.4% · multi-purchase, faded
Multi-purchase buyers who quietly dropped off. Modest historical spend (£317). Catch-all bucket.
Bulk reactivation only. Minimal spend per buyer.
Long Gone2,758
23.5% · last seen 5+ years ago
Buyers we haven't seen in over five years. Some are reachable, most aren't. The cost-control segment — restraint matters more than reach.
Low-touch or silent.
Family 5 · separate

Trend Audience

Different product, different conversation. They buy seasonal Trend Reports — never a Design. Don't mix them with Design-buyer campaigns.

2,514
21.4% of buyers
Trend Report Audience2,514
21.4% · seasonal Trend Report buyers
Editorial seasonal release cadence. 100 SKUs over 12 years, 93% retired. Not a Design-marketing audience — different commercial dynamic entirely.
Seasonal Trend Report announcements only.
The headline insight

Slipping VIPs is the priority of priorities.

1,099 buyers who used to spend £2,894 each. They've drifted away over the past 1-5 years. Recovering even 10% of them at half their old pace adds more than three months of platform revenue per year — every year going forward. Reactivation isn't a side bet. It's the headline initiative.

£3.2MCombined historical spend
Method · Phase 1 → Phase 5

How we got here.

Two parallel methods. Twelve years of data. Seven design decisions. The approach is deliberately overbuilt for a small platform — because the cost of segmenting wrong (confident, wrong campaigns) is higher than the cost of segmenting carefully.

Two tracks, one segmentation

We ran two independent analyses in parallel from the same raw transaction data. Each catches what the other misses.

Track A · The rule book

Industry-standard frameworks, calibrated to your data

We applied the buyer-segmentation rule frameworks marketers use across e-commerce — Recency, Frequency, Monetary value — and calibrated the thresholds against Patternbank's actual buyer distribution.

The output: twelve named segments plus the Trend Report carve-out. Every buyer falls into exactly one. Every segment is explainable to anyone in the business.

This is what we ship to Nina. Repeatable, refreshable, easy to act on.

Track B · The listening method

Clustering algorithms — let the data speak

We used clustering algorithms (k-means, agglomerative hierarchical, density-based) to find natural groupings without imposing rules. No predefined segments. No assumptions about what the answer should look like.

The output: five commercial archetypes — Casual Shoppers, Core Shoppers, Premium Lovers, Deal Seekers, Power Shoppers.

This keeps Track A honest. Where they agree, we're catching reality. Where they disagree, we either fix the rules or learn something new.

The signals we used

Seven dimensions of behaviour, each interpretable on its own. Three core (the spine of the segmentation), four overlay (filters Nina layers on top).

Core · 1 of 3
Recency
When they last bought. Six bands from "this quarter" to "5+ years ago." Asymmetric — more resolution near the recent end.
Core · 2 of 3
Frequency
How many distinct purchases they've made. F=1 isolated as its own band — 47% of the universe is one-time, deserves its own treatment.
Core · 3 of 3
Monetary value
Lifetime spend, normalised to GBP using Bank of England historical rates across USD, GBP, EUR. Six bands from £50 to £10K+.
Overlay · 1 of 4
Premium-buying
Do they reach for premium designs? Three bands: never, mixed, premium-heavy. Premium-heavy split further by recency.
Overlay · 2 of 4
Discount behaviour
Do they need a coupon to convert? Four bands distinguishing one-shot coupon users from regular discount-redeemers.
Overlay · 3 of 4
Engagement rate
Cadence within their active history — how often they buy *while engaged*. Distinguishes Champions who buy monthly from Champions who buy yearly but for many years.
Overlay · 4 of 4
Breadth of taste
Many designers vs few. Captures 92% of Champions, 81% of Slipping VIPs — the strongest single positive signal in the system.

Where rules and clusters agree

The reconciliation matrix. Each cell shows what percentage of a Track A segment landed in each Track B cluster. Strong concentrations (60%+) mean the rule is catching real behaviour. Diffuse rows mean the segment cuts across multiple natural groupings — overlay territory.

Segment
Casual
Core
Premium
Deal Seekers
Power
0-20% 20-40% 40-60% 60-80% 80%+

Read the matrix: Champions are 92% in Core+Power Shoppers (they're broad-taste). One-and-Done is 84% in Casual Shoppers (rule catches them cleanly). Where Track A and Track B diverge — particularly around discount behaviour and premium-buying — those signals became overlays rather than segment-defining rules.

The seven design decisions

At Phase 5, we walked through seven decisions in dependency order. Each was anchored in the cross-tab evidence. Each is documented with rationale and reversibility notes.

01
Discount-Dependency stays an overlay (not a segment)
The "always discounts" cluster (988 buyers) cuts across Recency. Decision: sub-split the overlay into "coupon brought them in, didn't return" (812 buyers) vs "regular coupon redeemer" (315 buyers). Two distinct campaigns, no segment-list bloat.
02
Premium-buying split by recency
74% of premium-heavy buyers are lapsed. Decision: split the overlay into "active premium" (235 buyers, currently engageable) vs "lapsed premium" (671 buyers, requires win-back). Different campaigns; different cadence.
03
Breadth of taste stays an overlay
Two methods agree: broad-taste buyers map cleanly onto Core+Power clusters. Decision: keep as overlay. Three bands (narrow / wide / not applicable for one-shots), strongest positive-signal filter we have.
04
Core RFM bands stay calibrated as-is
Strong segment-cluster agreement validates the band cuts. Decision: no changes to the recency/frequency/monetary band boundaries — they're catching the right cohorts.
05
Drifting Regulars vs Slipping VIPs split by value
Original rule had an asymmetry: lapsed high-value buyers were "Slipping VIPs", but more-recent high-value buyers were "Drifting Regulars" — the wrong way around. Decision: reframe by value tier, not recency. 280 high-value buyers reclassified.
06
One-shot drifters absorbed asymmetrically
261 one-shot buyers at the edge of lapsing didn't fit existing rules. Decision: extend "One-and-Done" to catch them, but with an asymmetric monetary cap so we don't reshuffle existing classifications. Surgical, not sweeping.
07
Per-transaction FX precision deferred
Currency conversion at median historical rates is robust within 3% on every threshold. Decision: ship v1-final with median-rate FX; defer per-transaction precision to Phase 6 alongside the dashboard build, where the precision actually matters.

What we explicitly chose not to do

Discipline matters. Seven things we considered and dropped.

  • Spot-check buyer sign-off — the rubric ships on statistical merit + clustering cross-validation. Tracing 3-5 named buyers wouldn't have changed any decision.
  • A "premium subscription" overlay — the database flag's product meaning is unclear. Until clarified, it contributes nothing.
  • Sub-splitting "Long Gone" into 5-10 years vs 10+ years — defer until a campaign requires the distinction.
  • Promoting Discount-Dependency to a first-class segment — would override Champions/Loyal for buyers who happen to redeem coupons. Wrong trade.
  • Adding new segments for marginal commercial distinctions — held at 13. Every additional segment is a tax on Nina's mental model.
  • Per-transaction FX precision in the rubric — deferred. The 3% bound is well below band-boundary spacing.
  • Designer-affinity sub-segments — left for Phase 6+. Possible future overlay if specific designer campaigns need it.
Operational playbook · for Nina

How we use it.

The segmentation is the input, not the output. The output is a calmer, sharper marketing operation: who we email, how often, what we offer them, where we route them, and crucially — who we leave alone.

Priority tiers · what to activate first

Not all segments justify equal effort. The four-tier priority is a pragmatic ranking based on cohort size × per-buyer ARPU × likely conversion lift.

Tier 1 · activate now

The headline three

Slipping VIPs · Champions · New Starters
1,835buyers
Tier 2 · next quarter

Important, secondary

Loyal Regulars · New Big Spenders · Promising · Hibernating VIPs · Drifting Regulars
889buyers
Tier 3 · mass touch only

Light-touch tail

One-and-Done · Long Gone · Faded Regulars
6,496buyers
Tier 4 · separate

Different audience

Trend Report Audience
2,514buyers

Per-segment detail · click any segment to expand

Slice recipes · the cohorts you actually target

Where overlays earn their keep. These are the cuts where segment × overlay gives you a precision-targeted cohort that no single segment could.

Slice
Definition
Buyers
Purpose
Top Champions
Champions × very high engagement
72
Personalised VIP outreach. Mean spend £14K.
Active Champions
Champions × high engagement
194
Core retention + advocacy programme.
True VIP base
Champions + Loyal × high+ engagement
357
Tighter VIP than the 573 raw count.
High-signal winback
Slipping VIPs × broad-taste
467
Strongest single reactivation ROI.
Premium new release
Active segments × premium-heavy active
235
Premium drop announcements.
Premium win-back
Slipping/Hibernating × premium-heavy lapsed
671
Premium-only buyers historical reactivation.
Designer spotlight
Promising + New Starters × narrow-taste
~112
Highlight designers buyers already love.
Coupon trap recovery
Any × discount-acquisition one-shot
812
"You came via coupon, here's what's new."

Refresh cycle · how it stays alive

QuarterlyRubric refresh

Re-run the SQL view. Buyers shift between segments naturally as recency moves. ~10 minutes of work plus a dashboard refresh.

Semi-annuallyCluster check

Re-run Track B clustering. If the natural groupings have shifted, review whether the rules need adjustment. Not for reassignment — for honesty.

AnnuallyThreshold recalibration

Re-derive the breadth and exclusivity thresholds from the new buyer distribution. Slow-moving signals; annual is enough.

Worked example

A reactivation campaign for Slipping VIPs.

Step 1
Pull the cohort
Slipping VIPs total 1,099 buyers. Narrow to the broad-taste subset: 467 buyers. These are the highest-signal targets.
Step 2
Build a five-touch sequence over ten weeks
Slower cadence than the Catwalk template — these buyers are rebuilding, not converting active intent. Touches: personalised picks → trend report → designer spotlight → soft offer → final reminder.
Step 3
Hold the discount until week seven
These buyers historically pay full price. Lead with content (curated picks based on their past designers, season recap, new arrivals). Only introduce a 10% incentive if engagement is flat by week seven.
Step 4
Measure
Target KPI: 8-12% reactivation within 90 days. Mean revenue per reactivated buyer target £500+. Even at the floor, that's ~£44K recovered revenue from one campaign.
Step 5
Iterate
Buyers who engaged but didn't purchase → tighter follow-up cohort. Buyers who didn't open at all → next quarter's "deeper sleep" segment. The campaign feeds the segmentation as much as the segmentation feeds the campaign.
Implementation · for Engineering

What we need to build.

The segmentation is shippable today as static SQL. To make it operationally durable — quarterly refresh, dashboard, marketing-tool integration — there's a small engineering lift. None of it requires schema changes. Most is canonical patterns reused from existing infrastructure.

What we deliver as artifacts

Source-of-truth SQL

  • phase-5-rubric-v1-final.sqlCTE-based segmentation logic. Returns user_id → segment + RFM band + monetary value. ~150 lines, single MySQL query against existing tables.
  • phase-3-track-a-distributions.sqlDistribution queries that calibrated the band thresholds. Reproducible.
  • phase-3-5-followups.sqlDiagnostic queries (uncategorised bucket analysis, Design-only mean recalibration).

Reference data + analysis

  • cluster-assignments-final.csv9,212 rows. Per-buyer cluster assignment from Track B. Pseudonymous user_id only — no PII.
  • fx-rates.csvBank of England daily FX rates 2014-03-24 → 2026-04-17. Basis for all GBP normalisation.
  • final-segmentation-v1.mdHuman-readable spec. Segment definitions, slice recipes, refresh cadence.
  • decisions-log.mdPhase 5 design decisions with full rationale. The audit trail.

What needs to be built

Five engineering tasks, sized roughly. None require schema migrations.

01
Recurring SQL view: buyer_segments_current Materialised view (or scheduled table refresh) that runs the rubric SQL against live data. Output columns: user_id, segment, segment_family, monetary_band, frequency_band, recency_band, premium_tier, discount_tier, breadth_tier, engagement_tier. Indexed on user_id and segment.
~1 day
02
Looker Studio dashboard Connected to buyer_segments_current. Tabs: segment headcount over time, mean spend / frequency / recency by segment, overlay distribution within segments, period-over-period migration matrix, slice recipe quick-pulls.
~3 days
03
Per-buyer segment lookup endpoint Internal API or DB-backed lookup so the email tool, discount-code system, and Paperclip can answer "what segment is buyer X?" in real time. Read-only. Cache invalidates on the quarterly refresh.
~2 days
04
Discount code instrumentation Tag each discount code with intended target segment(s). Capture which segments redeem each code. Required to measure activation per segment — without it, we can't close the loop on campaign effectiveness.
~2 days
05
Per-transaction FX sensitivity check Build the per-transaction FX join from fx-rates.csv. Recompute segment assignments at per-transaction precision. Confirm the 3% bound holds in practice. One-off check, not ongoing.
~1 day

Maintenance cadence

WeeklyAuto refresh

The materialised view refreshes weekly. Buyers migrate naturally between segments as recency advances — no human intervention required.

Semi-annuallyCluster sanity check

Re-run the Track B clustering pipeline (Python venv, ~3 hours). Compare new cluster shapes to v1.1. Flag drift if any cluster shifts >15%.

AnnuallyThreshold recalibration

Re-derive R/F/M band quantiles from the latest buyer distribution. Update breadth and exclusivity overlay thresholds. Document changes in versioned doc.

Data dependencies

Source tables
users · transactions · line_items · products · discounts
Materialised view
buyer_segments_current
Consumers
Email tool · Discount system · Looker · Paperclip

All dependencies are on existing tables. No schema changes required. Two optional improvements would unlock additional analysis: a lightboxes.created_at column (currently missing — limits behavioural analysis of saved-design lifecycle), and a per-transaction FX rate field (would close the 3% precision gap permanently).

Mailchimp integration · putting segments into campaigns

Today, Mailchimp doesn't know about Patternbank's segmentation. Building a sync pipeline lets Nina target campaigns by segment and overlay directly inside the Mailchimp UI — same workflow she uses today, just with sharper audiences. No custom marketing tools required.

Stage 01

Tag model

Each buyer gets one segment tag, one family tag, up to four overlay tags, plus typed merge fields for spend, frequency, last purchase quarter.

Stage 02

Sync pipeline

Weekly Python job reads buyer_segments_current → calls Mailchimp API → upserts tags + merge fields. Runs in <5 minutes for ~12K buyers.

Stage 03

Saved Segments

Mailchimp Saved Segments configured to mirror the slice recipes from Tab 3. Nina selects "Slipping VIPs × Broad Taste" from a dropdown — no SQL, no manual list export.

Stage 04

Measurement loop

Mailchimp campaign metrics (open, click, conversion) flow back into the analytics view. Per-segment activation rate becomes measurable; the rubric stays honest.

What gets synced per buyer
Field
Type
Example values
segment
Tag
seg-slipping-vips · seg-champions · seg-new-starters ...
family
Tag
fam-heroes · fam-climbers · fam-slipping · fam-lost · fam-trend
premium_tier
Tag
prem-active · prem-lapsed · prem-mixed · prem-none
discount_tier
Tag
disc-never · disc-occasional · disc-acq-oneshot · disc-repeat
breadth_tier
Tag
breadth-narrow · breadth-wide · breadth-na
engagement_tier
Tag
eng-vhigh · eng-high · eng-mid · eng-low · eng-vlow
MEAN_SPEND
Merge · number
2894 · 6880 · 177 ...
LIFETIME_F
Merge · number
1 · 10 · 22 ...
LAST_Q
Merge · text
this-quarter · 9-20q-ago · 20q+-ago

Tags drive audience filtering (mutually exclusive within a tag family — a buyer is in exactly one segment, one family, one premium tier, etc). Merge fields drive personalisation tokens in copy and conditional content blocks.

Privacy + consent

Email is the join key — already in Mailchimp via existing opt-ins. Tags + merge fields are metadata about already-consented contacts. The pipeline only updates contacts who already exist in Mailchimp; never imports new contacts from the production DB. Buyers who delete their account in Patternbank get tags removed in the next sync. Standard Mailchimp data residency applies (EU or US, depending on account region).

Total effort estimate
~4 days
2 days sync script · 1 day Mailchimp configuration
1 day documentation for Nina (slice recipes → Saved Segment names)

Database improvements we'd recommend

The segmentation works on existing data. Several missing fields are limiting what we can do next — particularly around behavioural analysis. Three tiers, sized by what each unlocks.

Tier 1 · Unlocks new analysis
High leverage. Each one opens up a category of work we currently can't do.
lightboxes.created_at
lightbox_items.created_at
Currently missing. A buyer with 142 lightbox items might be currently engaged or might have lightboxed once five years ago — we can't distinguish. Adding timestamps unlocks: abandoned-lightbox win-back campaigns, lightbox-conversion funnel metrics, "stale wishlist" reactivation triggers, behavioural analysis of saved-design lifecycle. Highest single-leverage improvement.
follows.created_at
Currently missing. Designer-follow signals are stock-only — we know how many designers a buyer follows, not when they started. With timestamps: "newly following designer X" triggers, follow-engagement timeline, designer-affinity decay analysis. Pairs naturally with the lightbox improvement above.
products.set_to_premium_at
Premium status is currently a snapshot. A buyer who bought non-premium product X (later flagged premium) gets credited toward premium-share. A "when did this become premium" timestamp lets us score Exclusivity at purchase time, fixing a small but real bias in the overlay.
Tier 2 · Operational improvements
Make existing analysis faster, cleaner, more precise.
Per-transaction FX rate
Column on transactions, or date-indexed FX table
Currently we normalise at median historical rates — robust within 3% on every quantile, but not exact. Storing the actual FX rate at order time closes the gap permanently. Useful for revenue accounting; modest impact on segmentation. Worth doing alongside the Looker dashboard build (Phase 6 item).
users.first_purchase_at Denormalised column
Currently computed via MIN(transactions.created_at) — requires a self-join across ~12K users. Pre-computed column makes cohort-tenure queries instant and simplifies the engagement-rate overlay calculation.
Discount intent tagging
New target_segment field on discounts
Currently we know a discount was redeemed, not who it was meant for. Tagging each code with intended target segment(s) lets us measure activation rate per intended segment — closes the campaign-effectiveness loop. Without this, we're guessing whether a Slipping VIP campaign actually reactivated Slipping VIPs vs general customers.
Tier 3 · Nice to have
Quality-of-life. Defer until prioritised against other work.
users.buyer_status
Explicit enum
Currently "buyer" is inferred by absence of designer/admin/studio flags. An explicit enum (buyer / designer / admin / studio / hybrid) makes the universe filter unambiguous and supports future buyer types. Low priority — the inferred filter works.
baskets.abandoned_at
Explicit timestamp
Currently abandonment is inferred from absence of a corresponding transaction. An explicit timestamp simplifies the cart-abandonment workflow measurement (already half-built). Useful but not blocking.

Recommended sequencing: Tier 1 first (lightbox + follows timestamps especially — these are paired and likely require similar migrations). Tier 2 alongside the Phase 6 Looker dashboard work. Tier 3 when convenient.

Privacy & data handling

Defensive defaults

  • All persisted artifacts are aggregate-only. Segment-level counts, percentages, means. No per-buyer rows in any committed file.
  • Per-buyer cluster CSV uses pseudonymous integer user_id only. No emails, names, addresses, phone numbers.
  • The buyer_segments_current view stores user_id + segment tags only. No PII duplicated. Marketing tools query the view; they don't get the raw buyer table.
  • The DB connection used during Phase 1-5 is read-only via a dedicated pb_readonly account, accessed via SSH tunnel only. The credentials and tunnel can be revoked in under five minutes if ever required.
Live · 11,734 buyers · production data

Explore the segments.

Pick segments, layer overlays, simulate campaigns. Every count below comes from the v1-final rubric run on Patternbank's actual transaction history. Nothing is mocked.

All buyers
11,734
Pick segments and layer overlays to narrow the cohort. The simulator below uses whatever's selected.
£884Mean lifetime spend
4.1Mean purchases
28qMean quarters since last buy
Breakdown by segment
What this cohort represents

All 11,734 buyers across all 13 segments. Use the filters at left to narrow the cohort and surface the structure beneath.

Compared to the universe
Mean lifetime spend
£884
— universe baseline —
Mean purchases
4.1
— universe baseline —
Mean recency
28q
— universe baseline —
Composition by overlay

How the selected cohort distributes across the four overlay dimensions. Highlighted rows are over-represented (≥1.5×) compared to the universe average. Faded rows are under-represented.