0/70 completed
Business Framework Interactive

Churn Prediction

Identify users likely to leave before they do. Enable proactive retention interventions for high-value customers at risk.

๐Ÿ’ฐ Why Churn Matters

5-25x

Cost to acquire new customer vs retain existing

5%

Retention improvement can increase profit by 25-95%

60%

Of churn can be prevented with timely intervention

User Behavior

Days Since Last Bet 7
0 30
Bets Per Week (avg) 5
0 20
Recent Win Rate (%) 45
30 70

Account Info

Avg Bet Size ($) 25
5 200
Deposits (Last 30 Days) 2
0 10
Account Age (Days) 90
1 365

๐Ÿ“Š Churn Risk Assessment

10%
Churn Probability
Low Risk
Risk Classification
Low (0-30%)
Medium (30-60%)
High (60%+)

Cohort Survival Curve

Initial: 1,000 users 12-Week Retention: 41.4%

๐Ÿ” Churn Drivers (Feature Importance)

Inactivity (days)
35%
Days since last bet
Losing streak
25%
Recent win rate below average
Low engagement
20%
Bets/week declining
No deposits
15%
No deposits in 30 days
New user
5%
Account < 30 days old

๐ŸŽฏ Intervention Strategies

Inactive 5+ days

+15% retention

Push notification with personalized pick

Losing streak (3+ losses)

+25% retention

Free bet or odds boost on next wager

High churn score + high LTV

+40% retention

Personalized outreach / VIP offer

Declining bet frequency

+10% retention

Feature highlight or new market promo

๐Ÿ”ง Model Features

Activity Features

  • โ€ข Days since last bet
  • โ€ข Bets per week (rolling)
  • โ€ข Session frequency
  • โ€ข Time in app

Financial Features

  • โ€ข Win rate (recent vs lifetime)
  • โ€ข Deposit frequency
  • โ€ข Average bet size
  • โ€ข Withdrawal behavior

Engagement Features

  • โ€ข Feature adoption
  • โ€ข Notification response
  • โ€ข Promo usage
  • โ€ข Support tickets

R Code Equivalent

# Churn prediction model
library(tidymodels)

# Prepare features
churn_data <- users %>%
  mutate(
    days_inactive = as.numeric(Sys.Date() - last_bet_date),
    bets_per_week = total_bets / account_age_weeks,
    recent_win_rate = wins_last_30 / bets_last_30,
    churned = ifelse(days_inactive > 30, 1, 0)
  )

# Train model
churn_model <- logistic_reg() %>%
  set_engine("glm") %>%
  fit(churned ~ days_inactive + bets_per_week + recent_win_rate + 
      deposits_30d + account_age, data = churn_data)

# Score users
predictions <- predict(churn_model, new_users, type = "prob")

# Prioritize interventions
at_risk <- new_users %>%
  bind_cols(predictions) %>%
  filter(.pred_1 > 0.6) %>%
  arrange(desc(ltv * .pred_1))  # Impact = LTV ร— churn prob

โœ… Key Takeaways

  • โ€ข Inactivity is the #1 churn predictor
  • โ€ข Losing streaks accelerate churn
  • โ€ข Intervene BEFORE users leave
  • โ€ข Prioritize by LTV ร— churn probability
  • โ€ข Test intervention effectiveness
  • โ€ข 5% retention improvement = major profit impact

Pricing Models & Frameworks Tutorial

Built for mastery ยท Interactive learning