📊 第1章 数据分析基础
📄 一句话概括

A 组 5000 人下 160 单(3.20%),B 组 5000 人下 205 单(4.10%),差 0.90 个百分点。 算出差值只是第五步。第六步要回答:这点差是不是抽样的抖动?答案是 p = 0.0164,不是。 后面两步同样重要:把 p 值翻译成人话给要拍板的人,再把适用范围说窄一圈。

📝 本章和前面几章的关系

上一篇走到「数据洗干净」,这一篇从算开始,一直到给结论。 四步里第二步(验证)最容易被跳过,也最容易被做过头。这一篇把「够用」的界线画出来。

一、第五步:分析——先算两个转化率

新版页面 A 组,5000 个访客,160 单,转化率 3.20%。 旧版页面 B 组,5000 个访客,205 单,转化率 4.10%。 差值 0.90 个百分点,相对提升 28.1%(0.90 ÷ 3.20)。两个说法都对,看对方习惯哪个。

到这儿只有两个数,还没有结论。0.90 个百分点可能是真的,也可能是抽样的抖动。 为什么可能是抖动?因为两组各只有 5000 人,换成另外 5000 人,转化率一定不一样。

二、第六步:验证——这点差是不是碰巧

要判断「是不是碰巧」,得先算一个基准:如果两组其实没差别,差值的波动该有多大。 先把两组并起来算合并转化率:365 ÷ 10000 = 0.0365。这就是「没差别」时两组的共同水平。 再算标准误:按这个水平,每组 5000 人能带来多大的随机波动。结果是 0.00375。

把观察到的差除以标准误,得到 z = 2.400。这个数说的是「差了 2.4 个标准误」。 换成 p 值:0.0164。读法是——如果两组真没差别,只有 1.64% 的机会看到这么大的差。 p 小于 0.05,所以这点差别不太可能是抽样抖出来的。 这一步就把「看着更好」变成了「好到不像碰巧」。

三、为什么样本量能决定结论

同样的 3.20% 对 4.10%,如果每组只有 1000 人,结论会整个反过来。 这时标准误是 0.00839,z 只有 1.07,p 值 0.2832——什么也说明不了。 样本量从 1000 加到 5000,标准误从 0.00839 缩到 0.00375,同一个差距才「说得响」。

差别的大小决定它值不值得信,样本量决定你能不能看出来。两件事,别混。 实践含义很直接:小样本实验得出「没差别」,往往不是真没差别,是看不出来。

四、第七步:呈现——两种说法

给运营的一句话:【新版转化率 4.10%,旧版 3.20%,按一千个人折算多出 9 单;这个差距不太可能是巧合。 】 给要复核的人:z = 2.400,双侧 p = 0.0164,样本各 5000。这些放脚注。 两层说法不是遮掩,是分工:一层给要拍板的人(记住一句话),一层给要复核的人(能自己核)。

只给第一层,别人没法核;只给第二层,老板不知道该怎么办。两层都要写,只是分开写。

五、第八步:应用——范围比结论窄一圈

能用:同样的商品页、同样的流量来源,继续用新版。 不能用:换个品类、换个渠道、换个季节,都得重测。这次的样本只覆盖了一种场景。 为什么?因为转化率的差别可能来自页面上的某句话,而那句话在不同品类里效果不同。

应用范围永远比结论本身窄一圈。把范围说小一点,是负责,不是保守。

六、四步是来回走,不是一遍过

教材把它们排成 5、6、7、8,像是流水线。实际做起来是个圈。 验证不通过,往往要回第五步换个算法重新算;呈现被问住了,常常要回第六步补一个检验。 第八步「应用」还会生出新的问题,成为下一轮的第一步。

所以这四步该记成一套检查清单,不是一张流程图——每一条都问过一遍,就可以交出去了。

七、动手 Demo:分析、验证、呈现、应用:四步各干什么

两组各 5000 人,160 单对 205 单。先算转化率和差值,再算 z 与 p。 顺手算一遍「如果每组只有 1000 人」会怎样,用同一批比例,只改样本量。

import math

A_N, A_K = 5000, 160
B_N, B_K = 5000, 205
pa, pb = A_K * 1.0 / A_N, B_K * 1.0 / B_N

print("A 组 %.2f%%,B 组 %.2f%%" % (pa * 100, pb * 100))
print("差值 %.2f 个百分点,相对提升 %.1f%%"
      % ((pb - pa) * 100, (pb - pa) * 100.0 / pa))

p = (A_K + B_K) * 1.0 / (A_N + B_N)
se = math.sqrt(p * (1 - p) * (1.0 / A_N + 1.0 / B_N))
z = (pb - pa) / se
pv = 2 * (1 - 0.5 * (1 + math.erf(abs(z) / math.sqrt(2))))
print("合并转化率 %.4f,标准误 %.5f,z = %.3f" % (p, se, z))
print("双侧 p 值 %.4f" % pv)

