Case study

AnalysisPythonSQLPower BI

Churn Early-Warning Model

Gradient-boosted model scoring every B2B account for 60-day churn risk, delivered weekly to the customer success team with the top three risk drivers per account in plain English.

Case study
Variation 3/3
Question

Which enterprise accounts were about to churn — and could we see it coming in time to act?

Approach

Using Python, SQL, and Power BI, the data was explored and analyzed in depth — gradient-boosted model scoring every B2B account for 60-day churn risk, delivered weekly to the customer success team with…

Result

Gradient-boosted model scoring every B2B account for 60-day churn risk, delivered weekly to the customer success team with the top three risk drivers per account in plain English.

Hover a row to edit · changes save to your portfolio

Churn Early-Warning Model

Problem

Customer success was reactive: they usually learned an account was unhappy when the cancellation email arrived. There was no systematic, early signal of risk.

Approach

I pulled 24 months of account-level signals in SQL — login frequency, seat utilisation, support ticket sentiment, time since last QBR, and invoice payment delays — and trained a gradient-boosted classifier (XGBoost) in Python with a strict time-based train/test split to avoid leakage.

Crucially, I shipped SHAP values alongside each score so the output wasn't a black box: every flagged account came with its top three human-readable risk drivers. The weekly scores landed back in Power BI next to the CSM's existing book.

Result

  • 0.86 ROC-AUC on a held-out future quarter
  • 71% precision on the highest-risk decile
  • Adopted into the CS team's Monday workflow

Impact

Of the at-risk accounts flagged in the first two quarters, the team saved 38 of 52 it actively worked — protecting roughly $1.4M in ARR that historically would have churned without warning.