# Churn Prediction Models: A No-ML Starter for SaaS Founders

> Build a working SaaS churn prediction model without machine learning. Signals, scoring, thresholds, and how to act on at-risk accounts before they cancel.
- **Author**: Ayush Agarwal
- **Published**: 2026-05-04
- **Category**: Retention, SaaS, Churn
- **URL**: https://dodopayments.com/blogs/churn-prediction-models-no-ml

---

Most churn prediction advice starts with "build a machine learning model." That advice is wrong for the first $10M of ARR. A simple weighted-signal model running on raw SQL outperforms naive ML implementations until you have enough labeled churn data to train against, which most SaaS companies do not.

This guide explains how to build a working churn prediction system without machine learning, using observable signals already in your billing and product data. The output is a per-customer risk score that triggers retention actions before customers cancel.

## Why No-ML Works for Most SaaS

Three reasons:

1. **You don't have enough labeled data.** ML models need thousands of churn events to train well. Most SaaS companies under $10M ARR have hundreds at most.
2. **Signal interpretability matters.** When a CSM asks "why is this account at risk?", "the model predicts it" is a non-answer. Weighted-signal models give you a clear breakdown of which signals drove the score.
3. **Operational simplicity.** A SQL view and a cron job is easier to maintain than an ML pipeline with feature stores, model retraining, and drift monitoring.

> Founders chase ML for churn prediction because it sounds sophisticated. The unglamorous truth is that 80 percent of the value comes from a weighted score on five obvious signals. Get that working first. ML can come later when you actually have the data.
>
> - Ayush Agarwal, Co-founder & CPTO at Dodo Payments

