老王在菜市场卖了二十年鱼,今年春天搞了一次“会员日三文鱼八折”。活动那天他忙得脚不沾地,晚上一算账:当天卖掉两百多斤三文鱼,比平时翻了一倍。他高兴得请全家吃了顿火锅。可第二天冷静下来,他忽然犯嘀咕:“这天是周六,本来人就多;隔壁市场还装修,好多熟客绕路过来……这多卖的一百斤里,到底有多少是打折拉来的,有多少是人家本来就要买的?”这个问题,就是促销效果评估要回答的核心问题——把“促销期卖了多少”和“促销真正带来了多少增量”分清楚。 本文围绕老王的鱼摊故事,讲解评估促销效果的完整方法论:从增量思维出发,用因果推断和 A/B 测试识别真实效果,用归因模型分配渠道功劳,用指标体系衡量活动健康度,再用自动化报告把评估变成日常动作,最终形成策略迭代的闭环。这些方法几乎是零售、电商、本地生活等行业通用的“促销验货标准”。

岗位关联

学会这套“增量评估”方法论,你将从“汇报促销卖了多少”晋升到“证明促销多赚了多少”,让 AI 与数据真正驱动经营决策,这正是 AI 零售与电商领域最稀缺的落地能力。

目录
  1. 可视化演示
  2. 评估逻辑:先问“多了多少”
  3. 因果推断:给成绩单找参照
  4. A/B测试设计:把顾客掷骰子分组
  5. 归因模型选型:功劳簿上怎么记
  6. 指标体系:不看热闹看门道
  7. 报告自动化:让账房先生下班
  8. 策略迭代:让促销越做越聪明
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示增量分析A/B测试实验组vs对照组lift、多触点归因Shapley值分配、及促销ROI计算与净利润影响分析。

本节配有交互动效(进入视口后自动加载,约 3KB)。

增量分析:实验组vs对照组 实验组促销后销量提升40% 对照组自然增长仅5% Lift = Test - Control, Z-score检验显著性 因果增量评估

评估逻辑:先问“多了多少”

促销活动结束那天,老王捧着账本乐了半天——两百斤,破纪录了!可老王的媳妇冷静地问了一句:“周六本来就比平时多卖几十斤,而且邻居装修把人赶过来了。你能说这两百斤全是打折的功劳吗?”老王愣住了。他意识到,要判断促销划不划算,不能只盯着“卖了多少”,得先回答“如果没有促销,本来会卖多少”,这中间的差值才是促销真正的贡献。

这个差值在业务语言里叫“增量”。增量思维是促销效果评估的第一性原理:促销的功劳不是促销期的总销量,而是总销量减去“什么也不做也会发生的销量”。这听起来简单,做起来难——因为那个“什么也不做的世界”并不存在,我们只能通过历史数据或对照组去估计它,这种估计在统计学上叫“反事实基线”。

常见的基线估计方法有三种:取促销前四周同一天的销量均值;用时间序列模型预测(考虑周中周末、节假日、天气);用同店未促销品类作参照。其中最简单的是第一种,也是老王的账房核算方式——把促销前四个周六的销量平均一下,作为这个周六的“应有水平”。

ΔQ=Qpromo−Qbaseline\displaystyle \Delta Q = Q_{\text{promo}} - Q_{\text{baseline}}

1. 读懂实际销量 $Q_{\text{promo}}$:促销期间每天销售量的总和,是账本上直接可以看到的数字。老王只要把活动那天的出货单加总即可。

Qpromo=∑t∈promoqt\displaystyle Q_{\text{promo}} = \sum_{t \in \text{promo}} q_t

2. 估算反事实基线 $Q_{\text{baseline}}$:假设没有促销,同一时间段“本来会发生的”销量。老王用前四个周六的平均销量来估计,这是最朴素的时间序列基线。

Qbaseline=q‾Saturday×N\displaystyle Q_{\text{baseline}} = \overline{q}_{\text{Saturday}} \times N

