Case Study: Marketing Uplift Targeting
"We send a coupon to 15 percent of our customers each month. How would you decide who gets it?" is a staple of marketing-analytics, e-commerce and fintech data science interviews, because the naive answer (target the customers most likely to buy) is wrong in a way that costs real money, and the right answer touches causal inference, modeling, evaluation, experimentation and operations in one story.
This subject is a model answer. It applies theory taught elsewhere instead of re-teaching it: the estimators, Qini curves and the four quadrants come from Uplift Modeling & Heterogeneous Treatment Effects; the three-arm test, holdouts and triggered analysis from Advanced Experimentation: Interference, Marketplaces & Platforms; metric choice and unit economics from Product Analytics, Metrics & LTV; and the IPS/DR policy-value estimators from Off-Policy Evaluation & Offline RL. Notation matches the uplift lesson: \tau(x)=\mu_1(x)-\mu_0(x) is the conditional effect, with persuadables, sure things, lost causes and sleeping dogs as the four segments.
Every number below is from a synthetic simulation (200,000 users, fixed seeds, Python with NumPy, LightGBM and EconML), not from a real company. Because the simulator knows each user's latent response type, it can report the true effect that real data hides; each "true" value below is available only for that reason. Treat the numbers as showing mechanics and relative sizes, not as benchmarks.
Step 1 — Clarify the Problem and Pick the Objective
Questions to ask. What is the treatment (a coupon with a fixed discount), what is the outcome and window (a 7-day purchase), who is eligible (active customers with marketing consent), what is the budget (contacts per cycle, or euros of promo spend), and do we have a past randomized campaign or only hand-targeted history? That last answer decides everything: randomized logs make the project a modeling task, hand-targeted logs make it a causal-identification task first.
Assumptions to state.
| Quantity | Assumption |
|---|---|
| Eligible base per send | 200,000 customers |
| Margin per order before discount | EUR 30 |
| Discount paid on each redeemed order | EUR 6 (a treated buyer redeems) |
| Contact cost | EUR 0.05 per send |
| Budget | 15 percent of the base (30,000 contacts) per send |
| Past data | one randomized campaign, 5 percent treated, 95 percent control |
Objective. Not conversions, and not even incremental conversions on their own: the quantity to maximize is incremental profit, equivalently incremental conversions per euro of promo spend, subject to the budget and guardrails. The per-user value of contacting someone is
The coupon creates margin m-c on each incremental buyer but is also paid to every baseline buyer who redeems it, which is why a customer with \tau\approx0 and a high \mu_0 is a pure cost. Guardrails: unsubscribe rate per contact (a permanent loss of the channel), margin per order (discount depth drift), complaints, and contact-frequency caps. Longer-term, check that coupon-acquired buyers do not train customers to wait for discounts (the LTV framing from Product Analytics, Metrics & LTV); the 7-day window cannot see that, so it belongs in the holdout analysis later.
In the simulation, treating everyone has a true value of -EUR 0.396 per user (about -EUR 79,000 on 200,000 users) even though the average effect is positive (+3.41 points). A positive ATE is not a reason to send blanket coupons.