SIA Retention Engine β Churn Risk Model (v2.0.0)
Calibrated XGBoost classifier trained on the public IBM/Kaggle Telco
Customer Churn dataset, mapped to SIA's Subscriber schema. Every
input feature is real β see the dataset card for the column-by-column
provenance.
Headline metrics (held-out test split, n=1056)
| ROC-AUC | PR-AUC | Brier | |
|---|---|---|---|
| This model (calibrated) | 0.8476 | 0.6511 | 0.1348 |
| Legacy 2-feature model | 0.795 | β | β |
| Logistic regression | 0.8519 | β | β |
The legacy row is an identical XGBoost trained on only the two real
features the previous schema had (avg_monthly_spend, active_plan),
scored on the same rows. The gap is what rebuilding the feature set
bought.
Calibration
Probabilities are calibrated with isotonic regression fitted on the validation split. Brier score improved from 0.1495 (raw) to 0.1348 (calibrated), so a reported risk of 0.30 corresponds to roughly a 30% observed churn rate.
Top features (mean |SHAP|, test split)
tenure_months: 0.5664active_plan_Flexi: 0.5278active_plan_Premium: 0.3944avg_monthly_spend: 0.2664lifetime_spend: 0.2546spend_per_tenure_month: 0.2333addon_security_No: 0.2276spend_trend_ratio: 0.1991internet_tier_Turbo: 0.1898paperless_billing_No: 0.1374
Intended use
Churn risk scoring for SIA's Monitor agent. Pair with
backend/economics.py to convert a probability into a contact decision
β a flat threshold ignores that a high-value customer is worth
contacting at far lower risk than a low-value one.
Files
model.joblibβ trained XGBoost classifiercalibrator.joblibβ isotonic calibrator (apply topredict_probaoutput)feature_columns.jsonβ exact column order/names the model expectsmetrics.jsonβ full evaluation