📈 第9章 直方图
📄 一句话概括

整体是双峰,拆开来看两组各自都是单峰——这说明双峰不是巧合,是两套机制叠在一起。 普调组 40 人平均 4.45%,谈过加薪组 15 人平均 9.75%,差 5.30 个百分点。 按 8000 元月薪算,这 5.30 个点等于一年 5085 元。但这是相关,不是因果。

📝 本章和前面几章的关系

上一篇把箱宽折腾了一遍。这一篇换个方向:不改宽度,改数据范围——只看一部分人。 「按子集画直方图」是书里的原话。它对应的是分析里最常见的一个动作:分群看。

一、把数据拆开

回到那个双峰:如果这批人真来自两类过程,拆开看就该各自是单峰。 按「加薪幅度是否超过 7%」拆成两组:一组 2.5% 到 6.4%,一组 8.0% 往上。 这一步严格说有点作弊——用结果去分组,等于先知道答案再分类。

真实分析里该按「与结果无关」的维度拆:部门、职级、入职年限、有没有提交加薪申请。

二、拆开之后的形状

分组 人数 平均 最低 最高
普调组 40 4.45% 2.5% 6.4%
谈过加薪组 15 9.75% 8.0% 11.5%

普调组跨度 3.9 个点,谈判组跨度 3.5 个点,两组内部的散布都不大。 组间差了 5.30 个百分点——这就是双峰的来源。两个窄峰叠在一起,就成了一个宽的双峰。 各画一张直方图,每组都是单峰。这反过来验证了「两类过程」这个猜测。

三、谈判有没有回报

谈过加薪的 15 人平均 9.75%,没谈的 40 人平均 4.45%,差 5.30 个百分点。 按 8000 元月薪算:每月多 424 元,一年 5085 元。 这个数很扎眼,但它撑不起「谈判能让你多拿 5.3 个点」这个结论。

因为敢谈的人,可能本来就绩效更好、岗位更关键、更会表达。 这些因素同时影响「谈不谈」和「加多少」。

四、要判因果,得怎么办

第一条路:随机对照。随机让一半人去谈、一半人不谈,再看结果。公司里基本做不到。 第二条路:看同一个人谈前谈后。这能排除「人本身」的差异,但排除不了「那年公司效益好」。 第三条路:找自然实验。比如某年公司突然开放「自主申请调薪」窗口,等于给了一批人一个外生的机会。

三条路的共同点:都要让「谈不谈」这件事不受本人特质影响。做到这一点,才谈得上因果。

五、谈判要求加薪对你意味着什么

对个人:同样的绩效,谈和不谈差 5.30 个点,一年 5085 元。这个数不大,但它每年都会复利。 对公司:两套并行的加薪机制,会让薪酬结构越来越散,最后没法用「一个平均数」管。 对分析:这是「先看形状」最实际的回报——如果只看平均 7.24%,你根本发现不了这里有两套机制。

形状告诉你有几套机制,平均只告诉你中心在哪。

六、动手 Demo:只看子集,形状可能完全不同

把 60 条记录拆成两组,各组算人数、平均、极值、跨度。 再把两组画在同一张图上,看它们的区间有没有重叠。

BASE = [round(2.5 + 0.1 * i, 1) for i in range(40)]
NEGO = [round(8.0 + 0.25 * i, 1) for i in range(15)]

def mean(v):
    return sum(v) / float(len(v))

for nm, sub in (("普调组", BASE), ("谈过加薪组", NEGO)):
    print("%-6s 人数 %2d  平均 %.2f%%  最低 %.1f%%  最高 %.1f%%  跨度 %.1f"
          % (nm, len(sub), mean(sub), min(sub), max(sub), max(sub) - min(sub)))

gap = mean(NEGO) - mean(BASE)
print()
print("组间差 %.2f 个百分点" % gap)
print("按 8000 元月薪:每月多 %.0f 元,一年 %.0f 元"
      % (8000 * gap / 100, 12 * 8000 * gap / 100))
