📈 第2章 实验
📄 一句话概括

实验组均值 −3.00%,控制组 −11.00%,差 8 个点。这个差会不会只是碰巧? 把八个数洗牌五千次,看「差到 8 个点以上」出现多少次:67 次,p ≈ 0.0134。 结论要写成「多撑住 8 个点」,不能写成「涨了 8 个点」——这个区别在汇报时非常要紧。

📝 本章和前面几章的关系

这是第 2 章的收尾。 整章走了一条线:观察数据 → 比较 → 混杂 → 拆不动 → 做实验 → 随机分组 → 检验。 这套流程是全书最通用的一个:第 5 章(假设检验)、第 6 章(贝叶斯)都是它的变体。

一、先摆事实

实验组四家:−1.0%、−4.0%、−2.0%、−5.0%,均值 −3.00%。 控制组四家:−10.0%、−12.0%、−9.0%、−13.0%,均值 −11.00%。 差 8.00 个点。三行数,没有形容词。

二、置换检验在做什么

问一个问题:假如降价完全没用,这两组本来就该一样,那「差 8 个点」这件事有多罕见? 做法是:把八个数混在一起洗牌,重新分成两组,算差值。重复五千次。 五千次里,有 67 次差到 8 个点以上,占 1.34%。这就是 p 值。

p 值不是「降价有效的概率」,是「假如无效,还能看到这么大差别的概率」。

三、p 值怎么读

p 值 一种读法 别读成
0.5 这差别很常见,说明不了什么 「一半概率有效」
0.05 二十次里一次,勉强算个信号 「95% 确定」
0.01 一百次里一次,可以动手了 「一定有效」

p 值只回答「碰巧的可能性有多大」,不回答「效果有多大」「值不值得做」。

四、结论的措辞

对:降价让销售额比不降价多撑住 8 个百分点。 错:降价让销售额涨了 8 个百分点。 差别在于行业在跌。降价只是跌得慢,不是涨。这个区别在汇报时非常要紧——

说成「涨」,客户下个月就会问为什么没涨;说成「多撑住」,客户知道这是在止血。

五、结论的边界

这八家店、这一个月、这个价格带,降价多撑 8 个点。 能不能推到所有门店?不能,样本太小、时间太短。 能不能说降价是唯一原因?不能,店长、天气、竞品都在场。

实验给你的是一个范围内的因果,不是一个放之四海的定律。

六、动手 Demo:结果在此:8 个百分点是真的吗

置换检验:把八个数洗牌五千次,看比观测差值更极端的情况出现多少次。 最后那几行是结论的写法——同一个数,措辞差一个字,含义差很远。

import random
exp = [-1.0, -4.0, -2.0, -5.0]
ctl = [-10.0, -12.0, -9.0, -13.0]
obs = sum(exp) / 4 - sum(ctl) / 4

pool = exp + ctl
rnd = random.Random(600)
cnt = 0
N = 5000
for _ in range(N):
    p = pool[:]
    rnd.shuffle(p)
    if sum(p[:4]) / 4 - sum(p[4:]) / 4 >= obs - 1e-9:
        cnt += 1
print('观测差值 %+.2f 个点' % obs)
print('洗牌 %d 次,更极端或相等 %d 次' % (N, cnt))
print('p = %.4f' % (cnt / float(N)))

实跑输出:

--------------------------------------------------------------------
结果在此:8 个百分点是真的吗
--------------------------------------------------------------------

  ① 先把两组的变化摆出来
  --------------------------------------------------------------------
  实验组四家店的变化:-1.0%、-4.0%、-2.0%、-5.0%
  控制组四家店的变化:-10.0%、-12.0%、-9.0%、-13.0%
  均值:-3.00% 对 -11.00%

  ② 差 8 个点,会不会是碰巧
  --------------------------------------------------------------------
  把八个数洗牌五千次,看「差至少 8.00 个点」出现多少次
  出现 67 次,p ≈ 0.0134
  ! p 值的意思是:假如降价完全没用,还能看到这么大差别的概率。
  0.0134 表示:一千次里不到 13 次。这个差别不太可能是碰巧。

  ③ 结论怎么写
  --------------------------------------------------------------------
  降价让销售额比不降价多撑住 8 个百分点。
  注意措辞:是「多撑住」,不是「涨了」——行业在跌,降价只是跌得慢。
  这个区别在汇报时非常要紧:说成「涨了」,客户下个月就会问为什么没涨。

  ④ 结论的边界
  --------------------------------------------------------------------

| 能说的 | 不能说的 |
|---|---|
| 这八家店、这一个月,降价多撑 8 个点 | 所有门店、所有季节都成立 |
| 降价对社区店和商圈店方向一致 | 降价对所有品类(咖啡/轻食)都有效 |
| 这个差别不太可能是随机波动 | 降价是唯一原因(还有店长、天气、竞品) |

  实验给你的是一个范围内的因果,不是一个放之四海的定律。

p ≈ 0.0134,也就是一千次里大约 13 次。这个差别不太可能是碰巧。 注意这是单侧检验:我们问的是「降价比不降好这么多」有多罕见,不是「有差别」有多罕见。

30 秒实验

  1. 把实验组全部加 2(效果减半),p 会变成多少?
  2. 把样本从 4 对 4 扩大到 40 对 40(自己复制十份加噪声),p 会怎么变?
  3. 想一想:如果 p = 0.06,你会怎么向董事会汇报?

常见误区

  1. 把 p 值当效果大小:p 小只说明「不像碰巧」,不说明「效果很大」。
  2. 多做几次直到 p 小于 0.05:这叫 p-hacking,是数据造假的一种。
  3. 说成「涨了」:行业在跌,降价只是跌得慢,措辞错了会误导下一步决策。
  4. 把结论推广到样本外:八家店一个月的结果,推不到全国、推不到全年。
自测三问(点开对答案) 1. 置换检验的思路是什么? —— 假设处理无效,把两组合并后反复随机重分,看观测到的差值在这种「无效世界」里有多罕见。 2. p = 0.0134 该怎么读? —— 假如降价完全无效,还能看到 8 个点这么大差别的概率约为 1.34%。 3. 为什么不能说「降价让销售额涨了 8 个点」? —— 因为两组都在跌,降价只是跌得更慢。「多撑住 8 个点」和「涨了 8 个点」是两件事。

第 2 章到此结束。 下一章换个问题:不是「有没有用」,而是「在有限资源里怎么配最好」——那要靠最优化。

相关笔记