Menu
CoddyTech

相关不等于因果

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 33 课,共 64 课。

r 只能识别直线关系。这里,y 完全由 x 决定,但 r 却是 0:

x 从 -3 到 3 时 y = x 的平方的散点图:点构成完美的 U 形,标题为 r = 0.0

下降的一半会抵消上升的一半。接近 0 的 r 表示没有直线关系,并不表示没有关联:删除特征前先绘图。

一个很远的点就能让 r 看起来很强,所以要先检查离群点:

8 个蓝色点松散地聚集在横坐标约为 4、纵坐标约为 5 的位置,r = -0.27;还有一个红色点远在横坐标 20、纵坐标 25 的位置。加入这个点后,r 升至 0.95

最后,r 永远不能证明因果关系。年龄较大的孩子鞋码更大,阅读能力也更强:年龄这个隐藏的第三个变量同时影响了两者。

challenge icon

挑战

中等

一家茶店测试茶杯:9 杯的数据使用 steep 和 taste(浸泡分钟数、评分),另外 10 杯的数据使用 sugar 和 score(方糖数、评分)。程序会读取另一杯茶的方糖数,然后读取评分。

  1. 输出 steep 和 taste 的 r。
  2. 输出 sugar 和 score 的 r,然后输出加上这杯茶后的结果。

四舍五入到小数点后 2 位,并按下方格式标注。对于另一家店和额外的一杯茶 10、2.0:

Steeping r: -0.05
Sugar r: -0.23
Sugar r with the extra cup: -0.88

亲手试试

import numpy as np

# 9 杯茶的浸泡时间(分钟)和口味评分
steep = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
taste = np.array([3.1, 5.0, 6.6, 7.7, 8.1, 7.6, 6.5, 5.1, 3.4])

# 另外 10 杯茶的方糖数量和口味评分
sugar = np.array([0, 2, 1, 3, 0, 2, 1, 3, 2, 1])
score = np.array([6.5, 5.8, 7.4, 6.1, 5.9, 7.0, 6.2, 6.8, 6.4, 5.7])

# 额外的一杯茶
extra_sugar = float(input())
extra_score = float(input())

# 在下方编写代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

机器学习统计学中的所有课

自己练习: Python 在线编译器