Propensity scoring sounds statistical and intimidating, but the core idea is simple: given what a customer has done so far, how likely are they to do a specific thing in the next window of time? For e-commerce teams, the most useful version of that question is: who is likely to buy again in the next 30 days?
The practical difference between a propensity score and a segment filter matters. A filter says "customers who bought in the last 90 days." A propensity score says "customers who are in a behavioral state that has historically preceded a purchase." That second group includes people who haven't bought yet but are moving in that direction, and it excludes people who bought recently but whose behavior signals they're done.
What Signals Actually Predict Purchase Propensity
Raw purchase history is a lagging indicator. By the time a customer has a purchase on record, the behavioral sequence that drove it is already over. What precedes a purchase is a pattern of engagement: page visits, product views, add-to-cart events, email clicks, return visits within a short window, and time spent on product detail pages.
In our work building scoring pipelines for growing e-commerce brands, we've consistently seen a handful of features dominate model importance:
- Recency of product page views: A customer who viewed 3+ product pages in the last 7 days is in a different behavioral state than one who hasn't visited in 45 days.
- Cart interaction without checkout: Add-to-cart events that didn't result in purchase are strong positive signals, not just "abandon cart" negatives.
- Email engagement velocity: Clicking 2 emails in 5 days versus 1 email in 60 days is a meaningful behavioral difference.
- Session depth and repeat visit cadence: Multiple sessions within a week with increasing page depth tend to cluster in the pre-purchase window.
- Category affinity shifts: A customer who previously bought accessories but has been browsing apparel for 3 weeks is signaling intent, not random browsing.
None of these signals alone predicts purchase. The model learns how they interact. Someone with high email engagement but zero product views in 30 days is behaviorally different from someone with both. The model captures that interaction; a rule-based segment can't.
The Mechanics: From Events to a Score
Building a purchase propensity model requires a labeled dataset where each row is a customer at a point in time, the features are behavioral signals computed from the lookback window (typically 7, 14, and 30 days), and the label is "did this customer purchase in the next 30 days?"
That dataset construction is usually the hardest part. You need to generate training samples from historical data at multiple time offsets so the model sees customers in different lifecycle stages. Taking a single snapshot of your current customer base and labeling it from their future behavior will give you a biased model that only reflects your current cohort composition.
For the model itself, gradient-boosted trees (XGBoost or LightGBM) work well on this type of tabular behavioral data. They handle the non-linear feature interactions that matter for propensity scoring, they're relatively interpretable via SHAP values, and they don't require extensive hyperparameter tuning to get to a useful result. Logistic regression works as a baseline and is often surprisingly competitive.
The output is a score between 0 and 1. But the score alone isn't operationally useful. What you need is a percentile rank within your active customer base updated daily, so your campaign logic can target "top 20% propensity" rather than "score above 0.72" (which changes meaning as your model drifts).
A Concrete Scenario: Home Goods Brand, Mid-Size Catalog
Consider an e-commerce brand in the home goods category with roughly 80,000 active customers and a catalog of 4,000 SKUs. Their lifecycle team was running monthly email campaigns to anyone who had purchased in the last 6 months, getting decent open rates but flat repeat purchase rates.
After building a 30-day purchase propensity model from their event stream (page views, cart events, email clicks, session data), they shifted to targeting the top 25% by propensity score each week, regardless of when the customer last purchased. The result was a smaller send volume but a materially higher ratio of sends that reached customers who were already in a purchase-ready behavioral state.
More importantly, the propensity score started surfacing customers who had purchased 8-10 months ago but were visibly re-engaging, a group that wouldn't have qualified under a recency-only filter. Those re-engagement signals are real, and the recency filter was masking them.
We're not claiming propensity scoring will fix every conversion problem. Email deliverability, offer relevance, and friction in checkout all matter. But who you send to shapes every metric downstream.
Calibration and the Risk of Chasing the Score
One thing we've seen go wrong with propensity scores is over-indexing on the top percentile at the expense of mid-tier customers. A customer in the 60th percentile for purchase propensity still has real intent. The marginal value of the 90th-to-100th percentile isn't always higher than the 60th-to-80th, especially when the top tier is small and already likely to convert without any outreach.
Calibration also matters. A propensity score that says 0.8 should mean something like "80% of customers with this score profile buy in the next 30 days." If your model is uncalibrated, a 0.8 might only represent 40% actual purchase rate, and your campaign budget assumptions will be wrong. Platt scaling or isotonic regression can fix calibration after initial training.
Score drift is real over time. A model trained in Q4 when holiday browsing inflates engagement signals will overpredict in January. Either retrain regularly (at least quarterly) or monitor calibration metrics on a rolling basis and trigger retraining when they degrade.
How Propensity Scores Feed the Rest of Your Stack
A purchase propensity score is most valuable when it's live in your segmentation layer, not sitting in a warehouse table that someone queries manually once a month. The operational pattern is:
- Scores update daily via your event pipeline
- Segment definitions reference the score field (e.g., "propensity_score_30d > 0.65")
- Those segments sync to your email tool and SMS platform automatically
- Campaign triggers fire based on segment membership, not manual exports
This is the reverse ETL pattern: scores computed in your data layer, pushed into operational tools. Without that sync, propensity scores become an analytics artifact rather than an activation asset.
Propensity scoring for churn works the same way mechanically. The label flips: instead of "did the customer purchase in the next 30 days?", it's "did the customer stop purchasing for 90+ days?" The feature importance profile looks different (session inactivity and email disengagement dominate), but the pipeline is identical.
Where to Start If You Haven't Done This Before
The minimum viable version doesn't require a data science team. You need: a reliable event stream (purchase, page view, add-to-cart, email click) stored in queryable form, a tool that can compute per-customer features from that stream on a regular cadence, and a way to get scores into your campaign tools.
The first model you build won't be the best one. Treat it as a baseline. Measure whether campaigns targeting the top propensity quartile outperform campaigns targeting based on recency alone. That comparison will tell you whether the behavioral signals you've collected are predictive, and it will give you the business case to invest in more sophisticated feature engineering later.
The teams we see get the most out of propensity scoring are the ones who close the loop between prediction and outcome. They track what percentage of top-scored customers actually purchase, they monitor that rate over time, and they use it to detect when the model needs retraining. Prediction without measurement is just a guess wearing a formal label.