做一个 AI 推荐系统时,工程师常撞见同一个场面:用户停留时长和下单金额在数据里总是同涨同落,看上去关系很硬,于是把两个特征一起塞进模型。训练完却发现两者的权重来回摇摆,说不清谁在起作用。问题出在更前面一步——一起涨落到底意味着什么、强度有多大、能不能当证据。这篇讲清三件事:协方差在量什么、相关系数如何让它变得可比、以及为什么看到同步就推因果几乎总会出错。
协方差量的到底是什么
协方差回答一个很朴素的问题:当一个变量高于自己的平均值时,另一个变量是不是也倾向于高于自己的平均值。做法是把每个样本的两个变量各自减去均值,再相乘,最后取平均。乘积为正说明两者同向偏离,为负说明反向偏离,正负相抵就趋近于零。它衡量的是偏离的同步性,与变量本身的大小无关。
这个定义带来一个直接的麻烦:结果带量纲。同一个身高变量,用厘米记录和用米记录,协方差会相差一万倍,可表达的同步程度完全一样。所以协方差的数值不能跨数据集、跨单位比较,两个任务分别算出 0.8 和 300,光看数字判断不了谁的关系更强。
相关系数做了什么手脚
把协方差除以两个变量各自的标准差,量纲就被约掉了。几何上这一步是把两组数据都拉成单位长度,剩下的只有夹角,夹角越小方向越一致。相关系数因此被限制在 -1 到 1 之间:1 表示完全同向,-1 表示完全反向,0 表示没有线性同步。它和 余弦相似度与欧氏距离 是同一套直觉——余弦看方向,欧氏看距离,相关系数就是中心化之后的余弦。这也解释了它对整体平移不敏感:所有值都加 10,系数一点不变。
三个指标怎么选
| 指标 | 取值范围 | 擅长捕捉 | 什么时候会误导 |
|---|---|---|---|
| 协方差 | 无上下界,随量纲缩放 | 偏离方向是否一致,可直接写进协方差矩阵 | 跨变量、跨单位比较时毫无意义 |
| 皮尔逊相关系数 | -1 到 1 | 线性关系的强弱,可跨变量比较 | 关系是弯曲的(如 U 形)时可能算出接近 0 |
| 斯皮尔曼秩相关 | -1 到 1 | 单调关系,只看排序,不怕极端值 | 需要精确的线性强度时不够灵敏 |
三者回答的是不同问题:写进矩阵做运算用协方差,比强弱用皮尔逊,数据里混着极端值或明显非线性就换秩相关。选错指标结论会南辕北辙——一组 U 形关系的数据,皮尔逊系数可能只有 0.05,看着毫无关系,实际依赖很强。
相关推不出因果,这句话在工程里意味着什么
两个变量同步变化,至少有四种解释:甲引起乙、乙引起甲、存在同时影响两者的第三变量、纯属巧合。广告投放和销量同涨,可能是投放带来了销量,也可能是旺季让两者一起涨。第三种最难识别,因为第三变量往往没被采集,你甚至不知道它存在。
还有一种更隐蔽的陷阱叫选择偏差:只统计进入过 App 的用户,子集里两个变量高度相关,放回全体却消失了。辛普森悖论属于同一类:分组看每组都正相关,合并后变成负相关。相关性只能当线索,论证因果得靠随机对照实验。
它在 AI 项目里的三个位置
第一是特征筛选:两个特征相关系数到 0.95 以上,基本是同一份信息的两种写法,留一个就够,训练和推理还更省。第二是共线性排查:线性回归里几个特征高度相关时系数会极不稳定,换批数据符号都能翻,这时要动的是特征,做法可参考 线性回归。第三是降维:PCA 找的主成分正是协方差矩阵特征值最大的方向,也就是方差最大、相关性最强的轴,细节见 PCA 降维。
它算不出来的东西
相关系数有三个硬边界。它只测线性或单调关系,两个变量可能强依赖却算出接近零的系数,比如 y 等于 x 平方在对称区间上;它对极端值极其敏感,一个离群点就能把 0.2 拉到 0.8;它默认样本独立同分布,时间序列里前后样本互相影响,算出来的数会虚高。零相关也只说明没有线性关系,不代表独立。样本量小时系数波动很大,几十个样本算出的 0.6 可能纯属噪声,可以配合 交叉验证 看它在不同切分下稳不稳。
看到热力图时怎么读
一张相关性矩阵,先看有没有成块的深色区域,那意味着几个特征在说同一件事;再看有没有意外的强负相关,可能是某个特征被反向编码;最后看样本量,几百条样本撑不起几十个特征的矩阵。判断一份分析靠不靠谱,问一句这是观测出来的相关还是实验测出来的差异,比看图表漂亮与否有用。
速查:协方差与相关系数
- 协方差看方向:同向为正,反向为负,无规律趋近零
- 相关系数等于协方差除以两个标准差之积,范围 -1 到 1
- 相关推不出因果:第三变量、反向因果、选择偏差都能伪装成相关
- 零相关不等于独立,只说明没有线性同步
- 特征相关系数过高,先处理特征再谈调模型


