📈 第5章 假设检验
📄 一句话概括

两个变量的关系不止「一起涨」一种:还有一起跌(负相关)、先涨后跌(倒 U 形)、以及真的没关系。 倒 U 形是最容易骗过相关系数的一种:关系明明很强,r 却接近零。直线只是最省事的一种画法。 现实里的原因是张网,不是一条链。画成箭头,每条线背后都还有别的线。

📝 本章和前面几章的关系

上一篇讲怎么校验别人的数。这一篇开始处理「关系」这件事——它是假设的来源。 书里这一段配了散点图。这里的散点图和相关系数都用标准库算,r 的值可以自己复现。

一、相关不是一种关系,是一族

正相关:广告费涨,销量涨。负相关:售价涨,销量跌。这两种都叫线性相关,图形是一条斜线。 还有两种不常被提起:一种是倒 U 形(厚度适中最好),一种是真没关系(两个数互不影响)。 相关系数 r 只能描述前两种。它对倒 U 形几乎无感,对真没关系也只能说「没测出直线关系」。

形态 例子 r 大概是多少
正相关 广告费 ↑ 销量 ↑ 接近 +1
负相关 售价 ↑ 销量 ↓ 接近 −1
倒 U 形 厚度适中销量最高 接近 0
无关系 两个数互不影响 接近 0

注意后两行的 r 都是接近 0,可它们的含义完全相反。这就是为什么看相关必须先看图。

二、倒 U 形:关系最强,r 最糊

厚度 6.8 毫米卖 30 万片,7.6 毫米卖 68 万片,8.8 毫米掉到 28 万片。 先涨后跌,形状是个拱。线性相关系数算出来 −0.056,几乎就是零。 可这条关系比正相关那组还强:它直接告诉你最优点在 7.6 毫米附近。

r 接近零只能说明「没有直线关系」,不能说明「没有关系」。把这句话背下来,能省很多错判。

三、现实里的原因是一张网

广告费涨,销量涨;售价涨,销量跌;厚度适中,销量最高。三条同时成立。 但这三条还互相牵扯:厚度改了,成本变,售价跟着变;售价变了,广告投放的转化也跟着变。 所以真实的因果结构是一张网,每条边都受别的边影响。而图上一根线,只能画一条边。

这就是为什么「A 和 B 相关」这句话,永远不足以支撑「改 A 就能得到 B」。

四、一张网上的三条实用规则

第一,别把网当链:看到 A→B→C,先问 B 是不是还受 D 影响。 第二,别用 r 判非线性:先画散点,看有没有拱形、有没有分段。 第三,找第三变量:两个数一起动,最常见的解释是「有个东西同时在推它们」。

这三条都不需要新工具,需要的只是看图之前先停三秒。

五、相关分析在流程里排在哪

它排在「提假设」这一步,不排在「下结论」这一步。 相关给出的是「值得试的方向」,比如「厚度 7.6 毫米附近销量最好」。 要把它变成结论,得跑一次对照实验:只改厚度,别的都不动,看销量变不变。

下一篇就干这件事:把方向变成几个具体的备选方案,再用手头资料筛。

六、动手 Demo:相关:直线只是最省事的一种画法

三组数算三个 r:一组正相关、一组负相关、一组倒 U 形。 重点看第三个:关系最强的一组,r 反而最接近零。

import math

def corr(xs, ys):
    n = len(xs)
    mx = sum(xs) / float(n)
    my = sum(ys) / float(n)
    cov = sum((xs[i] - mx) * (ys[i] - my) for i in range(n))
    sx = math.sqrt(sum((x - mx) ** 2 for x in xs))
    sy = math.sqrt(sum((y - my) ** 2 for y in ys))
    return cov / (sx * sy)

AD = [10, 20, 30, 40, 50, 60]           # 广告费(万元)
SALE = [32, 45, 58, 66, 80, 92]         # 销量(万片)
PRICE = [88, 82, 76, 70, 64, 58]        # 售价(元)
THICK = [6.8, 7.2, 7.6, 8.0, 8.4, 8.8]  # 厚度(毫米)
OUT = [30, 52, 68, 66, 50, 28]          # 销量(万片)