For broader retention context, see our companion guides on [reduce SaaS churn by 30 percent](https://dodopayments.com/blogs/reduce-churn-metrics-saas) and [involuntary churn from failed payments](https://dodopayments.com/blogs/involuntary-churn-failed-payments).

## The Five Signals That Predict Churn

These five signals predict churn for almost every B2B SaaS. The weights vary by product but the signal categories are consistent.

```mermaid
flowchart TD
    A[Customer Risk Score] --> B[Signal 1: Usage Decline]
    A --> C[Signal 2: Payment Health]
    A --> D[Signal 3: Engagement Depth]
    A --> E[Signal 4: Support Tone]
    A --> F[Signal 5: Plan Fit]
    B --> G[Weighted Sum]
    C --> G
    D --> G
    E --> G
    F --> G
    G --> H[Risk Score 0-100]
```

### Signal 1: Usage Decline

The strongest churn predictor. Customers who stop using your product cancel within 30 to 90 days.

**How to measure:**
- 30-day usage vs. 90-day rolling average
- Days since last meaningful action (login alone is not enough)
- Trend direction over the last 4 weeks (declining vs. stable vs. growing)

**Score weights:**
- Decline 50%+ vs 90-day avg: +30 points
- Decline 25-49%: +20 points
- Decline 10-24%: +10 points
- Stable or growing: 0 points

### Signal 2: Payment Health

Failed payments, expired cards, and dunning state strongly predict imminent churn.

**How to measure:**
- Card expiring within 30 days
- Most recent payment failed
- Number of dunning attempts in last 90 days
- Card brand changes (often indicates customer rebanking, often around churn)

**Score weights:**
- Card expired or failed (no recovery yet): +25 points
- Card expiring within 14 days: +15 points
- 2+ payment retries in last 90 days: +10 points
- Healthy: 0 points

For deeper payment-recovery patterns, see our [subscription dunning recovery sequence guide](https://dodopayments.com/blogs/subscription-dunning-recovery-sequence) and [revenue recovery for SaaS](https://dodopayments.com/blogs/revenue-recovery-saas).

### Signal 3: Engagement Depth

How deeply embedded is the customer? Shallow usage churns easily.

**How to measure:**
- Number of features used (more = stickier)
- Number of users on the account (B2B)
- Number of integrations connected (CRM, Slack, etc.)
- Volume of customer-created content (records, projects, files)

**Score weights:**
- Single user, 1-2 features, no integrations: +20 points
- Single user, 3+ features: +10 points
- Multi-user, multiple features, integrations: 0 points
- Deep engagement (5+ users, 5+ features, 2+ integrations): -10 points (negative because they're sticky)

### Signal 4: Support Tone

Customers escalating to support, asking pricing questions, or requesting refunds churn.

**How to measure:**
- Number of support tickets in last 60 days
- Sentiment of recent tickets (manual tagging or simple keyword matching: "cancel", "refund", "expensive", "not working")
- Time since last positive feedback (NPS, CSAT)

**Score weights:**
- Recent cancellation/refund mention: +25 points
- 3+ tickets in last 30 days with negative sentiment: +15 points
- 1-2 neutral tickets: 0 points
- No tickets or positive feedback: -5 points

### Signal 5: Plan Fit

Customers on the wrong plan churn either up (to better-fit) or out (to a competitor).

**How to measure:**
- Usage vs. plan limits (under-utilization or chronic overage)
- Plan tier changes in last 90 days
- Months on current plan
- Pricing tier vs. industry benchmark

**Score weights:**
- Chronic overage with no upgrade: +15 points (frustrating)
- Severe under-utilization (using less than 20% of allowance): +20 points (overpaying)
- Recent downgrade: +10 points
- Plan fits well: 0 points

## The Combined Risk Score

Sum the weighted signals. The result is a 0-100 risk score:

| Score | Risk Level | Action |
|---|---|---|
| 0-20 | Healthy | No action |
| 21-40 | Watch | Add to monitoring list |
| 41-60 | Elevated | Trigger automated re-engagement |
| 61-80 | High | Manual outreach (CSM in B2B, founder in early-stage) |
| 81-100 | Critical | Save flow with offers, executive escalation |

In practice, the distribution will be heavily weighted toward the low end. A typical SaaS will see 70-80% in healthy, 15-20% in watch, and 5-10% in elevated or above.

## Implementation: SQL Walkthrough

Here is a simplified version of the scoring query. Adapt to your schema.

```sql
WITH usage_signal AS (
  SELECT
    customer_id,
    CASE
      WHEN events_30d / NULLIF(events_90d / 3.0, 0) < 0.5 THEN 30
      WHEN events_30d / NULLIF(events_90d / 3.0, 0) < 0.75 THEN 20
      WHEN events_30d / NULLIF(events_90d / 3.0, 0) < 0.9 THEN 10
      ELSE 0
    END AS usage_score
  FROM customer_events_aggregated
),
payment_signal AS (
  SELECT
    customer_id,
    CASE
      WHEN last_payment_failed AND failed_at > NOW() - INTERVAL '7 days' THEN 25
      WHEN card_expires_at < NOW() + INTERVAL '14 days' THEN 15
      WHEN dunning_attempts_90d >= 2 THEN 10
      ELSE 0
    END AS payment_score
  FROM customer_billing
),
engagement_signal AS (
  SELECT
    customer_id,
    CASE
      WHEN num_users = 1 AND num_features_used <= 2 AND num_integrations = 0 THEN 20
      WHEN num_users = 1 AND num_features_used >= 3 THEN 10
      WHEN num_users >= 5 AND num_features_used >= 5 THEN -10
      ELSE 0
    END AS engagement_score
  FROM customer_engagement
)
SELECT
  c.customer_id,
  COALESCE(u.usage_score, 0) +
  COALESCE(p.payment_score, 0) +
  COALESCE(e.engagement_score, 0)
  AS risk_score
FROM customers c
LEFT JOIN usage_signal u ON c.customer_id = u.customer_id
LEFT JOIN payment_signal p ON c.customer_id = p.customer_id
LEFT JOIN engagement_signal e ON c.customer_id = e.customer_id
WHERE c.subscription_status = 'active'
ORDER BY risk_score DESC;
```

Run this nightly. Output to a `customer_risk_scores` table. Trigger downstream actions based on score thresholds.

## What to Do With the Scores

A score is useless without an action. Map each risk band to a specific intervention.

### Watch (21-40)

Add to monitoring dashboards. No active intervention. Re-evaluate weekly. Most accounts in this band will return to healthy without intervention.

### Elevated (41-60)

Trigger automated re-engagement:
- Personalized email featuring under-used features
- In-app banner highlighting unused parts of the product
- If applicable, an offer for a free training session

Effort: low. Expected lift: 10-15% of accounts return to healthy.

### High (61-80)

Manual outreach by CSM (in B2B) or founder (in early-stage SaaS). The conversation should:
1. Acknowledge their reduced engagement without being defensive
2. Ask what changed
3. Offer specific help (training, plan change, integration)
4. Not ask "are you happy with us?" - that signals trouble

Expected lift: 30-50% of accounts return to healthy with a real conversation.

### Critical (81-100)

Trigger save flow:
- Discount offer (typically 20-30% for 3-6 months)
- Plan downgrade option
- Pause subscription instead of cancel
- Executive (founder) call

Expected lift: 20-40% of accounts saved despite high churn risk.

For more on this last category, see our companion piece on [revenue recovery for SaaS](https://dodopayments.com/blogs/revenue-recovery-saas).

## When to Move to ML

The no-ML scoring model breaks down at scale. Move to machine learning when:

- You have 1,000+ labeled churn events to train on
- You have 50+ candidate signals (not just the 5 above)
- You have engineers who can maintain an ML pipeline
- The marginal lift from ML is worth the engineering cost (typically 10-20% better precision than weighted scoring)

For most SaaS companies, this happens past $5M ARR. Below that, the weighted-signal model is more valuable than any ML implementation.

## Common Mistakes

Patterns that make churn prediction useless:

- **Single signal scoring.** Weighting only usage misses payment-driven and engagement-driven churn.
- **Lagging indicators only.** "Customer hasn't logged in for 30 days" is too late. Use leading indicators (usage trend, support tone).
- **No action mapping.** Building the score without a corresponding action plan is theater.
- **Threshold drift.** The thresholds need to be tuned to your customer base. What's "high risk" in one SaaS is "watch" in another.
- **Ignoring B2C nuance.** Per-account scores don't apply when you have one user per account. B2C scoring is per-user, not per-account.

> Churn prediction is operations, not data science. The teams that lower churn the most are the ones that built a working prediction model and operationalized the response. The model is 20 percent of the value. The action plan is 80 percent.
>
> - Rishabh Goel, Co-founder & CEO at Dodo Payments

## Tooling

You can build this entirely on your existing stack:

- **Data warehouse** (Postgres, BigQuery, Snowflake) for the scoring query
- **Cron job or workflow tool** (Airflow, Dagster, n8n, GitHub Actions) for nightly runs
- **CRM or Customer.io** for triggering automated actions on score changes
- **Slack or email** for CSM notifications on high-risk accounts
- **Customer portal** that surfaces score-driven recommendations to customers (in advanced setups)

For implementation patterns on the customer-portal side, see the [customer portal documentation](https://docs.dodopayments.com/features/customer-portal).

## How Dodo Payments Helps With Churn Prediction

Dodo Payments provides the payment-health signals that drive Signal 2 in the model:

- Webhook events for every billing state change
- Real-time card expiration data via API
- Subscription status, dunning attempt history, and retry results
- Customer engagement data through the embedded customer portal
- Pause and downgrade options for save flows
- Full Merchant of Record coverage so global tax compliance doesn't drag retention efforts

For implementation patterns, see the [subscription dunning](https://docs.dodopayments.com/features/recovery/subscription-dunning) and [abandoned cart recovery](https://docs.dodopayments.com/features/recovery/abandoned-cart-recovery) feature documentation, plus the [webhooks documentation](https://docs.dodopayments.com/developer-resources/webhooks) for event streams.

## FAQ

### Do I need machine learning to predict SaaS churn?

No. A weighted-signal model running on raw SQL outperforms naive ML implementations for most SaaS companies under $10M ARR. ML becomes useful when you have 1,000+ labeled churn events, 50+ candidate signals, and engineering capacity to maintain a pipeline. Until then, simple scoring is the right call.

### What's the most predictive churn signal?

Usage decline, by a significant margin. Customers who stop using your product cancel within 30 to 90 days in almost every SaaS. The next strongest signals are payment health (failed payments, expiring cards) and support tone (escalations, refund requests).

### How often should I run churn prediction?

Nightly is sufficient for most SaaS. The signals don't change fast enough to warrant real-time scoring. The exception is payment-related signals, which should trigger immediate action when a payment fails or a card expires.

### How do I act on churn predictions?

Map each risk band to a specific action: monitoring (low risk), automated re-engagement (medium), manual outreach (high), save flow (critical). The score is only valuable if it drives action. Without that mapping, you're building dashboards instead of reducing churn.

### Can a Merchant of Record help with churn prediction?

Yes, indirectly. A Merchant of Record like Dodo Payments handles the payment-health signals (failed payments, dunning, retries) automatically, recovers a large fraction of involuntary churn before it becomes voluntary churn, and provides webhook data that feeds into Signal 2 of the scoring model.

## The Takeaway

Churn prediction does not require machine learning to deliver real value. A weighted-signal model on five core signals (usage decline, payment health, engagement depth, support tone, plan fit) catches 80 percent of at-risk accounts.

Build the scoring query. Operationalize the action plan. Iterate on thresholds based on what you learn. Move to ML only when the data and the engineering capacity justify it.

If you want a billing platform that surfaces the payment-health signals natively, [Dodo Payments](https://dodopayments.com) ships them via webhooks and the dashboard. See the [pricing page](https://dodopayments.com/pricing) and [subscription dunning documentation](https://docs.dodopayments.com/features/recovery/subscription-dunning).
---
- [More Retention articles](https://dodopayments.com/blogs/category/retention)
- [All articles](https://dodopayments.com/blogs)