Inspiration
Inspiration
Online stores lose a big chunk of their customers silently — no warning, no complaint, they just stop coming back. We wanted to build something that catches this before it happens, not after. Customer churn felt like the perfect intersection of real business impact and a clean, learnable ML problem — the kind of project that's actually useful, not just academic.
What it does
Our project predicts which e-commerce customers are likely to churn, using a dataset of 3,000 customers across 14 behavioral and demographic features. It:
- Cleans and explores the data to surface churn patterns visually
- Encodes categorical features and trains two classification models — Logistic Regression and a Decision Tree
- Evaluates both on Accuracy and ROC-AUC, and picks the stronger performer (Logistic Regression, 63% accuracy / 0.651 AUC)
- Extracts feature importance to explain why customers churn, not just predict who will
- Exports predictions in a format ready to plug straight into Power BI for a business-facing dashboard
How we built it
We used Python (pandas, scikit-learn, matplotlib, seaborn) for the full pipeline — from data cleaning through EDA, feature engineering, model training, and evaluation. MySQL handled the underlying data storage and business-question queries, and Power BI was used to turn the model's output into something a non-technical stakeholder could actually read and act on.
What we learned
The biggest insight was that inactivity is the loudest signal — "days since last order" alone carried 42% of the predictive power, far ahead of complaints or order count. That reframes churn from a support problem into a timing problem: the earlier you catch inactivity, the more room you have to win someone back. We also learned firsthand that a simpler model (Logistic Regression) can outperform a more "sophisticated" one (Decision Tree) when the relationships in the data are fairly linear — a good reminder not to over-engineer.
Challenges we ran into
Balancing model interpretability with performance was tricky — we wanted something a business stakeholder could trust and understand, not a black box, which is part of why we compared a simple linear model against a tree-based one instead of jumping straight to something more complex. Getting the churn signal clean (avoiding leakage from features too closely tied to the target) also took a few iterations of EDA.
What's next
- Testing ensemble models (Random Forest, XGBoost) for a real accuracy jump
- Adding a real-time prediction API so the model can flag at-risk customers live
- Incorporating customer review sentiment via NLP for a richer, more human signal# What it does
Built With
- data
- decision-tree
- jupyter-notebook
- logistic-regression
- machine-learning
- matplotlib
- mysql
- pandas
- power-bi
- python
- scikit-learn
- seaborn
Log in or sign up for Devpost to join the conversation.