Gradient-boosted trees have beaten neural networks on spreadsheet-shaped data for a decade, and this is why: three thousand fake subscription customers are generated with a hidden risk formula, and the model has to rediscover it from the columns alone. It trains live in your tab. The real deliverable is not the accuracy number, it is the last table on this page: the five customers a retention team should call today.
browser version uses gradient-boosted decision stumps in place of XGBoost — sequential depth-1 trees fit to the residuals of a logistic model, with a learning rate. Same idea (additive boosting on gradients), smaller engine: no second-order terms, no regularised leaf weights, no column sampling.
preparing…
Recall on churns is how many leavers you caught, the people you can still save. Precision is how many of your flagged customers were really leaving, the share of the retention budget that was not spent on someone already happy. Moving the threshold trades one for the other, and which way you move it is a finance question, not a modelling one.
Accuracy is a trap here: 28% of customers churn, so a model that predicts "nobody churns" scores 72% while being worth nothing. The area under this curve asks a fairer question, does a random churner outrank a random stayer.
Total loss reduction contributed by all the stumps that split on each feature. The generator's true coefficients are on the right, and the model never sees them. What a tree ranks is a coefficient times the spread of its column, which is why logins tops the list despite the smallest coefficient of the three real drivers: it runs from 0 to 40, so it moves risk by four points end to end, while the annual plan can only ever move it by 1.4.
Each customer gets a hidden risk score built from a fixed formula plus a shot of random noise, and the riskiest 28% are labelled as churned, so there is a ground truth to check the model against. The noise is deliberate: it stands in for everything a company cannot observe, a bad week, a competitor's coupon, and it puts a hard ceiling on achievable accuracy, which is why a model that scores 100% on data like this is leaking the answer rather than learning it. Boosting starts from a constant prediction and then fits three hundred one-split decision stumps in sequence, each one trained on the gradient of the loss, meaning the mistakes the model is still making, and added at a small learning rate so no single stump can dominate. Predictions accumulate in log-odds space and pass through a logistic function to become probabilities. Because every stump records which feature it split on and how much loss it removed, adding that up gives an importance ranking, and it lands on the true drivers.