Applied ML and Data Science · Jan 2026
Telecom Churn Prediction
ROC-AUC 0.84 at 65% precision on the churn class
The problem
A churn model tuned for accuracy tells a retention team nothing actionable.
Approach
Feature engineering on usage and contract data, evaluated with precision, recall and ROC-AUC optimised for retention strategy rather than headline accuracy. Interactive Streamlit interface returns churn risk with interpretable driver explanations.
How it works
- Feature engineering over usage and contract data, reaching 80.4% accuracy.
- Evaluated with precision, recall and ROC-AUC, tuned for the retention decision rather than headline accuracy.
- A Streamlit interface returns a churn risk with its drivers. Contract type dominates: month-to-month churns at 42.7% against 2.8% on two-year contracts.
Key decisions
- Optimise for the retention decision
- Retention budgets are finite, so the cost of a false positive and a false negative are not equal. The threshold is set against that trade-off rather than against accuracy.
- Return the driver, not just the score
- A retention team can act on 'contract type and support calls' in a way it cannot act on '0.78'.
What the measurements showed
- Accuracy 80.4%, ROC-AUC 0.84, precision 65% and recall 57% on the churn class.
- Contract type dominates: month-to-month churns at 42.7% against 2.8% on two-year contracts.
- Fibre optic customers churn at 41.9%, and customers in their first six months carry the highest risk.
Running it
streamlit run app.pyFull setup, configuration and API reference are in the repository README.
Stack
- Python
- scikit-learn
- Streamlit
- pandas