# Model card: telco churn classifier (6044927)

Generated by the EvalGate CD pipeline for the deployment trained 2026-10-05 09:57:13 UTC.
Deployment #11 recorded by the pipeline.

## Intended use
Rank existing telecom customers by churn risk so a retention team can prioritise
outreach. Not for pricing, credit or any decision that denies a customer service.

## Data
IBM Telco Customer Churn (public): 7,032 customers after removing
11 rows with missing TotalCharges. Stratified 80/20 split, seed 42: 5,625 train,
1,407 held-out test. 19 features (demographics, account, services).

## Model
scikit-learn Pipeline: StandardScaler + OneHotEncoder(handle_unknown="ignore") into a
GradientBoostingClassifier (seed 42).

## Performance (held-out test set)
- ROC-AUC 0.8386 (95% bootstrap CI 0.8164 to 0.8588)
- 5-fold CV ROC-AUC 0.8472 +/- 0.0033
- Accuracy 0.7960 at threshold 0.5
- Calibration: Brier 0.1390, ECE 0.0254
- Versus the previous deployment: +0.0000 AUC vs deployed model 6044927 (95% CI +0.0000 to +0.0000)

## Performance by segment
| Column | Value | n | Churn rate | ROC-AUC |
|---|---|---|---|---|
| gender | Female | 681 | 0.275 | 0.8306 |
| gender | Male | 726 | 0.258 | 0.8446 |
| SeniorCitizen | 0 | 1175 | 0.237 | 0.8423 |
| SeniorCitizen | 1 | 232 | 0.414 | 0.7829 |
| Contract | Month-to-month | 790 | 0.413 | 0.7574 |
| Contract | One year | 290 | 0.138 | 0.7013 |
| Contract | Two year | 327 | 0.025 | 0.8276 |
| tenure_band | 0-12m | 451 | 0.463 | 0.7667 |
| tenure_band | 13-24m | 206 | 0.296 | 0.7923 |
| tenure_band | 25-48m | 315 | 0.216 | 0.7773 |
| tenure_band | 49m+ | 435 | 0.083 | 0.8320 |
| InternetService | DSL | 482 | 0.189 | 0.7905 |
| InternetService | Fiber optic | 613 | 0.422 | 0.7731 |
| InternetService | No | 312 | 0.077 | 0.8900 |

## Release gate
42 checks enforced in CI (quality, calibration, every
segment with n >= 100, fairness gaps on gender and SeniorCitizen, non-inferiority to the deployed
model, train/test drift). Result: PASSED. Policy: gate.toml.

## Limitations
- One public dataset from a single operator and period; the data is static, so the weekly
  retrain re-validates the pipeline rather than learning from new customers.
- Segment AUCs on small groups (e.g. senior citizens, n=232) are noisy.
- Within a contract type the model separates churners less well (AUC 0.70 to 0.83) than overall,
  because contract type itself is the strongest signal.
- Fairness checks cover only the attributes present in the data (gender, SeniorCitizen).