print("广告费 vs 销量   r = %+.3f" % corr(AD, SALE))
print("售价   vs 销量   r = %+.3f" % corr(PRICE, SALE))
print("厚度   vs 销量   r = %+.3f" % corr(THICK, OUT))
print()
print("第三个几乎为零,可它描述的是一条拱形:中间最好")
print("r 只认直线,拱形在它眼里等于没关系")

实跑输出:

--------------------------------------------------------------------
相关:直线只是最省事的一种画法
--------------------------------------------------------------------

  ① 三组数,三个相关系数
  --------------------------------------------------------------------

| 两个变量 | 相关系数 r | 读法 |
|---|---:|---|
| 广告费 vs 销量 | +0.998 | 正相关 |
| 售价 vs 销量 | -0.998 | 负相关 |
| 厚度 vs 销量 | -0.056 | 几乎为零 |


  ② 第三个 r 是零,关系却是最强的
  --------------------------------------------------------------------
  厚度与销量:6.8 毫米卖 30 万,7.6 毫米卖 68 万,8.8 毫米掉到 28 万。
  先涨后跌,是个倒 U 形。可线性相关系数只有 -0.056。
  原因是直线只能表达「一起涨」或「一起跌」,表达不了「先涨后跌」。
  ! r 接近零,只能说明没有直线关系,不能说明没关系。

  ③ 现实里的原因是一张网
  --------------------------------------------------------------------
  广告费涨,销量涨;售价涨,销量跌;厚度适中,销量最高。
  这三条同时还互相牵扯:厚度改了,售价会变;售价变了,广告要重投。
  把原因画成箭头,是一张网,不是一个链条。图上一根线代表的关系,现实里可能有三条。

  ④ 正相关、负相关、无相关,各该怎么用
  --------------------------------------------------------------------

| 形态 | 例子 | 怎么用 |
|---|---|---|
| 正相关 | 广告费 ↑ 销量 ↑ | 可以顺着推,但别说「因为」 |
| 负相关 | 售价 ↑ 销量 ↓ | 同上,方向相反不等于因果 |
| 倒 U 形 | 厚度适中最好 | 要找最优点,别用 r 判断 |
| 无相关 | 两个数互不影响 | 先确认是不是非线性,再下结论 |


  ⑤ 这一步的产出是什么
  --------------------------------------------------------------------
  相关分析给不出结论,它给出的是「值得假设的方向」。
  上面三条里,最值得拿去做实验的是「厚度适中销量最高」——它能变成一个可测的改动。

−0.056 这个数看着像「没关系」,实际是「先涨后跌」被直线平均掉了。 判断关系的第一步永远是画图,不是算 r。图看形状,r 只做补充。

30 秒实验

  1. 把厚度那组的销量改成严格对称的拱(30、55、70、70、55、30),r 会变成多少?会更接近零吗?
  2. 假设还存在第三个变量「渠道数量」,它同时推高广告费和销量。这时前两个 r 该怎么解读?
  3. 想一想:这一节里哪一句最容易被误用成「相关就是因果」?

常见误区

  1. 只算 r 不看图:倒 U 形和真没关系算出来都是接近零,含义却完全相反。
  2. 把 |r| 大当关系强:r 大只说明贴直线,不说明影响大。样本少的时候 r 还会虚高。
  3. 忽略第三变量:两个数一起动,最常见的原因是背后有同一个推手。
  4. 拿一条边当整张网:现实里的原因互相牵扯,改一个变量,别的也会跟着变。
自测三问(点开对答案) 1. r 接近零的两种截然不同的含义是什么? —— 一种是真没关系,一种是关系很强但不是直线(比如倒 U 形)。 2. 为什么相关系数看不出倒 U 形? —— 因为它衡量的是「贴不贴一条直线」。拱形上下两半的偏离方向相反,加起来正好抵消。 3. 相关分析在流程里该放在哪一步? —— 提假设那一步。它给出值得试的方向,要变成结论还得靠对照实验。

方向有了,接下来要把它变成几个能比较的具体方案。下一篇列三个备选方案,用手头资料筛。

相关笔记