Courses
在统计学和机器学习中,模式并不等同于答案。
您或许见过那张将冰淇淋销量与溺水率联系起来的图表,或者那张把尼古拉斯·凯奇电影与泳池死亡挂钩的图表。它们吸引眼球、让人印象深刻,但也清楚地表明相关不等于因果。此外,它们被用滥了,反而让人忽视了这个问题在您的工作中为何重要。
您可以把伪相关理解为两个变量之间看似存在、却并非由真实联系导致的关系。它只是由巧合或您未监测到的隐藏变量牵连在一起。如果把它当作有价值的信息,您会把时间浪费在追逐那些说不通、也无法落地的模式上。
本文将带您了解伪相关为何发生、如何识别,以及如何避免据此做出决策。
但相关本身到底是什么?阅读我们的博文数据中的关系度量,了解不同类型的相关系数及其应用。
什么是伪相关?
伪相关是指在两个变量之间出现的、并非由它们之间真实联系导致的统计关系。
相关值本身是真的。当您运行分析时,会得到一个看起来合理、似乎有意义的数值。计算并没有出错或凭空捏造,而这恰恰是问题所在。
缺少的是因果关系。
没有任何一个变量会导致另一个变量发生。它们可能因为与彼此无关的原因而同向变化,或者根本没有真正的原因。数据展示出来的与实际发生的之间的落差,就是伪相关的核心。
伪相关为何发生
伪相关几乎总能用几种机制来解释。一旦知道要留意什么,您就不会盲目信任相关性。
混杂变量
混杂因素是影响您测量的两件事的隐藏变量。
继续拿经典的冰淇淋与溺水案例来说。冰淇淋销量不会导致溺水。炎热天气才是共同驱动因素——更多人买冰淇淋,也有更多人游泳,于是溺水事件增多。
温度就是这里的混杂因素。如果您的数据未监测它,就很容易忽略。
巧合
有时两个变量同步变化纯属偶然。
如果您在足够多的数据集上进行足够多的比较,总会有一些仅凭运气对齐。这正是尼古拉斯·凯奇与泳池死亡相关性的形成方式——两条毫不相关的时间序列恰好在同一时期走势一致。
当变量足够多时,出现一定程度的随机对齐是意料之中的。
共同趋势
一些变量随时间共同变化,这种重叠即便没有真实关系也会看起来像有关联。
想想人口、GDP、互联网使用率和塑料产量。许多这类指标几十年来一直在增长。随便拿其中两个相比,都会得到很强的相关性,仅仅因为它们都在上升趋势中。
但它们只是方向一致,变量本身并无联系。
抽样偏差
伪相关也可能源自您收集的数据,而非它应代表的真实世界。
如果样本无法代表您研究的人群,您可能得到只存在于数据集中的关系。比如仅通过 App 调查客户,您会发现“App 使用”与各种事物相关。这并不是因为 App 使用导致了它们,而是因为您的样本偏向使用 App 的人群。
伪相关示例
伪相关比您想象的更常见。以下是如何识别它以及应对方法。
经典统计案例
人人皆知的就是冰淇淋与溺水的相关性。冰淇淋销量与溺水死亡同涨同跌,但两者互不致因。炎热天气是混杂因素,同时驱动了两者。
尼古拉斯·凯奇的例子则不同。他这些年的电影产量与同一时期的泳池溺亡数相关,且不涉及任何混杂因素。这只是巧合——两条无关的趋势恰好对齐。
这两个例子都能说明伪相关的问题,但遗憾的是,在真实世界里您很难看得这么清楚。
商业与研究案例
在商业分析中,伪相关往往隐藏在看起来“理应相关”的数字背后。
想象一家公司在两年内跟踪每周的市场营销支出与每周营收。您可以使用以下 Python 代码进行演示:
import numpy as np
import pandas as pd
np.random.seed(42)
weeks = 104
# Seasonal effect
seasonality = 10 * np.sin(np.linspace(0, 8 * np.pi, weeks)) + 20
marketing_spend = seasonality + np.random.normal(0, 2, weeks)
revenue = seasonality * 50 + np.random.normal(0, 30, weeks)
df = pd.DataFrame({
"week": range(1, weeks + 1),
"marketing_spend": marketing_spend,
"revenue": revenue
})
print(df["marketing_spend"].corr(df["revenue"]))
Output: 0.9707905810711147
您会在 marketing_spend 与 revenue 之间得到很强的正相关。很容易据此解读为“营销支出提升了营收”,也许确实如此,但上面的代码并不能证明。两个变量都受同一季节性需求周期驱动。如果公司在需求本就高的那周加大投入,无论营销本身是否有效,相关性都会出现。
这是商业分析中常见的错误。
客户行为和营销结果往往随季节、经济或其他诸多隐藏因素而波动。两个指标相关并不能告诉您哪一个(如果有的话)在起作用。
机器学习案例
机器学习模型并不理解“因果”。它们只会寻找能够降低误差指标的任何模式;如果某个捷径在训练数据上有效,模型就会采用它。
例如:
- 依赖背景: 训练用于识别奶牛的图像分类器学会的是把绿色牧场与“奶牛”关联起来,而不是动物本身。给它看一头在海滩上的牛,它就会失败。
- 人口与地理代理: 训练于历史数据的模型会把邮政编码当作收入或种族的代理变量,即便训练集中并没有这些变量。
- 数据集伪影: 某个医学影像模型学到的是:来自某家医院旧设备的扫描结果与疾病相关,因为那家医院收治了更严重的病例,而不是因为设备输出本身揭示了有关疾病的信息。
下面是同一思路的可运行合成示例。一个模型预测贷款违约风险,zip_code 充当了实际起作用变量 income 的代理。
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
np.random.seed(42)
n = 1000
# Zip code correlates with income, income drives default risk
zip_code = np.random.choice([1, 2, 3], size=n)
income = 80000 - zip_code * 15000 + np.random.normal(0, 5000, n)
default_risk = (income < 40000).astype(int)
df = pd.DataFrame({"zip_code": zip_code, "income": income, "default": default_risk})
model = LogisticRegression()
model.fit(df[["zip_code"]], df["default"])
print(model.score(df[["zip_code"]], df["default"]))

