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

Share this project:

Updates

Submission history