Skip to main content

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 TypeChurn DefinitionObservation Window
SubscriptionCancellation or non-renewal30 days post-renewal date
TransactionalNo purchase in 2x average purchase cycleRolling 90-day window
PlatformZero logins for 30+ days after being activeRolling 30-day window
HybridComposite: 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)

  1. Engagement velocity — Rate of change in activity over time
  2. Support contact frequency — Increasing contacts = friction signal
  3. Feature usage contraction — Using fewer features than before
  4. Payment failures — Hard churn predictor
  5. Competitive exposure — Visits to competitor sites (if trackable)
  6. NPS/CSAT decline — Survey score drop from prior period
  7. Time-to-value stall — Not reaching activation milestones

Multi-Horizon Scoring

ConversionOS generates risk scores at three time horizons:

HorizonModelPrimary Action
30-day riskXGBoost classifierTrigger automated retention journey
60-day riskSurvival analysis (Cox PH)Flag for personal outreach
90-day riskEnsemble (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):

MetricBeforeAfterImpact
Monthly churn rate12.0%7.2%-40%
At-risk detection lead timeReactive (post-churn)30-day predictive+30 days
Retention campaign ROI1.2x3.8x+217%
Annual revenue preserved$4.2M