机器学习示例模型分数
该模型仅使用 zip_code 就能预测违约风险,而无需看到 income。在这个数据集上它有效,但如果换到一个邮编与收入模式不再成立的新城市,模型准确率就会下降。
这就是“捷径学习”的问题。
基于伪相关构建的模型,可能在训练数据上得分不低,但一旦进入该相关不适用的环境,就会立刻失效。
如何识别伪相关
坏消息是,您无法彻底消除伪相关,但可以养成能捕捉大部分伪相关的习惯。
以下是几条实用建议:
- 调查混杂变量: 在相信相关性之前,先问问还有什么可能同时驱动两个变量。温度与季节性是常见嫌疑人。
- 运用领域知识: 如果某个关系与您对主题的理解不符,不要让统计数字压过直觉。
- 可视化数据: 散点图或时间序列图往往能揭示相关系数所隐藏的共同趋势或明显离群点。
- 运行更多统计检验: 诸如偏相关,或检查该关系在不同子群中是否成立,均可用来验证或推翻相关性。
- 尽可能进行实验: 随机对照试验能消除混杂因素,因为您可以控制不同组获得的处理方式。
简单说,相关系数只告诉您两件事同步变化。这是否有意义,仍需要您来判断。
伪相关与其他统计概念的区别
有些术语常与伪相关混用,造成困惑。本节将介绍这些统计概念以及它们的差别。
伪相关 vs 混杂
混杂是导致伪相关的一个具体原因,它并不是伪相关的同义词。
当第三个变量同时影响您测量的两个变量,便会产生看似直接、实则并非的关系。温度会引起混杂,因为它同时驱动冰淇淋销量与溺水事件。
伪相关的范畴更广。它涵盖混杂,也包括巧合、抽样偏差与随时间的共同趋势——这些都不涉及隐藏的第三变量。尼古拉斯·凯奇的例子就完全不是混杂,因为没有哪个变量把电影产量与泳池死亡联系起来。它只是巧合,但仍然属于伪相关。
因此,所有受混杂影响的关系都是伪相关,但并非所有伪相关都由混杂导致。
伪相关 vs 因果
伪相关与因果关系可能产生相同的散点图。区别在于其背后的机制,而这将改变您可据以采取的行动。
下表概述了差异:
| 伪相关 | 因果关系 | |
|---|---|---|
| 关系 | 变量之间并无真实联系 | 一个变量直接影响另一个变量 |
| 解读 | 若当作有意义则具有误导性 | 反映真实机制 |
| 预测用途 | 脱离原始数据集后不可靠 | 在机制不变的前提下可随新数据保持有效 |
| 支撑因果主张的能力 | 不具备 | 若通过适当方法建立,则可支撑因果主张 |
无论相关系数多强,伪相关从不意味着因果。证明因果需要受控实验或超越单一统计检验的既定因果推断方法。
如何降低伪相关风险
事后能识别伪相关当然有用,但若能在工作流程中从源头规避更好。
在流程中您应当这样做:
- 收集更优数据: 许多伪相关都始于样本不代表您要研究的对象。在分析前先检查数据收集是否覆盖了正确的人群与条件。
- 尽可能使用随机化实验: 随机化是抵御混杂的最佳方式,因为它能把隐藏变量均匀分配到各组。若能运行 A/B 测试,就不要仅依赖观察数据。
- 用新数据集验证: 只在一个数据集中出现的相关性是危险信号。在信任它之前,测试该关系是否在不同时期、不同人员、不同人群或不同来源的数据上仍然成立。
- 开展因果分析: 诸如控制混杂因素或使用因果图等技术,能让您超越“两个事物同步变化”,检验是否存在真正的影响关系。
- 引入领域专家: 懂行的人常能发现统计检验看不到的伪关系。若某个相关与领域知识不相符,在据此开展工作前应当提出质疑。
说实话,这些步骤都不能保证捕捉到每一个伪相关,但结合使用能显著降低据此得出不可靠结论或构建不可靠模型的概率。
结语
高相关系数看似给出答案,但对更有经验的数据从业者来说,它实际上提出了问题。
这个数字只说明两件事同时变化,却不说明原因。把它当作因果的证据,正是导致错误假设、误读研究、商业决策失误,以及模型在遇到新数据时失效的根源。数字背后的原因比数字本身更重要。
这就是为何最有力的结论从不只来自统计,而是统计与领域知识的结合。二者兼顾,您得到的结论才能在生成它们的数据集之外站得住脚。
如果您对相关与伪相关的概念仍感困惑,不妨探索我们的概率与统计课程。我们涵盖从入门到实验设计与假设检验的全部内容。