top of page
Search

Causal Uplift Analysis for Free Pizza Coupons

Writer: Katie Wojciechowski
Katie Wojciechowski
Sep 17
3 min read

Domino's has a habit of apologizing for mediocre orders (labeled as such by them, their pizza pretty much always tastes the same to me) with a "free pizza next time" coupon. I almost never redeem mine — I'm ordering too fast, or it's buried in an old email by the time I remember. That behavior pattern turned into the seed of a portfolio project: does non-redemption of a service-recovery coupon actually signal loyalty, or is it noise?


The naive comparison

I built a synthetic dataset simulating this exact mechanism — users receiving apology coupons after a subset of orders, with variable redemption behavior — and ran the obvious first-pass analysis: mean forward-window LTV, redeemers vs. non-redeemers.


Non-redeemers came out $149 higher. On its face, that supports the hypothesis.


It's also almost certainly confounded. Order frequency drives both sides of this comparison — more orders means more chances to receive a coupon, and frequent orderers have higher LTV independent of any coupon behavior at all. The naive gap doesn't distinguish "the coupon is inert for this segment" from "this segment orders a lot, which happens to correlate with skipping a step at checkout." Without addressing that, the $149 figure is close to meaningless as a causal claim.


Uplift modeling instead of a group comparison

The actionable version of this question isn't "do redeemers and non-redeemers differ" — it's a treatment-effect question: does the coupon change behavior for this segment, or would these customers have stayed loyal regardless (in which case every coupon issued to them is pure margin loss)?


I used a T-learner to estimate individual treatment effects — separate regressors fit on treated and untreated populations, with the ITE taken as the gap between their predictions. Simple as far as uplift methods go, but a reasonable baseline before reaching for a causal forest or a doubly robust estimator.


The harder problem with any uplift method is validation: you never observe the counterfactual for a real customer, so there's no ground truth to check predictions against. I got around that by building the synthetic data with known treatment effects baked in per latent segment (sure thing / persuadable / lost cause / sleeping dog), which let me confirm the model was actually recovering the right structure rather than just producing plausible output.


Screenshot from the notebook
Screenshot from the notebook

Results

Uplift-adjusted estimate: –$29, 95% CI spanning zero. Once frequency is controlled for, there's no reliable evidence this coupon is doing anything for this segment.


Same operational recommendation as the naive read (stop issuing coupons to this group) but on defensible grounds instead of a spurious one. That distinction matters: the naive version would have gotten flagged internally as "these customers are extra loyal," which is the wrong lesson to generalize from and would likely mislead future targeting decisions built on top of it.


Where this sits in the broader pipeline

This project is scoped deliberately to one stage: method validation on synthetic data with known ground truth, before ever trusting the approach on production data. A full deployment would still need real MMP/CRM-level redemption data, a credible identification strategy for coupon assignment (which isn't randomized, it's triggered by service failures, so instrumenting off complaint severity or similar would likely be necessary), and ultimately a randomized holdout to confirm the observational estimate holds.


 
 
 

Comments


©2025 by Katie Hayes. Proudly created with Wix.com

bottom of page