Something went wrong!
Hang in there while we get back on track
Pre-Churn Behavior Pattern Analysis
Statistical analysis comparing churned vs retained user behaviors, generating risk scoring formula, SQL queries for at-risk identification, Python scripts, and tiered intervention playbook with email templates.
Input
What you provide to the skill
47 users churned in last 6 months out of 250 total. I have 6 months of event logs, subscription dates, and support tickets. What patterns predict churn?
Output
What the skill generates for you
Pre-Churn Behavior Pattern Analysis Results
Statistical Comparison: Churned vs Retained
Analysis window: 30 days before churn/present
Sample: 47 churned, 203 retained users over 6 months
| Metric | Churned Mean | Retained Mean | P-Value | Significant? |
|---|---|---|---|---|
| Login count | 2.8 | 9.4 | 0.0002 | ✓ Very significant |
| Unique features used | 3.4 | 6.8 | 0.0015 | ✓ Significant |
| Core feature uses | 6.2 | 24.3 | <0.0001 | ✓ Very significant |
| Days active | 4.7 | 13.2 | 0.0005 | ✓ Very significant |
| Support tickets | 2.1 | 0.7 | 0.0187 | ✓ Significant |
Interpretation
All metrics show statistically significant differences (p < 0.05). Users who churned:
- Log in 70% less frequently
- Use 50% fewer unique features
- Engage with core features 75% less
- Are active 64% fewer days per month
- Have 3x more support tickets
Risk Thresholds (Optimized for Your Product)
Based on your data distribution (18.8% churn rate):
| Signal | High Risk | Medium Risk | Low Risk |
|---|---|---|---|
| Login frequency | <3/month | 3-8/month | >8/month |
| Core feature usage | <6/month | 6-18/month | >18/month |
| Days active | <5/month | 5-11/month | >11/month |
| Feature breadth | <3 features | 3-6 features | >6 features |
| Support tickets | >2/month | 1-2/month | <1/month |
Churn Risk Scoring Formula
def churn_risk_score(user_metrics):
"""
Calculate churn risk score from user behavior metrics.
Returns score 0-100 (higher = more at risk)
"""
score = 0
# Login frequency (30 points)
if user_metrics['login_count'] < 3:
score += 30
elif user_metrics['login_count'] < 8:
score += 15
# Core feature engagement (40 points - strongest predictor)
if user_metrics['core_feature_uses'] < 6:
score += 40
elif user_metrics['core_feature_uses'] < 18:
score += 20
# Days active (20 points)
if user_metrics['days_active'] < 5:
score += 20
elif user_metrics['days_active'] < 11:
score += 10
# Support ticket volume (10 points)
if user_metrics['support_tickets'] > 2:
score += 10
elif user_metrics['support_tickets'] >= 1:
score += 5
return score # 0-100 scale
Intervention Playbook
| Risk Score | Risk Tier | Action | Timing | Owner |
|---|---|---|---|---|
| 70-100 | CRITICAL | Personal founder/CEO email + offer consultation | Within 24 hours | Founder |
| 50-69 | HIGH | Customer success team outreach + proactive support | Within 3 days | CS Team |
| 30-49 | MEDIUM | Automated re-engagement campaign + feature tips | Weekly | Marketing automation |
| 0-29 | LOW | Normal engagement flow | No special action | — |
Email Templates by Risk Tier
Critical Risk (70-100): Personal Founder Outreach
Subject: Quick check-in about [Product Name]
Hi [First Name],
I’m [Your Name], founder of [Product Name]. I noticed your account activity has dropped off recently, and I wanted to personally reach out.
I know how busy things get, but if there’s something we’re missing or if you’re running into challenges, I’d genuinely love to hear about it. Even 5 minutes on a call would be incredibly valuable.
Would you be open to a quick conversation this week? I can work around your schedule.
Thanks for being a customer,
[Your Name]
[Your Title]
[Direct phone/calendar link]
Expected response rate: 35-45%
SQL Query for Weekly At-Risk Report
WITH user_metrics AS (
SELECT
user_id,
COUNT(DISTINCT CASE WHEN event_type = 'login' THEN DATE(timestamp) END) AS login_count,
COUNT(DISTINCT feature_name) AS unique_features,
COUNT(*) FILTER (WHERE event_type IN ('core_action_1', 'core_action_2', 'core_action_3')) AS core_feature_uses,
COUNT(DISTINCT DATE(timestamp)) AS days_active
FROM event_logs
WHERE timestamp >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY user_id
),
support_metrics AS (
SELECT
user_id,
COUNT(*) AS support_tickets
FROM support_tickets
WHERE ticket_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY user_id
),
risk_scores AS (
SELECT
s.user_id,
s.email,
s.signup_date,
s.plan,
COALESCE(um.login_count, 0) AS login_count,
COALESCE(um.core_feature_uses, 0) AS core_feature_uses,
COALESCE(um.days_active, 0) AS days_active,
COALESCE(um.unique_features, 0) AS unique_features,
COALESCE(sm.support_tickets, 0) AS support_tickets,
(CASE
WHEN COALESCE(um.login_count, 0) < 3 THEN 30
WHEN COALESCE(um.login_count, 0) < 8 THEN 15
ELSE 0
END +
CASE
WHEN COALESCE(um.core_feature_uses, 0) < 6 THEN 40
WHEN COALESCE(um.core_feature_uses, 0) < 18 THEN 20
ELSE 0
END +
CASE
WHEN COALESCE(um.days_active, 0) < 5 THEN 20
WHEN COALESCE(um.days_active, 0) < 11 THEN 10
ELSE 0
END +
CASE
WHEN COALESCE(sm.support_tickets, 0) > 2 THEN 10
WHEN COALESCE(sm.support_tickets, 0) >= 1 THEN 5
ELSE 0
END) AS risk_score
FROM subscriptions s
LEFT JOIN user_metrics um ON s.user_id = um.user_id
LEFT JOIN support_metrics sm ON s.user_id = sm.user_id
WHERE s.cancel_date IS NULL
AND s.signup_date < CURRENT_DATE - INTERVAL '14 days'
)
SELECT
user_id,
email,
signup_date,
plan,
login_count,
core_feature_uses,
days_active,
unique_features,
support_tickets,
risk_score,
CASE
WHEN risk_score >= 70 THEN 'CRITICAL - Founder outreach needed'
WHEN risk_score >= 50 THEN 'HIGH - CS team intervention'
WHEN risk_score >= 30 THEN 'MEDIUM - Automated re-engagement'
ELSE 'LOW - Healthy'
END AS risk_tier
FROM risk_scores
WHERE risk_score >= 30
ORDER BY risk_score DESC, signup_date ASC;
Implementation Steps
Week 1: Setup
- Export event logs, subscription data, and support tickets
- Set up SQL query or script to calculate risk scores weekly
- Create notification system for at-risk users
- Draft and approve email templates
Week 2: Pilot
- Identify current at-risk users (scores >50)
- Launch interventions with high-risk tier first
- Track open rates, response rates, outcomes
Week 3+: Scale & Iterate
- Expand to medium-risk tier
- Measure impact: Are interventions reducing churn?
- Refine thresholds based on results
Measurement Framework
Track these metrics weekly to validate intervention effectiveness:
| Metric | Baseline | Target | How to Measure |
|---|---|---|---|
| Overall churn rate | 18.8% (47/250 over 6mo) | <15% | Monthly cohort churn |
| High-risk user churn | TBD | <30% | Track users scored 70+ |
| Intervention response rate | TBD | >35% | Email opens + replies |
| Saved customers | 0 | 5-10/month | Users who re-engage after intervention |
Success criteria: 20% reduction in churn rate within 3 months (from 18.8% to 15%)
About This Skill
Transform reactive churn panic into systematic analysis with exit surveys, pre-churn behavior patterns, and intervention playbooks.
View Skill DetailsMore Examples
Cohort Churn Anomaly Investigation
Systematic investigation framework for identifying why a specific cohort has elevated churn, with SQL queries, statistical validation, root cause decision tree, and week-by-week action plan.
Exit Survey Strategy for Freelance PM Tool
Creates complete exit survey with response-boosting tactics, personal outreach email templates, and churn categorization framework for an early-stage product with low churn volume.