Public case study

Telecom Customer Churn Prediction

Calibrated retention scoring - LightGBM, SHAP, lift analysis, Streamlit

Public portfolio project with live Hugging Face demo, GitHub repository, and README-reported test metrics.

PythonLightGBMScikit-learnSHAPStreamlitPandas
Test ROC-AUC 0.8397; PR-AUC 0.6551; recall 0.9278 at threshold 0.12; top-decile lift 2.828.

Business problem

A retention team needs to rank customers by churn risk early enough to prioritize outreach, choose thresholds, and explain why a customer was flagged.

Dataset and context

IBM Telco Customer Churn dataset: 7,043 raw records, 7,032 modeling records after cleaning, 19 modeled features, and a binary Churn target. The project is cross-sectional, so recommendations are framed as decision support rather than causal proof.

Methodology

  • -Cleaned telecom customer records, handled TotalCharges issues, and split data into train, validation, and test sets.
  • -Compared baseline and tree-based models, then selected a calibrated LightGBM workflow for deployment.
  • -Used isotonic calibration so risk scores are more useful for threshold and queue decisions.
  • -Optimized a low threshold for recall-oriented retention outreach instead of defaulting to 0.50.
  • -Added SHAP explanations and lift analysis so stakeholders can inspect both drivers and ranking value.

Technical approach

The modeling path emphasizes business calibration. The app serves a trained pipeline, returns churn probability, applies the selected threshold, and surfaces SHAP-style explanations and retention framing. The README separates model metrics from business assumptions so the result stays auditable.

Key insights

  • -Final test ROC-AUC is 0.8397 and PR-AUC is 0.6551.
  • -At threshold 0.12, recall is 0.9278, which supports a broad retention-review queue.
  • -Top-decile lift is 2.828, showing the ranking concentrates churn risk better than random selection.
  • -Key drivers include tenure, contract type, monthly charges, internet service, and payment method patterns.

Business recommendations

  • -Use the model as a ranked retention queue, not as an automated cancellation decision.
  • -Tune threshold by outreach capacity and offer cost before using it in production.
  • -Prioritize top deciles for manual review and offer testing, then monitor realized save rate.
  • -Track calibration and drift as customer behavior, pricing, or offer policy changes.

Results and impact

Test ROC-AUC 0.8397.
Test PR-AUC 0.6551.
Recall 0.9278 at threshold 0.12.
Top-decile lift 2.828.

Metrics are from the public project README and artifacts. Any retention-dollar impact would require real offer cost, save rate, margin, and campaign-capacity assumptions.

What I would improve in production

  • -Add time-based validation and a defined prediction window.
  • -Connect model outputs to campaign outcomes for threshold ROI tuning.
  • -Monitor calibration, feature drift, and segment-level performance.
  • -A/B test retention offers for high-risk segments rather than using one blanket action.

Recruiter takeaway

This project is a strong recruiter-facing ML case because it goes beyond ROC-AUC: it shows calibration, thresholding, lift, explainability, deployment, and business decision framing.