3. 计算增量 $\Delta Q$:两者相减,得到促销真正带来的净增量。如果增量是负数,说明这次促销不仅没带来新生意,还挤掉了未来的需求。

ΔQ=Qpromo−Qbaseline\displaystyle \Delta Q = Q_{\text{promo}} - Q_{\text{baseline}}

明白了这一层,老王再回头看那次活动的账本:两百斤记录背后,基线可能是 110 斤,真实的增量不过 90 斤。他苦笑道:“以后再也不拿总销量给自己脸上贴金了。”这一句话,正是所有运营人建立增量思维的开始。

因果推断:给成绩单找参照

老王有了增量意识,但他还是拿不准:就算扣掉了周六效应,万一天气突然转暖,大家吃三文鱼的兴致本来就上涨了呢?怎么证明多卖的 90 斤确实是打折的功劳?老王想了个土办法:他在市场的另一头有个摊位,那个摊位不搞促销,每天的自然销量和主摊位差不多。如果主摊位搞促销后销量猛增,而参考摊位波澜不惊,那增长的来源就显而易见了。

这个土办法在因果推断中叫“对照组”:找一个不参与促销但环境条件相似的对象,作为“没有发生促销的平行世界”。促销组的销量变化里同时包含了“促销效应”和“环境趋势”,对照组只有环境趋势,两者相减就干净地分离出促销的因果效应。这就是双重差分(DID)的基本思想,也是促销效果评估最常用的因果推断工具。

当然,实际操作中对照组不一定总是现成的。分店、同城不同区域的顾客群、不同时间段都可以充当对照。如果没有天然对照,还有合成对照法:用多个相似对象的加权组合,拼出一个“虚拟对照组”。DID 有一个重要前提叫“平行趋势假设”——促销前,两组的销量走势应当大致平行,否则差值里就混入了组间固有差异。

DID=(Tafter−Tbefore)−(Cafter−Cbefore)\displaystyle \text{DID} = (T_{\text{after}} - T_{\text{before}}) - (C_{\text{after}} - C_{\text{before}})

1. 计算促销组自身变化 $\Delta T$:促销组在促销后的平均销量减去促销前的平均销量。这个变化里混着促销效应与时间趋势。

ΔT=Tafter−Tbefore\displaystyle \Delta T = T_{\text{after}} - T_{\text{before}}

2. 计算对照组自身变化 $\Delta C$:对照组在同一时间段的前后平均销量差。对照组没搞促销,所以这个变化只包含时间趋势和环境因素。

ΔC=Cafter−Cbefore\displaystyle \Delta C = C_{\text{after}} - C_{\text{before}}

3. 求差中差得到净效应:用促销组的变化减去对照组的变化。老王主摊位多卖的量,减去参考摊位也涨的量,剩下的才是三文鱼打折“逼”出来的额外购买。

DID=ΔT−ΔC\displaystyle \text{DID} = \Delta T - \Delta C

老王把这个思路记在了小本子上。从此他再做促销评估,再也不只盯自家账本,而是习惯性地挂念着别人的生意:“对门的李记水产今天卖了多少?”旁人笑他操心,他却知道自己找到了看穿因果的眼镜。

A/B测试设计:把顾客掷骰子分组

老王虽然会用对照摊位,但总觉得不够严谨——两个摊位位置不同,客流质量也不一样,万一主摊位路过的本来就是爱尝鲜的年轻人呢?他想起在电视上看到过的“双盲实验”:把顾客随机分成两组,一组给打折券,一组不给,其他待遇完全一样。这样两组顾客在统计学上几乎同质,任何销量差异都只能归于促销本身。

这就是 A/B 测试:促销效果评估的黄金标准。设计 A/B 测试时,有三件事必须做好。第一是随机分流,像洗牌一样把用户均匀分到实验组和对照组,避免年龄、地域、消费习惯的偏斜;第二是样本量计算,每组至少要几千甚至上万人,才能检测出有意义的小差异;第三是显著性检验,用统计方法判断观察到的差异是真实信号,还是随机波动。

