Dataset note. This Kaggle snapshot (974 MTN Nigeria customer rows) is approximately random-uniform in the covariates we tested — see the sister notebook
08-customer-survival-mtn-tenure/README.mdfor details. Logistic AUC and RF F1 collapse; XGBoost AUC = 0.71 reflects non-linear interactions in high-cardinality one-hots, not substantively interpretable signal. This notebook is a teaching demo of binary-churn classification end-to-end — logistic regression, random forest, XGBoost, ROC / PR / calibration diagnostics, retention-queue ranking. For a real benchmark see the IBM Watson Telco Customer Churn dataset (7,043 customers).
Which customers are most likely to churn in the next quarter, and which features drive their risk? A binary classifier ranks customers by churn probability so retention campaigns can target the highest-risk segment.
(Companion to project 08, which models the same data as a survival problem — same data, two analytical lenses, both useful.)
Run python download_data.py.
| Family | Model |
|---|---|
| Linear | Logistic regression with L2 penalty (interpretable baseline) |
| Trees | Random Forest, Gradient Boosting (XGBoost) |
Headline numbers (test):
| Model | ROC-AUC | PR-AUC | P@50 | Lift@50 | P@100 | Lift@100 |
|---|---|---|---|---|---|---|
| XGBoost | 0.71 | 0.51 | 0.52 | 1.78× | 0.40 | 1.37× |
| Random Forest | 0.59 | 0.36 | 0.34 | 1.16× | 0.38 | 1.30× |
| LogReg | 0.48 | 0.27 | 0.20 | 0.68× | 0.30 | 1.03× |
Only XGBoost’s top-50 queue carries meaningful lift (1.78× over random). LogReg’s top-50 is actually worse than random, a telltale that linear scoring is picking up anti-signal on this (near-random) data. See the dataset note at the top for context.