Docs/Retention Engine/Churn Prediction

Churn Prediction

Identify at-risk players before they leave with AI-powered churn prediction and automated interventions.

10 min read

Overview

Ilara uses machine learning to predict which players are likely to churn. By identifying at-risk players early, you can take proactive steps to re-engage them before they leave.

Key Benefits
  • Early Warning: Identify at-risk players 7-14 days before churn
  • Actionable Insights: Understand why players are leaving
  • Automated Intervention: Trigger retention campaigns automatically
  • ROI Tracking: Measure retention improvements

How It Works

Data Collection

Ilara analyzes behavioral signals:

  • Session frequency and duration trends
  • Declining playtime patterns
  • Reduced feature engagement
  • Purchase velocity changes
  • Social activity decline
  • Failed attempts and frustration signals

Risk Scoring

Each player receives a churn risk score from 0.0 to 1.0:

Score RangeRisk LevelAction
0.0 - 0.3LowNormal engagement
0.3 - 0.6MediumMonitor closely
0.6 - 0.8HighProactive intervention
0.8 - 1.0CriticalUrgent action required

Churn Factors

Ilara identifies specific factors contributing to churn risk:

FactorDescriptionWeight
session_declineSessions dropped 50%+ from averageHigh
playtime_declinePlaytime decreased significantlyHigh
no_purchase_30dNo purchases in 30 days (was payer)Medium
failed_attemptsMultiple level failures without retryMedium
social_inactiveNo guild/friend activityLow
feature_abandonmentStopped using key featuresMedium
Churn Risk Response
json
GET /v1/players/players/{id}/churn-risk
 
{
class="code-string">"player_id": class="code-string">"550e8400-e29b-41d4-a716-446655440000",
class="code-string">"risk_score": 0.72,
class="code-string">"risk_level": class="code-string">"high",
class="code-string">"factors": [
{
class="code-string">"factor": class="code-string">"session_decline",
class="code-string">"description": class="code-string">"Sessions dropped 65% over 14 days",
class="code-string">"contribution": 0.35
},
{
class="code-string">"factor": class="code-string">"playtime_decline",
class="code-string">"description": class="code-string">"Average session length dropped from 25min to 8min",
class="code-string">"contribution": 0.22
},
{
class="code-string">"factor": class="code-string">"no_purchase_30d",
class="code-string">"description": class="code-string">"Last purchase was 45 days ago",
class="code-string">"contribution": 0.15
}
],
class="code-string">"prediction_date": class="code-string">"2025-01-25T00:00:00Z",
class="code-string">"confidence": 0.85
}

SDK Usage

Unity - Get Churn Risk
csharp
class=class="code-string">"code-comment">// Get churn risk for current player
var churnRisk = await IlaraClient.Instance.GetChurnRisk();
 
Debug.Log($class="code-string">"Risk Score: {churnRisk.RiskScore}");
Debug.Log($class="code-string">"Risk Level: {churnRisk.RiskLevel}");
 
class=class="code-string">"code-comment">// Check if player is at risk
if (churnRisk.IsAtRisk)
{
class=class="code-string">"code-comment">// Show retention offer
ShowSpecialOffer(churnRisk.RiskLevel);
 
class=class="code-string">"code-comment">// Log factors
foreach(var factor in churnRisk.Factors)
{
Debug.Log($class="code-string">"Churn factor: {factor}");
}
}
Godot - Get Churn Risk
gdscript
var risk = await Ilara.get_churn_risk()
 
print(class="code-string">"Risk Score: ", risk.risk_score)
print(class="code-string">"Risk Level: ", risk.risk_level)
print(class="code-string">"Factors: ", risk.factors)
 
if risk.is_at_risk():
show_retention_offer(risk.risk_level)

Automated Interventions

Configure automatic actions when players become at-risk:

Intervention Rules
json
POST /v1/retention/interventions
{
class="code-string">"name": class="code-string">"High-Risk Player Intervention",
class="code-string">"trigger": {
class="code-string">"type": class="code-string">"churn_risk",
class="code-string">"risk_level": class="code-string">"high",
class="code-string">"cooldown_days": 7
},
class="code-string">"actions": [
{
class="code-string">"type": class="code-string">"notification",
class="code-string">"channel": class="code-string">"push",
class="code-string">"template_id": class="code-string">"retention-offer-v2",
class="code-string">"delay_hours": 0
},
{
class="code-string">"type": class="code-string">"offer",
class="code-string">"offer_id": class="code-string">"comeback-bonus-50",
class="code-string">"duration_hours": 72
},
{
class="code-string">"type": class="code-string">"segment_add",
class="code-string">"segment_id": class="code-string">"at-risk-intervention"
}
]
}

Intervention Types

TypeDescription
notificationSend push/email/in-app message
offerGrant special offer or discount
bonusAdd bonus currency/items
feature_unlockTemporarily unlock premium features
segment_addAdd to segment for targeting
webhookTrigger custom webhook

Churn Dashboard

Monitor churn trends in Dashboard → Retention → Churn:

  • Risk Distribution: Players by risk level over time
  • Churn Rate: Actual churn vs. predicted
  • Intervention Success: Players saved by interventions
  • Factor Analysis: Most common churn factors
  • Cohort Comparison: Churn by acquisition cohort

Model Accuracy

Ilara tracks prediction accuracy to continuously improve:

MetricDescriptionTarget
PrecisionOf predicted churns, how many actually churned>75%
RecallOf actual churns, how many were predicted>80%
AUCArea under ROC curve>0.85
Lead TimeDays before churn prediction is made7-14 days
Model Training
The model improves as more data is collected. Initial predictions start after ~1000 churned players in your game.

Churn-Based Segments

Ilara creates automatic segments based on churn risk:

SegmentCriteria
at-risk-playersRisk score > 0.6
critical-riskRisk score > 0.8
declining-engagementSession decline > 50%
saved-from-churnWas at-risk, now recovered

Best Practices

  • Act early: Intervene at medium risk, don't wait for critical
  • Personalize offers: Match offer to player value and preferences
  • Don't over-notify: One intervention per risk event, not daily
  • Track outcomes: Measure which interventions work best
  • Iterate: Test different offers and timing

Next Steps