很多团队最容易犯的错是“中途偷看”:实验跑了两天,发现 A 组转化率明显高,就迫不及待地全量上线。这就像掷硬币时看到前三次正面就觉得硬币有问题——早期样本太小,任何极端结果都可能只是运气。正确的做法是实验前算好需要的样本量,实验过程中只看不决策,跑满之后再下结论。

z=p^1−p^2p^(1−p^)(1n1+1n2)\displaystyle z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1-\hat{p})\left(\frac{1}{n_1} + \frac{1}{n_2}\right)}}

1. 观测两个转化率 $\hat{p}_1$ 与 $\hat{p}_2$:实验组与对照组中发生购买行为的人数占比。它们是促销效果的直观体现。

p^1=购买人数1n1,p^2=购买人数2n2\displaystyle \hat{p}_1 = \frac{\text{购买人数}_1}{n_1},\quad \hat{p}_2 = \frac{\text{购买人数}_2}{n_2}

2. 计算合并转化率 $\hat{p}$:把两组数据合并得到的总转化率,用来估计总体方差的合理水平。

p^=购买总人数n1+n2\displaystyle \hat{p} = \frac{\text{购买总人数}}{n_1 + n_2}

3. 构造 z 统计量:转化率之差除以标准误。标准误越小,说明样本量越充足,差异越可信。

z=p^1−p^2p^(1−p^)(1n1+1n2)\displaystyle z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}(1-\hat{p})\left(\frac{1}{n_1} + \frac{1}{n_2}\right)}}

老王听懂了这套逻辑,干脆把主摊位和参考摊位改成了“轮值实验”:单日打折,双日不打折,月末一对比。虽然不如互联网公司那样精确,但至少从“猜”进阶成了“测”。他不禁感慨:“卖鱼卖到要算概率,我这摊子也算上岸了。”

归因模型选型:功劳簿上怎么记

促销效果不错,老王想知道功劳归谁:这次活动发了 300 份传单、在菜市场微信群吼了三天、还有二十多位老熟客帮忙口头转告。最终来买三文鱼的顾客,有人是看了传单来的,有人是群里看到的,有人是朋友拉来的,还有人其实天天都来。如果要把销量“记功劳”,记在哪个渠道头上?

这就是归因模型要解决的分账问题。归因模型决定了一次转化涉及的多个渠道各自获得多少功劳权重,直接影响促销预算未来的分配方向。最简单的规则是末日点击归因——把全部功劳记在消费者下单前最后一次接触的渠道上,好处是实现简单,坏处也很明显:顾客第一次在群里看到活动种草,后来被传单提醒才来买,功劳却全算给了传单,群运营的贡献被埋没了。

另一种极端是线性归因,把所有渠道一视同仁地平均分配功劳,虽然公允了些,却又过于简单,毕竟不同渠道的作用天然不同。更高级的是数据驱动归因,用算法从历史转化数据中学习每个渠道的边际贡献,比如基于 Shapley 值的方法。它最接近真相,但前提是样本量足够大、数据闭环够完整,否则输出结果还不如简单模型稳定。

Yi=∑j=1mwj×Xij\displaystyle Y_i = \sum_{j=1}^{m} w_j \times X_{ij}

1. 定义渠道曝光矩阵 $X_{ij}$:用户 $i$ 在渠道 $j$ 上是否有过曝光或点击,取值为 0 或 1。老王在记账本上给每个顾客勾选“他/她看过传单吗、在群里吗、被朋友推荐过吗”。

Xij∈{0,1}\displaystyle X_{ij} \in \{0, 1\}

2. 分配渠道权重 $w_j$:所有渠道权重大于零且总和为 1。末日点击模型中,最后一个渠道权重为 1,其余为 0;线性模型中,每个渠道权重相等。

∑j=1mwj=1,wj≥0\displaystyle \sum_{j=1}^{m} w_j = 1,\quad w_j \geq 0

3. 计算用户贡献 $Y_i$:将权重与曝光标记相乘并求和,得到该用户转化“应该记在哪个渠道头上”的分配结果,再按渠道加总就是各渠道的功劳。

