Subscription businesses have it easy, at least in one respect: churn is an event. Someone clicks cancel, a timestamp is written, and everyone agrees what happened.
Ecommerce has no such event. Nobody cancels a relationship with a skincare brand. They just quietly stop reordering, and six months later you notice the cohort curve sagged. That absence of a clean event is the first and hardest problem in ecommerce churn prediction, and it is where most attempts go wrong.
Step one: define churn without a cancel button
The naive definition is a fixed window — "no order in 90 days." It is easy, and it is wrong for almost every catalogue.
Ninety days is nothing for a customer who buys a winter coat annually, and it is an eternity for someone who reorders coffee every three weeks. A single global threshold guarantees you will chase people who are perfectly happy while ignoring people who left months ago.
The better definition is relative to the individual. Compute each customer's own average gap between orders, then treat them as churned when they have gone materially longer than that — Telltale uses roughly two and a half times their personal interval. The coffee buyer is flagged at around eight weeks; the coat buyer is not flagged until well past a year. Same rule, personalised outcome.
This matters enormously, because this definition becomes your training label. Get it wrong and every downstream number inherits the mistake.
Step two: the signals that actually carry information
Shopify order data is richer than it looks. The features that carry the most predictive weight are rarely the obvious ones.
Gap acceleration beats recency
Days since last order is the metric everyone starts with, and it is weak on its own because it has no baseline. The stronger signal is the trend in the gaps: first gap 28 days, then 33, then 51. That customer is leaving, and you can see it two orders before they are technically overdue.
The first-to-second gap
How long a customer took to make their second purchase is one of the most informative numbers you have about their entire future. It is a proxy for whether the product actually fit. Customers who came back quickly the first time tend to keep coming back.
First product
Which product someone entered your catalogue through predicts their retention surprisingly well. Some products are excellent front doors; others acquire people who never return. Once you can compute the historical churn rate associated with each entry product, that becomes a feature — and separately, a merchandising insight worth acting on.
Discount dependence
What share of a customer's orders were placed on discount. Heavy discount buyers behave differently: they are more responsive to offers and less loyal without them. Knowing this changes both the prediction and what you should send.
Value trajectory
The slope of order value over a customer's life. Basket size shrinking over successive orders is a quiet, early disengagement signal.
Experience signals
Late deliveries, slow tracking, bad reviews, unresolved support tickets, failed subscription charges. These are causes rather than symptoms, and they are usually absent from churn models entirely because they live in other systems. Shipping delay in particular behaves as a directional driver: the worse the delay, the higher the risk, consistently.
Step three: modelling, without over-engineering it
Two practical points matter more than model choice.
Split by time, not at random. If you shuffle customers into train and test sets randomly, you leak the future into the past and get a beautiful score that means nothing. Train on an earlier period, test on a later one — that is the only split that answers the real question, which is whether you can predict what has not happened yet.
Have a fallback. Below roughly a hundred customers with repeat behavior, or less than about a year of history, a trained model is fitting noise. A transparent heuristic — how overdue are they, how many times have they bought, what is their experience record — will beat it and is far easier to trust. A good system switches automatically and tells you which mode it is in.
Report ROC AUC and treat anything near 0.5 as a coin flip regardless of how sophisticated the method sounds.
Step four: the single-order problem
Here is the thing nobody mentions: for most Shopify stores, the majority of customers have bought exactly once. They have no interval, no trend, no trajectory. Every feature above is undefined for them.
You cannot churn-score them, and pretending otherwise produces confident nonsense. They need a separate approach built on what you do know — entry product, acquisition channel, order value, time since that single purchase, and how customers who looked like them behaved historically. Treat first-to-second purchase as its own problem with its own playbook.
The traps
- Predicting what already happened. If your "prediction" is high for everyone who has not ordered recently, you have rebuilt a recency filter with extra steps.
- Ignoring the reason. A score with no explanation cannot be actioned. See why the reason matters more than the score.
- Optimising accuracy on an imbalanced base. If 80% of customers churn, a model that predicts "everyone churns" is 80% accurate and completely useless.
- Never checking causality. High-risk customers who get emailed and then buy may have bought anyway. Without a holdout group you cannot tell.
- Scoring but not acting. A churn dashboard that nobody operationalises is an expensive way to feel informed.
From score to action
The point of prediction is intervention. Bucket the probabilities into tiers — Telltale uses 0.70+ for high risk, 0.40–0.70 for medium — then attach the forward revenue each tier represents so you can prioritise by money rather than headcount. Then route by reason: reorder-window timing for people with a cadence, acknowledgement for people with a bad experience, billing help for people with a failed charge.
Telltale does all of this from your Shopify order history with no pixel and no engineering work — first report in two to five minutes. Install from the Shopify App Store or see pricing.
