Growth Experimentation & Causal Marketing Analytics
Holdout Incrementality iROAS & Attribution Bias Formula
Calculate Randomized Holdout / Geo-Lift Causal Revenue Lift per User, True Incremental Revenue, Causal Incremental ROAS (iROAS), and Platform Last-Touch Attribution Overclaim Multiplier.
Audit platform last-touch ROAS claims against randomized holdout organic baselines!
Retargeting and branded-search ad dashboards routinely claim 4x–10x Return on Ad Spend (ROAS) because tracking pixels take 100% credit for loyal customers who would have purchased organically without seeing an ad! A randomized user holdout (ghost-ad / PSA split) or matched geo-lift test isolates true causality by comparing per-user revenue in the exposed Treatment group (R_treat / N_treat) against an unexposed Control holdout (R_ctrl / N_ctrl): Causal_Lift_Per_User = (R_treat / N_treat) - (R_ctrl / N_ctrl), scaling to True Incremental Revenue = Causal_Lift_Per_User * N_treat, Causal Incremental iROAS = Incremental_Revenue / Ad_Spend, and Attribution Overclaim Multiplier = Platform_Claimed_Rev / Incremental_Revenue!
Verify in a shared growth-finance review sheet—Treatment_Users N_t = 50,000 (B2), Treatment_Revenue R_t = $600,000 ($12.00/user, B3), Holdout_Users N_c = 10,000 (B4), Holdout_Revenue R_c = $90,000 ($9.00/user organic baseline, B5), Ad_Spend = $75,000 (B6), and Platform_Claimed_Revenue = $300,000 (4.00x claimed ROAS, B7): Causal Lift per User is $12.00 - $9.00 = $3.00 (E2); True Incremental Revenue is $3.00 * 50,000 = $150,000 (E3—half of the pixel’s $300k claim was organic baseline!); Causal iROAS is $150,000 / $75,000 = 2.00x (E4); and Platform Overclaim Multiplier is $300,000 / $150,000 = 2.00x (E5)! Leave a cell comment on E4 with @finance before approving budget expansion!
| Holdout Incrementality Metric (Nt=50k/$600k, Nc=10k/$90k, Spend=$75k, Claim=$300k) | Formula | Verified Output |
|---|---|---|
| Causal Lift per Exposed User ($) | (R_treat / N_treat) - (R_ctrl / N_ctrl) | $3.00 ($0.00 @ Rt=$450k) |
| True Incremental Revenue ($) | Causal_Lift_Per_User * N_treat | $150,000 ($0 @ Rt=$450k) |
| Causal Incremental iROAS (x) | Incremental_Revenue / Ad_Spend | 2.00x (vs 4.00x Pixel ROAS) |
| Platform Attribution Overclaim | Platform_Claimed_Rev / Incremental_Rev | 2.00x ("Non-Positive Lift" <=0) |
Randomized Holdout Causal iROAS Formula
Validate positive sample sizes N_treat, N_ctrl > 0, non-negative revenues, and strictly positive Ad_Spend > 0!
=LET(n_tr, B2, r_tr, B3, n_ct, B4, r_ct, B5, sp_d, B6, cl_m, B7, IF(OR(n_tr <= 0, r_tr < 0, n_ct <= 0, r_ct < 0, sp_d <= 0, cl_m < 0), "Invalid Holdout Experiment", LET(lf_u, (r_tr / n_tr) - (r_ct / n_ct), inc_r, lf_u * n_tr, ROUND(inc_r / sp_d, 4))))100% Organic Cannibalization Stress Check (R_treat = $450,000)
Set Treatment_Revenue B3 = $450,000 ($9.00/user = Control!): Causal iROAS E4 drops to 0.00x even while the ad platform still claims $300k, and E5 flags "Non-Positive Lift"!
=IF(ISTEXT(E3), E3, IF(E3 <= 0, "Non-Positive Lift", ROUND(B7 / E3, 2)))Try the example
Use the original values or change them to test your understanding.