print("两组区间重叠吗:%s" % ("重叠" if min(NEGO) <= max(BASE) else "不重叠"))

实跑输出:

--------------------------------------------------------------------
只看子集,形状可能完全不同
--------------------------------------------------------------------

  ① 把数据拆开
  --------------------------------------------------------------------
  回到那个双峰:如果这批人真来自两类过程,拆开看就该各自是单峰。
  按「加薪幅度是否超过 7%」拆成两组:一组 2.5% 到 6.4%,一组 8.0% 往上。
  这一步严格说有点作弊——用结果去分组。真实分析里该按部门、职级这种「与结果无关」的维度拆。

  ② 拆开之后的形状
  --------------------------------------------------------------------

| 分组 | 人数 | 平均 | 最低 | 最高 | 极差 |
|---|---:|---:|---:|---:|---:|
| 普调组 | 40 | 4.45% | 2.5% | 6.4% | 3.90 |
| 谈过加薪组 | 15 | 9.75% | 8.0% | 11.5% | 3.50 |

  普调组 40 人,平均 4.45%,区间 2.5 到 6.4,跨度 3.9 个点。
  谈过加薪组 15 人,平均 9.75%,区间 8.0 到 11.5,跨度 3.5 个点。
  两组内部的跨度都不大,组间差了 5.30 个百分点——这就是双峰的来源。

  ③ 各画一张,都是单峰
  --------------------------------------------------------------------
  拆开后的图存成 PNG:11642 字节。两组各自的区间没有重叠。

  ④ 谈判有没有回报
  --------------------------------------------------------------------
  谈过加薪的 15 人,平均 9.75%;没谈的 40 人,平均 4.45%。差 5.30 个百分点。
  按 8000 元月薪算,这个差等于每月多 424 元,一年 5085 元。
  ! 但这是相关不是因果:敢谈的人可能本来绩效就更好。
  要判因果,得做随机对照,或者看同一个人谈前谈后。

  ⑤ 谈判意味着什么
  --------------------------------------------------------------------
  对个人的意义:同样的绩效,谈和不谈差 5.30 个百分点,一年差 5085 元。
  对公司的意义:两套并行的加薪机制,会让薪酬结构越来越散,最后没法用「一个平均数」管。
  这就是为什么先看形状:形状告诉你有几套机制,平均只告诉你中心在哪。

两组区间完全不重叠,这是「双峰」最硬的证据——不是两个峰挨得近,是中间真的断了。 5.30 个点看着像谈判的功劳,其实还混着「谁更敢谈」这个因素。下一页讲怎么拆开它。

30 秒实验

  1. 如果谈判组里有一个人只加了 6.5%(低于 7%),拆分的界线要不要改?改了之后结论变吗?
  2. 把两组各自算标准偏差,哪一组内部更散?这说明什么?
  3. 想一想:为什么「用结果分组」在探索阶段可以,在验证阶段不行?

常见误区

  1. 拿子集差异直接当因果:两组人本来就不同,差异可能来自「谁进哪一组」而不来自组本身。
  2. 按结果分组还声称是发现:用结果分组只能提假设,不能验证假设。
  3. 只报组间差,不报组内散布:两组内部都很散的话,组间差可能被噪声淹没。
  4. 忽略区间是否重叠:重叠越多,两组的区分越弱,双峰的说法越站不住。
自测三问(点开对答案) 1. 为什么拆开后两组都是单峰,能支持「双峰来自两套机制」? —— 因为叠加两个单峰才容易形成双峰。如果拆开后还是双峰,说明还有第三类过程没找到。 2. 5.30 个百分点能直接说是谈判的功劳吗? —— 不能。敢谈的人可能本来绩效更好、岗位更关键。「谈不谈」不是随机分配的。 3. 要判因果,有哪几条路? —— 随机对照、同一个人谈前谈后、找自然实验。共同点是让「谈不谈」不受本人特质影响。

形状和分群都讲完了。第 10 章换一个目标:不用图看关系,用一个式子预测一个数——回归。

相关笔记