Churn Prevention Scoring
Identifies customers at risk of churning 30-60 days before traditional signals appear. Proven to reduce churn by 40% in production (12% → 7.2% monthly churn in financial services deployment).
How It Works
Customer Activity Data → Churn Feature Engineering → Survival Model + XGBoost
→ 30/60/90-Day Risk Scores → CDP Retention Segments → Automated Outreach
Churn Definition Framework
Before building the model, define what "churn" means for your business:
| Business Type | Churn Definition | Observation Window |
|---|---|---|
| Subscription | Cancellation or non-renewal | 30 days post-renewal date |
| Transactional | No purchase in 2x average purchase cycle | Rolling 90-day window |
| Platform | Zero logins for 30+ days after being active | Rolling 30-day window |
| Hybrid | Composite: revenue drop >80% AND engagement drop >70% | 60-day window |
Feature Engineering
Leading Indicators (pre-churn signals)
-- Engagement decay: the single most predictive churn feature
SELECT
customer_id,
-- Engagement velocity (negative = declining)
SAFE_DIVIDE(
COUNTIF(event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)),
COUNTIF(event_date BETWEEN
DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
AND DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))
) - 1.0 AS engagement_velocity,
-- Support contact acceleration
COUNTIF(
event_type = 'support_contact'
AND event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY)
) AS recent_support_contacts,
-- Payment failure signals
COUNTIF(
event_type = 'payment_failure'
AND event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
) AS payment_failures_30d,
-- Feature usage breadth decline
COUNT(DISTINCT CASE
WHEN event_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
THEN feature_used END) AS features_used_30d,
COUNT(DISTINCT CASE
WHEN event_date BETWEEN
DATE_SUB(CURRENT_DATE(), INTERVAL 60 DAY)
AND DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
THEN feature_used END) AS features_used_prior_30d
FROM `project.analytics.customer_events`
GROUP BY customer_id
Top Churn Predictors (from production models)
- Engagement velocity — Rate of change in activity over time
- Support contact frequency — Increasing contacts = friction signal
- Feature usage contraction — Using fewer features than before
- Payment failures — Hard churn predictor
- Competitive exposure — Visits to competitor sites (if trackable)
- NPS/CSAT decline — Survey score drop from prior period
- Time-to-value stall — Not reaching activation milestones
Multi-Horizon Scoring
ConversionOS generates risk scores at three time horizons:
| Horizon | Model | Primary Action |
|---|---|---|
| 30-day risk | XGBoost classifier | Trigger automated retention journey |
| 60-day risk | Survival analysis (Cox PH) | Flag for personal outreach |
| 90-day risk | Ensemble (XGBoost + survival) | Adjust LTV forecasts, inform acquisition spend |
Retention Campaign Integration
{
"retention_triggers": {
"tier_1_critical": {
"condition": "churn_30d_score >= 0.8 AND ltv_tier = 'HIGH'",
"action": "personal_outreach",
"channel": "phone_call",
"sla": "24_hours"
},
"tier_2_elevated": {
"condition": "churn_30d_score >= 0.6",
"action": "automated_journey",
"channel": "email_sms",
"journey": "retention_winback_v3"
},
"tier_3_monitoring": {
"condition": "churn_60d_score >= 0.5 AND churn_30d_score < 0.6",
"action": "add_to_nurture",
"channel": "email",
"journey": "engagement_boost"
}
}
}
Production Results
From financial services deployment (anonymized):
| Metric | Before | After | Impact |
|---|---|---|---|
| Monthly churn rate | 12.0% | 7.2% | -40% |
| At-risk detection lead time | Reactive (post-churn) | 30-day predictive | +30 days |
| Retention campaign ROI | 1.2x | 3.8x | +217% |
| Annual revenue preserved | — | $4.2M | — |