se1 = math.sqrt(p * (1 - p) * (2.0 / 1000))
z1 = (pb - pa) / se1
pv1 = 2 * (1 - 0.5 * (1 + math.erf(abs(z1) / math.sqrt(2))))
print("若每组只有 1000 人:z = %.2f,p = %.4f" % (z1, pv1))

实跑输出:

--------------------------------------------------------------------
分析、验证、呈现、应用:四步各干什么
--------------------------------------------------------------------

  ① 分析:先算两个转化率
  --------------------------------------------------------------------
  新版页面 A 组 5000 人下 160 单,转化率 3.20%。
  旧版页面 B 组 5000 人下 205 单,转化率 4.10%。
  差值 0.90 个百分点,相对提升 28.1%。
  ! 到这儿只有两个数,还没有结论。差 0.9 个百分点,可能是真的,也可能是抽样的抖动。

  ② 验证:这点差别是不是碰巧
  --------------------------------------------------------------------
  合并转化率 0.0365,标准误 0.00375,z = 2.400。
  双侧 p 值 0.0164。
  p 小于 0.05,这点差别不太可能是抽样抖出来的。
  ! 验证这一步的用处:把「看起来更好」变成「好到不像碰巧」。

  ③ 呈现:把 p 值翻译成人话
  --------------------------------------------------------------------
  给运营的话:【新版转化率 4.10%,旧版 3.20%,按一千个人折算多出 9 单;这个差距不太可能是巧合。】
  原文里的 z 和 p 放在脚注,谁想核谁去核。
  ! 同一件事,两层说法:一层给要拍板的人,一层给要复核的人。

  ④ 补一句:为什么样本从一千加到五千才说得响
  --------------------------------------------------------------------
  同样的 3.20% 对 4.10%,如果每组只有 1000 人,z 只有 1.07,p 值 0.2832,什么也说明不了。
  样本量翻五倍,标准误从 0.00839 缩到 0.00375,同一个差距才从「看着像」变成「说得响」。
  ! 差别的大小决定它值不值得信,样本量决定你能不能看出来。两件事,别混。

  ⑤ 应用:这个结论能用到哪儿,不能用到哪儿
  --------------------------------------------------------------------
  能用:同样的商品页、同样的流量来源,继续用新版。
  不能用:换个品类、换个渠道、换个季节,都得重测——这次的样本只覆盖了这一种场景。
  ! 应用范围永远比结论本身窄一圈。把范围说小一点,是负责,不是保守。

  ⑥ 四步的分工
  --------------------------------------------------------------------

| 步骤 | 回答的问题 | 这一步的产物 |
|---|---|---|
| 分析 | 两个数差多少 | 两个转化率、一个差值 |
| 验证 | 这点差是不是碰巧 | 一个 p 值 |
| 呈现 | 老板该记住哪句话 | 一句话加一张表 |
| 应用 | 结论能用到哪 | 一张适用范围清单 |

  ! 四步里最容易被跳掉的是「验证」,最容易被做过头的也是「验证」。够用就行。

math.erf 是标准库自带的正态分布积分,不用装 scipy 也能算 p 值。 z 和 p 是同一件事的两种说法:z = 2.400 说的是「差了几个标准误」, p = 0.0164 说的是「这种差有多罕见」。报其中一个就够,两个都报也没错。

30 秒实验

  1. 把 B 组的下单数从 205 改成 175,p 值变成多少?还显著吗?
  2. 如果把样本量加到 20000 人,同样的比例,z 会变成多少?这说明什么?
  3. 想一想:p 值小,能说明「新版页面更好」吗?还是只能说明「两组不一样」?

常见误区

  1. 只报差值不报 p 值:不验证的差别,可能只是抽样抖动。
  2. p 大就说「没差别」:p 大只说明「看不出来」,样本量不够时看不出来很正常。
  3. p 小就宣布因果:显著性只说两组不一样,不说为什么不一样。
  4. 把应用范围说大:一个场景测出来的结论,换个场景就得重测。
自测三问(点开对答案) 1. z = 2.400 该怎么读? —— 观察到的差是标准误的 2.4 倍。标准误衡量的是随机波动,倍数越大越不像碰巧。 2. 为什么样本从 1000 加到 5000,结论会反过来? —— 因为标准误随样本量下降。同样的差距,在小样本里被噪声淹没,在大样本里就浮出来了。 3. 「呈现」为什么要有两层说法? —— 一层给拍板的人,只需一句话;一层给复核的人,需要能自己算。混在一起,两边都不满意。

八步走完了。最后剩一个绕不开的问题:这些活用 Excel 还是用 Python? 下一篇把两种干法的步数摆出来数一遍。

相关笔记