A mid-sized FinTech company faces 15.2% monthly churn, putting $2.4M in annual revenue at risk. This project goes beyond simple churn prediction β it calculates Customer Lifetime Value (CLV) per segment and outputs a prioritized Retention Budget Allocation framework for the business.
π thed700.github.io/churn-portfolio
Synthetic Data Gen β Feature Engineering β EDA β XGBoost + Tuning β SHAP β Business Report
| Layer | Tools |
|---|---|
| Data Generation | Python, Faker, NumPy (Lognormal, Zipf, Poisson distributions) |
| Data Cleaning | KNN Imputer, IQR Capping, RobustScaler |
| Feature Engineering | Ticket-to-Tenure Ratio, Engagement Score, CLV Proxy |
| ML Model | XGBoost (scale_pos_weight for class imbalance) |
| Hyperparameter Tuning | RandomizedSearchCV + StratifiedKFold (5-fold) |
| Explainability | SHAP (beeswarm, waterfall, dependence plots) |
| Visualization | Plotly, Seaborn |
| Frontend | React 19, CSS-in-JS |
| Deployment | GitHub Pages, gh-pages |
| Metric | Value |
|---|---|
| ROC-AUC | β₯ 0.87 |
| AUC-PR (imbalance-aware) | β₯ 0.61 |
| Recall @ threshold 0.5 | β₯ 0.72 |
| Model Precision @ 0.7 | 81% |
| Projected ROI | 39.7Γ on intervention spend |
- ticket_tenure_ratio β complaints in early tenure are 3Γ more predictive than late-tenure.
- engagement_score β drop-off visible 8 weeks before actual churn.
- fee_complaints β 68% of users who complained churned within 30 days without outreach.
| Segment | Trigger | Action | Expected ROI |
|---|---|---|---|
| High CLV + At-Risk | churn_prob > 0.70 |
Personal call + fee waiver | $1,840 CLV preserved |
| Frustrated New Users | ticket_tenure_ratio > 0.8 |
Onboarding specialist | LTV uplift |
| Disengaged Free Users | engagement < P25 |
Re-engagement email | 5% β $240 LTV |
churn-portfolio/
βββ src/
β βββ App.js # Full interactive portfolio (React)
βββ public/
β βββ index.html
βββ package.json
βββ README.md
Akmal β Junior Data Analyst
π Uzbekistan | π UWED (International Economics, 2026)
π GitHub: thed700