Take-home challenge | Predicting customer NPS category for a pan-African telecom operator using the IBM Telco dataset ML pipeline, SHAP explainability, fairness audit, and Streamlit interface.
# Telco NPS Prediction
A machine learning system that predicts Net Promoter Score (NPS) category — Detractor, Passive, or Promoter — for telecom customers who have not responded to an NPS survey, using account, service, and billing data. The system is designed to support a retention team's outreach prioritization, not to replace human judgment about individual customers.
## Business Context
Net Promoter Score is the standard loyalty metric used by telecom operators to track customer sentiment, but survey response rates are structurally low: in the scenario this project targets, only about 15% of the customer base ever answers an NPS survey. This creates a coverage gap that matters operationally — a retention team cannot act on a metric it does not have for 85% of its customers.
The role of this system is to close that gap by predicting NPS category for the silent majority from data the business already has: tenure, contract terms, subscribed services, billing amount, and payment behavior. The output feeds a retention workflow with two concrete uses: ranking customers by predicted Detractor risk to prioritize outreach, and surfacing the features driving a given prediction so a retention agent has something actionable to discuss, not just a label.
Two properties of this problem shape every downstream decision in the repository. First, NPS is fundamentally ordinal — Detractor, Passive, and Promoter are not interchangeable categories, and a model that confuses Detractor with Promoter is making a qualitatively worse error than one that confuses Detractor with Passive. Second, the label is noisy by construction: this project derives NPS from a five-point Satisfaction Score rather than observing true NPS directly, which means the target itself carries mapping decisions that must be documented and stress-tested rather than treated as ground truth.
## Repository Structure
```
telco-nps-prediction/
├── src/
│ ├── __init__.py
│ ├── features.py
│ ├── model.py …