拿到一份带身高、体重、收入七八列的数据,想看哪两列总是一起涨一起跌,一张张画散点图太笨。协方差矩阵一次把所有两两关系算齐,机器学习和量化分析里天天用。

先说协方差本身

协方差衡量两个变量的联动方式:X 高于均值时 Y 也高于均值,结果为正;一个高一个低,结果为负;各走各的,结果在 0 附近晃。它其实是方差的推广——变量和自己算协方差,得到的就是方差。拿股民熟悉的场景举例:大盘涨它也涨,协方差为正;大盘涨它偏跌,为负;正负越极端,联动越死。

矩阵的结构:先看对角线

三个变量就是 3×3 矩阵:对角线位置放各变量自己的方差,必然非负;其余位置放两两协方差。由于 cov(X,Y) 恒等于 cov(Y,X),矩阵一定对称。读的顺序是先看对角线摸清各变量自身的波动,再看非对角线的正负号找联动。两个变量就是 2×2 四个数讲完一段关系,变量翻倍矩阵跟着翻倍,好在读法不变。动手时先拿小矩阵手推一遍,再上代码,心里更有底。

和相关系数的关系

协方差带量纲,身高体重的协方差和收入支出的协方差没法直接比大小。把协方差除以两个变量的标准差,得到相关系数,取值锁在 −1 到 1 之间,才能横向比较。0.9 以上算强联动,0.3 以下基本各干各的,中间地带看场景。教材里说「相关系数是归一化的协方差」,就是这个意思。

实际用在哪

  • 降维:PCA 主成分分析对协方差矩阵做特征分解,挑散得最开的几根轴
  • 金融:资产收益的协方差矩阵决定组合波动,看不懂结构就别上杠杆
  • 数据探索:numpy 的 np.cov 一行出矩阵,默认除以 n−1 按样本口径算,ddof 参数控制口径;Excel 里反而没有一键出整张矩阵的函数

协方差会骗人吗

会。数值大小受量纲和离散程度双重影响,换一套单位,数字就变,正负号却不变。所以方向看符号,强弱交给相关系数,各司其职。

判断收尾:看联动方向用协方差,比联动强弱必须换成相关系数;变量一多,先画热力图再读数,比盯着数字表快得多。