Yi=∑j=1mwj×Xij\displaystyle Y_i = \sum_{j=1}^{m} w_j \times X_{ij}

老王把三种归因方式都试了一遍,发现得出的“最佳渠道”各不相同。他索性把三种结论都贴在账本上,旁边批了一行字:“没有绝对正确的功劳簿,只有适合当下决策的分配方案。”这句话后来成了他给同行传授经验时的口头禅。

指标体系:不看热闹看门道

那次“八折促销”虽然带来了 90 斤增量,可月底一算总账,老王发现利润不升反降——八折让利太多,每斤少赚了一截;而且因为促销吸引了一大批贪便宜的新客,退货率也升高了。老王叹道:“单看销量就像只看热闹,热闹背后可能是亏本赚吆喝。”他开始意识到,评估促销不能只看一个数,得建一套指标体系。

指标体系设计的核心原则是“北极星指标打头,护栏指标保底”。北极星指标是这次促销最想达成的目标,比如增量销量、增量利润或者新客数;辅助指标帮助理解北极星为什么会变化,比如转化率、客单价、连带购买率;护栏指标则监控促销带来的副作用,比如退货率、售后投诉率、老客流失率。没有护栏,促销可能在拉升销量的同时悄悄侵蚀品牌资产。

指标还可以按维度拆解:按渠道看哪个推广通道的 ROI 最高,按品类看三文鱼带动了多少鲈鱼、带鱼销售,按客群看新客和老客各自贡献了多少增量。拆解的维度越细,越容易定位问题出在哪里——是折扣不够狠,还是宣传没触达对的人。

ROI=ΔQ×m−CpromoCpromo\displaystyle \text{ROI} = \frac{\Delta Q \times m - C_{\text{promo}}}{C_{\text{promo}}}

1. 计算增量利润 $P_{\text{inc}}$:用增量销量乘以单位边际利润,即每卖出一斤三文鱼能赚的钱。这里用的是“增量”而非总量,否则会高估促销回报。

Pinc=ΔQ×m\displaystyle P_{\text{inc}} = \Delta Q \times m

2. 扣除促销成本 $C_{\text{promo}}$:促销总成本不仅包含折扣让利,还包括物料印制、人力投入和渠道投放费用。

Cpromo=Cdiscount+Cmaterial+Clabor\displaystyle C_{\text{promo}} = C_{\text{discount}} + C_{\text{material}} + C_{\text{labor}}

3. 归一化为 ROI 比率:净利润除以成本,得到每投入一块钱促销费用能换回多少增量利润。ROI 大于 1 说明促销赚钱,小于 1 则是在做亏本吆喝。

ROI=Pinc−CpromoCpromo\displaystyle \text{ROI} = \frac{P_{\text{inc}} - C_{\text{promo}}}{C_{\text{promo}}}

老王把指标贴在案板旁边:销量要看,毛利要看,退货也要看。他说这就像看一条鱼新不新鲜——光看个头没用,得翻鳃、按肚子、闻味道,几个指标缺一不可。从那以后,他再也不提“今天我们卖出两百斤”这种外行话了。

报告自动化:让账房先生下班

活动复盘要做的计算越来越多:增量、DID、ROI、渠道归因、指标拆解……老王每周六都要蹲在柜台后面忙活三个小时,还被媳妇笑“算账比卖鱼还累”。他开始琢磨:这些重复性的统计汇总,能不能像电动绞肉机一样,一键自动完成?

报告自动化就是把评估过程从“手工劳作”变成“流水线作业”。数据管道(ETL)负责每天自动从收银系统、会员系统、渠道后台抽取销售数据,清洗掉退款记录和异常值,再计算好当天的销量、增量基线、转化率等指标;定时任务负责每天凌晨自动触发这个管道;拿到数据后,还可以用异常检测算法标出那些异动日期——比如某天销量突然掉了 30%,系统自动标记并推送给运营人员。

