Machine Learning · Data Engineering

Customer Churn &
Retention Engine

RavenStack wrapped up its pilot phase with ~500 accounts and a massive churn problem. I built an end-to-end ML pipeline that flags at-risk accounts 30 days before renewal so Customer Success knows exactly who to call and why.

0% Baseline Recall
$0K At-Risk MRR Flagged
0 Urgent Interventions
0 Day Warning Window

The goal wasn't just to model historical churn in a notebook. It was to build something a Customer Success Manager could open in the morning and act on. I built an end-to-end pipeline connecting Google BigQuery, an XGBoost classification model, and a live Power BI dashboard to make that happen without relying on static spreadsheets.

Tech Stack

BigQuery XGBoost SHAP Python Power BI

1. Data Warehousing

I engineered a SQL pipeline in BigQuery that ingests five normalized tables. I used window functions to calculate complex behavioral features like inactivity, support friction, and satisfaction trends anchored to the dataset timeline.

2. Predictive Modeling

Missing a churner costs MRR, but sending a false alert just costs a 15-minute phone call. I applied scale_pos_weight to handle the severe class imbalance and aggressively optimized the XGBoost classifier for Recall.

3. Live Decision Engine

The model writes its predictions and SHAP explainability scores back to BigQuery. Power BI queries this live, mapping out a dynamic waterfall chart so a CSM can see exactly what behavioral metrics are pushing an account to cancel.

Executive Summary
Dashboard 1: Executive Summary tracking Net Revenue Churn and Gross Logo Churn.
CSM Action Board
Dashboard 2a: The CSM Action Board, highlighting accounts renewing in 30 days.
Action Board Filtered
Dashboard 2b: Selecting an account dynamically updates the SHAP waterfall, revealing exact churn drivers.

Inactivity dominates everything.

Days since last usage consistently has the highest absolute SHAP values. An account that hasn't logged in for months is going to churn, period. CSAT surveys and support ticket resolution won't save them at that point.

$503K at risk from "happy" customers.

Accounts with high satisfaction scores (4–5) contributed over half a million dollars in at-risk MRR. Satisfaction scores are a lagging indicator; a high score just means a support interaction went well, not that the account is healthy.

Churn is behavioral, not plan-driven.

Enterprise customers churned at nearly the exact same rate as Basic customers. Upgrading accounts to higher tiers does not meaningfully reduce churn risk if the core engagement isn't there.