两个变量的关系不止「一起涨」一种:还有一起跌(负相关)、先涨后跌(倒 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 秒实验
- 把厚度那组的销量改成严格对称的拱(30、55、70、70、55、30),r 会变成多少?会更接近零吗?
- 假设还存在第三个变量「渠道数量」,它同时推高广告费和销量。这时前两个 r 该怎么解读?
- 想一想:这一节里哪一句最容易被误用成「相关就是因果」?
常见误区
- 只算 r 不看图:倒 U 形和真没关系算出来都是接近零,含义却完全相反。
- 把 |r| 大当关系强:r 大只说明贴直线,不说明影响大。样本少的时候 r 还会虚高。
- 忽略第三变量:两个数一起动,最常见的原因是背后有同一个推手。
- 拿一条边当整张网:现实里的原因互相牵扯,改一个变量,别的也会跟着变。
自测三问(点开对答案)
1. r 接近零的两种截然不同的含义是什么? —— 一种是真没关系,一种是关系很强但不是直线(比如倒 U 形)。 2. 为什么相关系数看不出倒 U 形? —— 因为它衡量的是「贴不贴一条直线」。拱形上下两半的偏离方向相反,加起来正好抵消。 3. 相关分析在流程里该放在哪一步? —— 提假设那一步。它给出值得试的方向,要变成结论还得靠对照实验。方向有了,接下来要把它变成几个能比较的具体方案。下一篇列三个备选方案,用手头资料筛。
- ☐ (本篇完,下一篇 5.4 备选方案与手头资料)