自动化报表不仅是把数字堆到一张表上,更要把“所以呢”写出来:销量较基线上涨了 15%,增量主要来自微信群渠道,退货率环比上升了 2 个百分点,建议关注促销商品质量问题。这样决策者早上打开手机就能看到一份“能直接开会讨论”的报告。

zanomaly=∣xt−μ∣σ\displaystyle z_{\text{anomaly}} = \frac{|x_t - \mu|}{\sigma}

1. 建立历史基准 $\mu$ 与 $\sigma$:取过去四周同一时段的销量数据,计算均值和标准差,作为“正常波动范围”的参照系。

μ=1n∑t=1nxt,σ=1n−1∑t=1n(xt−μ)2\displaystyle \mu = \frac{1}{n}\sum_{t=1}^{n} x_t,\quad \sigma = \sqrt{\frac{1}{n-1}\sum_{t=1}^{n}(x_t-\mu)^2}

2. 计算当期偏移量:用当期值 $x_t$ 与历史均值 $\mu$ 的绝对距离来量化“今天有多反常”。

dt=∣xt−μ∣\displaystyle d_t = |x_t - \mu|

3. 归一化得到 z 得分:将偏移量除以标准差。如果今天的销量突然暴涨或暴跌,z 值就会超过阈值,系统自动提示老王“出事了”。

zanomaly=∣xt−μ∣σ\displaystyle z_{\text{anomaly}} = \frac{|x_t - \mu|}{\sigma}

老王最终请程序员邻居帮忙搭了一个自动报表模板,每天早上八点准时把前一天的经营日报发到手机上。他乐呵呵地说:“这就像雇了个不睡觉的账房先生。”不过他也明白,报表能告诉他“发生了什么”,却回答不了“该怎么办”——那个问题,仍然需要他亲自想。

策略迭代:让促销越做越聪明

有了自动报表,老王的账本越攒越厚。翻看半年的促销记录,他惊喜地发现一些规律:“满 100 减 20”比“八折”更能让顾客连带买配菜;周五傍晚发微信群折扣码,比周六早上发效果翻倍;给三个月没来的老客发专属优惠,比给天天来的熟客发更能唤醒沉默需求。老王说:“以前促销是拍脑袋,现在促销是看台账,越做越有底气。”

策略迭代是促销效果评估的终点,也是下一轮促销的起点。复盘模板是必备工具:每次促销结束,系统自动生成包含增量、ROI、各渠道归因、各客群贡献的报告,运营团队开会对照目标找差距。优惠券设计则可以利用增量预测模型测算不同折扣档位的利润曲线,找到利润最大化的优惠阈值。人群圈选最关键——促销预算应该倾向“给优惠才买”的价格敏感人群,而不是花在“不打折也会买”的品牌忠粉身上。

max⁡d π(d)=(p−c−d)⏟每斤毛利×(Qb+E(d))⏟促销期销量−Cpromo\displaystyle \max_{d} \ \pi(d) = \underbrace{(p - c - d)}_{\text{每斤毛利}} \times \underbrace{\left(Q_b + E(d)\right)}_{\text{促销期销量}} - C_{\text{promo}}

1. 构造利润函数 $\pi(d)$:总利润 = 每斤毛利 × 促销期销量 − 促销成本。其中 $d$ 是每斤折扣金额,是我们要优化的变量。

π(d)=(p−c−d)×(Qb+E(d))−Cpromo\displaystyle \pi(d) = (p - c - d) \times (Q_b + E(d)) - C_{\text{promo}}

2. 理解销量响应函数 $E(d)$:增量销量随折扣加深而增加,但增加速度会逐渐放缓(边际递减)。老王发现,打九折多卖 10 斤,打八折可能只再多卖 8 斤。

E(d)=k×ln⁡(1+d),k>0\displaystyle E(d) = k \times \ln(1 + d), \quad k > 0

3. 求一阶条件得到最优折扣 $d^*$:对利润函数关于 $d$ 求导并令其为零。导数等于零的点,是边际利润由正转负的临界点,也是利润最大的折扣力度。

