TechStack
Product Deep Dives 8 min read · April 25, 2026

Per-Client Churn Prediction: Why '90 Days' Is the Wrong Threshold for Every Business.

Every retention tool flags dormant clients at 60, 90, or 180 days. That threshold is wrong for almost every single client. Here's the math behind per-client cadence scoring — and why it finds drifters 6 to 10 weeks earlier than threshold-based tools.

Close-up of data on a screen with a blurred dashboard chart behind

Open any retention tool — Weave, Solutionreach, Mailchimp Automations, HubSpot, whatever — and you’ll find the same setting: “Flag a client as dormant after X days of inactivity.” The user picks 60, or 90, or 180, and that becomes the threshold for every client in the system.

That threshold is the lazy tax. It’s wrong for basically every client, and it’s why reactivation tools built on it quietly miss the window to save the best relationships.

Here’s the math behind doing it right.

The problem with thresholds

A single threshold assumes every client has the same cadence. They don’t. Consider two clients at your med spa:

  • Rachel books a monthly HydraFacial. She’s a “VIP monthly regular” — last visit 5 weeks ago.
  • Michelle books Botox every 12 weeks. She’s a quarterly client — last visit 11 weeks ago.

Under a 90-day threshold, neither of them is flagged. Both look fine.

Under a 60-day threshold, Rachel is flagged. Michelle is fine.

Under a 30-day threshold, both are flagged — and you’re spamming your whole monthly base with “we miss you” emails every five weeks.

None of these thresholds is correct. Rachel is drifting (she’s 1 week past her normal rhythm). Michelle is dead on schedule. The correct answer requires knowing Rachel’s cadence and Michelle’s cadence separately.

What “personal cadence” actually means

Every client, if they’ve been with you long enough, has a personal rhythm:

  • A median inter-visit gap (their normal spacing)
  • A standard deviation around that gap (how consistent they are)

You compute those two numbers from their visit history. That’s it. Rachel’s median gap is 28 days with a std of 6 days. Michelle’s median gap is 84 days with a std of 14 days.

Now you can ask a much better question than “have they been gone for 90 days?” You can ask:

Is this client’s current gap more than one standard deviation beyond their personal rhythm?

That’s a z-score. For Rachel at week 5: (35 − 28) / 6 = +1.2σ. Slightly stretched. For Michelle at week 11: (77 − 84) / 14 = −0.5σ. She’s still within her normal range.

A z-score above +1 means they’re drifting. Above +2 is concerning. Above +3 they’re probably gone.

What to do when you don’t have enough history

The honest answer: you can’t compute a personal cadence from one or two visits. If a client has only been in three times, you don’t know their rhythm yet — you just have a hint.

This is where peer priors come in. Instead of being wrong with thin data, you blend the client’s personal history with a segment-level average (median gap for monthly HydraFacials, for quarterly tox, for 6-month dental hygiene, etc.) — and you weight the personal history more heavily the more visits you have.

This is called empirical Bayes. The formula:

expectedGap = (nVisits / (nVisits + K)) × personalMedian + (K / (nVisits + K)) × peerPrior

Where K is a “strength” parameter — how much peer data it takes before we start trusting the personal median. In practice, K around 5 works well: personal rhythm dominates after 5 visits, peer prior dominates before.

Now even a new client gets a reasonable drift score — calibrated to their industry segment, not a dumb threshold.

What to do about seasonality

Some clients are seasonal. The client who books 3 laser sessions every spring and disappears every November isn’t drifting — they have a pattern that repeats annually.

A threshold-based system flags her every December as “dormant.” A cadence-based system with seasonality correction doesn’t, because it sees that December is historically her quiet month.

The correction is straightforward: count each client’s monthly activity. If they’re typically in <30% of their normal activity for the current month of the year, grant seasonality relief (dampen the drift score). It’s crude but it prevents crying wolf.

What to do about trend

Two clients can have the same current gap and the same historical median — but one is trending away from their rhythm (gaps slowly lengthening) and one is trending back toward it. They’re not the same risk.

The fix: compare the median of the last 3 gaps to the median of their prior gaps. If recent ≥ 1.3× prior, that’s a stretching trend — add to the drift score.

This catches the client whose cadence is quietly sliding from 4 weeks → 5 → 6 → 7, long before a threshold would trigger. By the time a threshold fires, they’re already gone.

Putting it together: a score you can explain

A good per-client drift score has four components:

  1. Cadence drift — z-score of current gap vs expected gap (blended personal + peer)
  2. Trend penalty — stretching in recent gaps
  3. Seasonality relief — subtract if this is their historically quiet month
  4. Confidence dampening — if we have too little history (<3 visits), widen the uncertainty band so we don’t cry wolf

Map the final score to 0–100 and bucket into bands:

  • 0–20: On cadence — leave alone
  • 21–40: Stretched — warm touch next week
  • 41–60: Drifting — intervene this week
  • 61–80: High drift — last-chance outreach
  • 81–100: Likely gone — send a handwritten goodbye or let them go

Every score comes with drivers — plain-English explanations like “9 weeks overdue on a 5-week personal rhythm, 2.5× typical variation” or “seasonal low period; historically quiet in April.” The score is useless if you can’t explain it; driver strings are what make the model trustworthy.

Why this changes outreach timing

A threshold-based system catches clients on average 6 to 10 weeks after they actually started drifting. The personalized cadence model catches them within 1–2 weeks of the first sign of stretching.

That window matters. Two data points from practices we’ve worked with:

  • Reactivation conversion rate at week 2 of drift: 58%. They’re still in-habit; a gentle text brings most of them back.
  • Reactivation conversion rate at week 12 of drift: 16%. They’ve settled into a non-booking pattern; you need a much bigger intervention to move them.

Catching them earlier doesn’t just save more clients. It saves them with lighter outreach — warmer, cheaper, less discount-heavy.

The uncomfortable fact about threshold-based tools

Your current retention tool — if it uses thresholds — is structurally worse than doing this correctly. It’s not just a different approach. It mathematically can’t achieve what a personalized cadence model achieves, because it’s trying to solve with one variable what actually requires three (personal rhythm, variance, seasonality).

Most vendors don’t build personalized cadence models because it’s a harder engineering problem and their product teams optimize for “messages sent,” not “revenue recovered.” Thresholds are easier to explain and easier to ship.

What this looks like with Retention IQ

Retention IQ’s Drift Radar runs this exact model — empirical Bayes cadence with peer priors calibrated per industry (hair color, medspa tox, dental hygiene, massage wellness, refinance contact cadence, etc.), seasonality correction, trend detection, confidence dampening. Every client gets a daily-updated 0–100 score with plain-English drivers.

Every score is explainable. Owners sort their book by drift score every morning and work top-down. Reactivation conversion rates run 2–3× higher than threshold-based systems in head-to-head tests.

If your current tool is still asking you to pick a dormancy threshold, book a 15-minute demo and we’ll run Drift Radar on a sample of your actual book — you’ll see which of your clients are already drifting that your current system is going to miss by another 6 weeks.

See what your book is hiding.

Grab 15 minutes on our calendar. We'll show you the product, run your numbers on real sample data, and answer the questions that matter for your practice.

15 minutes · no sales pitch Works with your booking platform