Development of an AI System for Telecom Subscriber Churn Prediction
Telecom is a classic vertical for churn prediction: clear data on subscriber behavior, regular transactions, acquisition cost is 5-7 times higher than retention. An accurate model allows targeting retention budget only to those who will truly leave.
Telecom Churn Specifics
Types of churn:
- Voluntary churn: subscriber consciously switches to a competitor or discontinues service
- Involuntary churn: disconnection due to non-payment
- Early churn: departure within first 90 days (special segment, often fraud or misfit)
Contractual vs. prepaid:
- Postpaid plans (contract): clear termination date. Model predicts termination at renewal.
- Prepaid: no explicit contract. Churn defined through inactivity: 30/60/90 days without top-up.
Feature Engineering from BSS/OSS Systems
Service usage:
features_usage = {
# Voice
'voice_outgoing_min_30d': sum(voice_outgoing_last_30d),
'voice_incoming_min_30d': sum(voice_incoming_last_30d),
'unique_called_numbers': len(unique_called_30d),
'international_calls_flag': has_intl_calls_last_month,
# Data
'data_usage_gb_30d': sum(data_usage_last_30d),
'data_usage_trend': data_30d - data_60_30d, # growth/decline in consumption
'wifi_calls_ratio': wifi_calls / total_calls,
# SMS (declining but still informative)
'sms_out_30d': sms_count_outgoing,
# Financials
'arpu': avg_monthly_revenue,
'arpu_trend': arpu_30d - arpu_90d,
'payment_delays': count(payment_delay > 5d),
'last_payment_days_ago': days_since_last_payment
}
Operator interaction:
features_interaction = {
'cs_contacts_30d': count(support_contacts_last_30d),
'complaints_90d': count(formal_complaints_90d),
'nps_score': last_nps_response,
'app_logins_30d': mobile_app_logins_count,
'mcare_self_service_ratio': self_service_actions / total_contacts,
'billing_disputes': count(billing_disputes_ever)
}
Competitive context:
- Numbers ported from network to competitor in last 30 days (MNP statistics by segment)
- Competitive plan price: the higher the price gap, the higher the risk
Multi-horizon Models
30-day horizon: for personal retention offers (SMS, agent call) 90-day horizon: for segment retention campaigns 180-day horizon: for strategic customer base analysis
Different horizons—different features:
- 30 days: signals from last week matter (CS call, negative NPS)
- 90 days: trends over 3 months (gradual decline in usage)
Uplift Model for Retention ROI
Naive approach: offer discount to all high-risk subscribers. Problem: some will leave anyway, some will stay without discount. Discount only needed for "persuadables".
2×2 Matrix:
| Without offer | With offer | |
|---|---|---|
| Will stay | Sure Things | Sure Things |
| Will leave | Lost Causes | Persuadables |
Uplift model: Uplift = P(retained | treated) - P(retained | not treated)
Target only Persuadables with uplift > 0.
Meta-learner (T-Learner):
# T-Learner: two separate classifiers for treatment and control
model_treatment = LightGBMClassifier().fit(X_treated, y_treated)
model_control = LightGBMClassifier().fit(X_control, y_control)
uplift = model_treatment.predict_proba(X)[:, 1] - model_control.predict_proba(X)[:, 1]
Personalization of Retention Offers
When and what to offer:
Timing:
- 30-60 days before contract end: maximum sensitivity
- After negative NPS: within 48 hours
- After support complaint: immediately, through agent
Offer selection model: Next Best Offer: multiclass classification (discount / bonus traffic / plan upgrade / free roaming). Features: CLV, ARPU, consumption type, offer history.
Timeline: basic churn model on BSS data—4-5 weeks. System with uplift modeling, NBO and CRM integration for retention campaigns—3-4 months.