dπdd=0⇒d∗=k(p−c)Qb+k−1\displaystyle \frac{d\pi}{dd} = 0 \Rightarrow d^* = \frac{k(p-c)}{Q_b + k} - 1

老王把这套逻辑当成了自己的经营圣经。他常说:“促销不害怕失败,只怕失败了还不知道为什么。”每一次评估、每一次复盘,都让下一次促销更聪明一点——他的鱼摊生意也就在这个循环里,从一家小店变成了市场里最赚钱的摊位。

AI 应用场景

连锁超市的促销复盘助手

阶段:数据分析与决策支持

解决的问题:传统运营团队靠“促销期破纪录销量”判断成败,混淆周末效应、天气因素与真实增量。AI 助手自动完成双重差分增量估计、多渠道归因与 ROI 计算,把一周的复盘工作压缩到几分钟。

具体案例:某区域连锁超市每月同时运行 120 档促销,过去业务分析师用 Excel 手工估算增量,每档要花半天。上线 AI 复盘助手后,系统每日凌晨自动抽取各门店 POS 数据、天气和节假日特征,对每档促销产出增量销量、增量利润和综合健康度得分,并自动标注异常门店。

电商大促的 A/B 实验平台

阶段:模型部署与在线实验

解决的问题:平台担心业务方在 A/B 实验中途“偷看数据”过早做出决策,导致误判。实验平台自动计算最小样本量和实验所需天数,到了时间节点才开放结果,并输出显著性与置信区间。

具体案例:某电商平台双十一前对“满 300 减 50”和“第二件半价”两种促销方案做用户级随机分流。两周后系统判定实验组转化率提升 1.2 个百分点,p 值小于 0.01,并自动生成归因报告——增量主要来自女性护肤品品类。

品牌方的促销预算智能分配

阶段:预测与优化

解决的问题:品牌方预算有限,不知道把优惠券发给谁最划算。用历史购买数据和增量响应模型对用户分层,把优惠券定向投放给“有优惠才买”的弹性人群,减少对“不打折也买”的忠诚用户让利。

具体案例:某美妆品牌用增量模型把用户分为四类,只给高价格敏感人群发放 15% 折扣券,同时取消了对忠诚用户的统一折扣。两轮大促后,营销 ROI 提升 40%,品牌毛利总额提升 22%。

Python 演示

python34 行
import numpy as np class PromotionEvaluator:    def __init__(self, seed=42):        self.rng = np.random.RandomState(seed)        self.sales_promo = None        self.sales_control = None     def simulate_data(self, n_days=28, promo_effect=12):        n_pre = n_days // 2        season = 5 * np.sin(np.arange(n_days) / 4)        self.sales_control = 50 + season + self.rng.normal(0, 4, n_days)        self.sales_promo = 50 + season + self.rng.normal(0, 4, n_days)        self.sales_promo[n_pre:] += promo_effect        return self     def estimate_did(self):        n_pre = len(self.sales_promo) // 2        diff_promo = self.sales_promo[n_pre:].mean() - self.sales_promo[:n_pre].mean()        diff_control = self.sales_control[n_pre:].mean() - self.sales_control[:n_pre].mean()        return diff_promo - diff_control     def estimate_roi(self, margin=12, promo_cost=600):        increment = self.estimate_did()        profit = increment * 28 * margin        return (profit - promo_cost) / promo_cost  if __name__ == "__main__":    ev = PromotionEvaluator(seed=42).simulate_data(promo_effect=12)    inc = ev.estimate_did()    roi = ev.estimate_roi()    print("促销组日均增量: {:.2f} 斤".format(inc))    print("28天促销ROI: {:.2f}".format(roi))
目的:模拟“老王鱼摊”式促销场景——促销组与对照组各 28 天销量数据,用双重差分估计促销的真实日均增量,并换算成促销 ROI。
  1. self.sales_promo = 50 + season + self.rng.normal(0, 4, n_days)生成促销组每日销量:基线 50 斤 + 季节性波动 + 随机噪声。
  2. self.sales_promo[n_pre:] += promo_effect促销期后 14 天叠加真实促销效应,相当于老王打折后每天多卖的斤数。
  3. diff_promo = self.sales_promo[n_pre:].mean() - self.sales_promo[:n_pre].mean()促销组促销前后均值差,这是观察到的“总变化”。
  4. diff_control = self.sales_control[n_pre:].mean() - self.sales_control[:n_pre].mean()对照组同期前后均值差,用来捕捉天气和季节因素。
  5. return diff_promo - diff_control双重差分核心:两组变化之差就是促销的净增量。
  6. profit = increment * 28 * margin把日均增量乘以活动天数再乘以每斤毛利,得到整个促销期的增量利润。
  7. ev = PromotionEvaluator(seed=42).simulate_data(promo_effect=12)用固定随机种子模拟 28 天数据,设置每天 12 斤的真实促销效应。

