Heterogeneous Treatment Effects (CATE)

By the end of this article, you should be able to: explain why an average effect can mislead, estimate effects that vary across users (CATE), avoid the subgroup-fishing trap, and turn the result into a targeted rollout.

Step 1: Meet the problem

A delivery app tests a new batching rule. The average effect on on-time rate is about zero, so the team says "no impact, kill it." You're suspicious. You split by area and find it helps dense urban orders a lot and hurts sparse rural orders a lot. The two cancel to roughly zero on average, but the change matters enormously, just in opposite directions.

The average treatment effect (ATE) answered "what's the effect on everyone?" The real question is "for whom does it help, and by how much?" That's the conditional average treatment effect (CATE): the effect as a function of a unit's characteristics.

Step 2: ATE vs CATE

Write the treatment effect for a unit with features X=xX = x as:

τ(x)=E[Y(1)Y(0)X=x]\tau(x) = \mathbb{E}[\,Y(1) - Y(0)\mid X = x\,]

the expected difference between the outcome with treatment Y(1)Y(1) and without Y(0)Y(0), for units that look like xx. The ATE is just the average of τ(x)\tau(x) over everyone. When τ(x)\tau(x) swings positive for some xx and negative for others, the ATE can sit near zero while the CATE is large everywhere.

SegmentCATE (on-time)
Dense urban, small orders+6 pp
Suburban, mixed+1 pp
Sparse rural, large orders−7 pp
ATE (average)~0

Killing this change on the ATE throws away a real win for dense-urban orders and misses a real harm for rural ones. The decision isn't ship-or-kill, it's ship where it helps.