The churn score is not a single calculation. It is a dynamic position marker that reflects where each customer sits within their personal purchase rhythm.
The key insight: 60 days without a purchase means something completely different for a customer who buys every 20 days versus one who buys every 90 days. Fixed thresholds treat all customers identically. The multiplier model respects individual purchase rhythm.
For every customer, the system calculates days_since_last_order against avg_repurchase_days:
| Threshold | Calculation |
|---|---|
| ACTIVE | days_since <= avg × 1.5 |
| AT_RISK | days_since <= avg × 2.5 |
| LAPSED | days_since <= avg × 4.0 |
| CHURNED | days_since > avg × 4.0 |
| Stage | Score Calculation |
|---|---|
| NEW | Fixed score: 5 |
| ACTIVE | floor((days_since / avg) × 15), capped at 20 |
| AT_RISK | 60 + floor(((days_since − avg×1.5) / avg) × 20), capped at 82 |
| LAPSED | 85 + floor((days_since / avg) × 2), capped at 94 |
| CHURNED | Fixed score: 96 |
| Trigger Condition | Intervention Type | Action |
|---|---|---|
| New order placed by existing customer | post_purchase | Warm confirmation + product usage tip |
| Customer crosses ACTIVE → AT_RISK | at_risk | Check-in email referencing their last product |
| Customer crosses AT_RISK → LAPSED | win_back | 20% off discount with 7-day urgency |
| Customer crosses LAPSED → CHURNED | win_back | Final win-back attempt |
| Refund event received | refund_save | Empathetic outreach offering to resolve the issue |
For every ACTIVE and AT_RISK customer, the dashboard calculates days remaining before crossing into the next danger zone:
This produces the Churn Countdown panel — a ranked list of the most urgent customers sorted by how many days remain before they cross the threshold. This is where the money is.