常见误区

误区“这次促销卖了两百斤,比平时翻倍,肯定是大成功!”

正解翻倍不等于多赚,因为其中包含大量“本来就会发生”的销量。更关键的是,促销可能只是把下个月的购买提前到这个月,这种“寅吃卯粮”会制造虚假繁荣。正确做法是计算增量销量和增量利润,并追踪促销期后的销量是否回落——如果回落幅度补偿了增量,说明需求只是被透支了。

为何常见:总销量是最容易看到、最容易汇报的数字,人的本能倾向用直观数字证明自己工作有效,忽略了反事实对比。

误区“实验跑了三天,A 组转化率已经明显高于 B 组,赶紧全量上线吧!”

正解小样本下的差异极可能是随机波动。提前停止会让结果偏向“正巧早期表现好”的方案,这是经典的“偷看数据”偏差。正确流程是实验前算好所需样本量,周期内只看过程监控指标,等跑完再下结论。

为何常见:决策者压力大、进度紧,看到预期中“应该赢”的一组领先时,会不自觉地想缩短验证时间。

误区“我们有算法,应该用数据驱动归因,它最精准。”

正解数据驱动归因依赖大量高质量的转化样本,否则学习出的权重方差很大,结果甚至不如简单的线性归因稳定。样本少、渠道间数据未打通、用户标识不一致时,规则模型反而更可靠。模型选择应该和样本规模与业务阶段匹配。

为何常见:业界倾向于神化“ AI 和算法”,认为模型越复杂越先进,忽略了统计模型对数据量的硬性要求。

误区“我们上了 Power BI 自动报表,促销效果评估已经全部自动化了。”

正解自动报表解决的是“描述性统计”——发生了什么;评估自动化还需要“因果推断”——为什么发生、增量是多少。纯粹的数据看板不会自动告诉你周末效应是否被剔除、增量是否显著。真正成熟的方案是把 DID 增量计算、显著性检验和归因分析也编排进管道。

为何常见:报表工具可视化效果强,容易让团队产生“我们已经数字化”的错觉,忽略了评估背后需要统计设计。

面试题

Q1. 促销效果评估最核心的思维是?

单选题 · easy

  • A.统计促销期总销量
  • B.识别促销真实增量← 正确答案
  • C.核算促销总成本
  • D.绘制销量趋势曲线

答案:B。评估促销效果不能只看总销量,因为总销量里包含自然销量。核心是把促销期实际销量与反事实基线对比,识别出真正由促销带来的增量。C 虽然重要,但只是 ROI 计算的输入之一;A 和 D 属于描述性统计,不能回答“促销是否有效”的问题。

Q2. 反事实基线指的是?

单选题 · easy

  • A.促销期的实际销量
  • B.促销期的实际利润
  • C.无促销下的预计销量← 正确答案
  • D.竞争对手的同期销量

答案:C。反事实基线回答“假设没有促销,这个时间段本来会卖多少”,它并不存在于现实中,只能通过历史数据、对照组或模型推测。A 和 B 是促销期的观察值,D 是外部参照信息,都不是对自身基线的估计。

Q3. 双重差分法能消除的干扰因素是?

单选题 · mid

  • A.促销物料成本的差异
  • B.共同环境趋势的影响← 正确答案
  • C.顾客性别的结构差异
  • D.产品定位的固有差异

