Skip to content
Back to Growth & Acquisition

Churn Prediction

Build a model that scores each user's churn risk from behavioral signals, so you can intervene before they leave.

Why

Churn is 5-10x cheaper to prevent than to recover — a user who gets a timely intervention (a check-in email, a feature tip, a human reach-out) at the first churn signal retains at 2-3x the rate of one who gets nothing. The behavioral signals of churn are well-known and measurable: declining session frequency, dropping core-action rate, support ticket escalation, key-person leaving the customer account. A churn model scores each user daily from these signals, producing a ranked list that tells the customer success team exactly who to contact this week and why. Without a model, CS contacts accounts randomly (or only the loudest ones) and the quiet churners — who are the majority — leave before anyone notices. The model also quantifies which signals predict churn best, which tells product what to fix to reduce the baseline.

When

When you have 1000+ users and 6 months of churn history to train on. Retrain monthly as behavior patterns shift.

How

1. Define churn: for SaaS, 'no session in 30 days' or 'downgraded to free'; for consumer, 'no session in 7 days'
2. Pull 6 months of user behavior: session frequency, core-action rate, feature usage breadth, support tickets, last-active days
3. Label historical users as churned (1) or retained (0) at the 30-day mark; this is your training target
4. Train a simple model (logistic regression is fine to start) on the behavioral features; skip deep learning until you have 100k+ users
5. Score every active user daily; output a ranked list of top-100 highest-risk users with their top-3 risk signals
6. Route the top-20 to customer success for human reach-out this week; route rank 21-100 to an automated email intervention
7. Track intervention outcomes: did the contacted user retain at 30d? which interventions work for which signals?
8. Retrain monthly; as the product changes, the churn-predictive signals shift, and a stale model misranks

Example

# Churn model features (logistic regression)
- sessions_last_7d (count)
- core_actions_last_7d (count)
- feature_breadth (distinct features used in 30d)
- days_since_last_active
- support_tickets_open
- plan_downgrade_in_last_30d (bool)
- key_person_left (bool, for B2B)

# Daily score output (top 5 of 100)
user_123  risk=0.82  signals: sessions↓42%, core_action↓60%, days_inactive=12
user_456  risk=0.78  signals: support_ticket=3_open, days_inactive=9
user_789  risk=0.74  signals: feature_breadth↓2→1, plan_downgrade=true
user_012  risk=0.71  signals: key_person_left=true, sessions↓30%
user_345  risk=0.68  signals: core_action↓50%, days_inactive=8

# Intervention routing
top-20 (risk > 0.65): human CS reach-out this week
21-100 (risk 0.4-0.65): automated "we miss you" email + feature tip

# Outcome tracking (this month)
Contacted 80 users → 52 retained at 30d (65%) vs 18% for uncontacted
→ intervention is 3.6x effective; expand to top-40 human reach-out

Common Problems

  • ⚠Starting with a deep learning model when logistic regression on 6 features would do; the complexity delays launch by months.
  • ⚠Contacting only the loudest at-risk accounts (the ones who complain) while the quiet churners leave silently.
  • ⚠Not tracking intervention outcomes, so the CS team keeps using an intervention that doesn't actually retain.
  • ⚠Never retraining the model; the signals that predicted churn in January don't predict it in June after a product change.

Best Practices

  • ✓Start with logistic regression on 6-8 behavioral features; it's interpretable, fast to ship, and usually 90% as accurate as deep learning.
  • ✓Route the top-20 to human CS and 21-100 to automated email; the human touch is 3x more effective but doesn't scale to 100/week.
  • ✓Track intervention outcomes per signal type; this tells you which interventions work for which churn reason.
  • ✓Retrain monthly; churn-predictive signals shift as the product changes, and a stale model misranks within 2 months.