答案:B。DID 通过“促销组前后差 − 对照组前后差”把两组共同经历的时间趋势、季节因素剔除掉,这正是对照组存在的意义。A、C、D 涉及的都是组间固有差异,需要用随机分流或分组设计来解决,而不是 DID。

Q4. 显著性水平 0.05 对应的双侧 z 阈值为?

单选题 · mid

  • A.1.00
  • B.1.50
  • C.1.96← 正确答案
  • D.3.00

答案:C。标准正态分布下,95%置信区间对应的临界值是 1.96,即 |z|>1.96 时认为差异显著。1.00 和 1.50 对应更宽松的置信水平,检验结果更容易出现假阳性;3.00 对应 99.7% 的置信水平,过于保守,常用于异常检测场景。

Q5. 末次点击归因模型最大的缺点是?

单选题 · mid

  • A.计算流程非常复杂
  • B.忽视前期渠道贡献← 正确答案
  • C.需要大量数据支撑
  • D.无法在线实时应用

答案:B。末次点击把全部功劳记在转化前的最后一个渠道上,用户可能先被微信群种草、后被传单唤醒,功劳却全归传单。它实现简单、计算成本低、不需要大量数据,因此答案 B 正确,A/C/D 描述的是其他模型的问题。

Q6. 护栏指标的主要作用在于?

单选题 · mid

  • A.监测促销负面效应← 正确答案
  • B.提升整体销售额度
  • C.扩大实验样本容量
  • D.降低广告投放费用

答案:A。护栏指标是那些“不希望变坏”的底线指标,如退货率、投诉率、老客流失率等,防止促销在拉高销量同时损害品牌和体验。B 是北极星指标的职能,C 和 D 与指标体系设计无关。

Q7. 促销 ROI 的正确计算方式是?

单选题 · easy

  • A.促销期总收入除以促销成本
  • B.增量利润除以促销成本← 正确答案
  • C.总利润除以总成本投入
  • D.增量销量除以促销期总销量

答案:B。ROI = 净回报/投入,促销场景下净回报必须用增量利润(增量销量×单位毛利−促销成本),不能用总收入或总利润,否则会高估效果。A 忽略了成本,C 混入了自然销量产生的利润,D 只是增量占比,都不是经济回报率。

Q8. 可用于估计促销增量效果的方法包括?

多选题 · mid

  • A.双重差分估计法← 正确答案
  • B.历史基线法估计← 正确答案
  • C.末次点击归因法
  • D.合成对照法估计← 正确答案

答案:ABD。DID、历史基线法、合成对照法都能构造反事实参照,从而估算增量;A 用对照组差值剔除环境趋势,B 用历史均值做基线,D 用多个对象加权拟合虚拟对照。C 解决的是“功劳分配给谁”的归因问题,属于增量产生之后的功劳分账,不是增量估计方法。

Q9. A/B 测试设计中正确做法包括?

多选题 · hard

  • A.实验前先算最小样本量← 正确答案
  • B.随机分流保证两组同质← 正确答案
  • C.实验中途显著应立即停止
  • D.实验前设定显著性水平← 正确答案

答案:ABD。规范的 A/B 测试应该在实验前确定样本量、显著性水平和实验时长,用随机分流保证可比性。中途发现显著就停止属于“偷看数据”,会引入偏差并增加假阳性概率。因此 A、B、D 正确,C 是典型的操作误区。

Q10. 关于数据驱动归因模型的正确说法是?

多选题 · extreme

  • A.需要充足样本支撑← 正确答案
  • B.算法自动寻找渠道权重← 正确答案
  • C.小数据下依然很稳定
  • D.常用 Shapley 值实现← 正确答案

答案:ABD。数据驱动归因用算法从历史转化数据中学习渠道贡献,常见的实现包括 Shapley 值和各类回归模型,因此 B、D 正确。但这依赖充足的样本和完整的数据闭环,A 正确。它参数多、方差大,在小数据场景下结果不稳定,C 说法错误。