相关性(Correlation) 指的是两个或多个变量之间随同变化的关系,是数据分析和机器学习中常用的概念。了解不同变量(或特征)之间的相关程度及其方向,对于特征选择、模型构建、多重共线性检测等具有重要意义。下面将从概念、度量方式、使用场景、注意事项等方面进行介绍。
1. 相关性的基本概念
-
线性相关性
- 最常见是指线性依赖关系:如果一个变量增大时,另一个变量也倾向增大(或减小),则我们说它们之间存在正(或负)相关。
- 线性相关最常用的度量就是皮尔森相关系数(Pearson Correlation Coefficient)。
-
非线性相关性
- 有些变量之间可能存在非线性的依赖关系(如曲线、分段)。此时仅用 Pearson 相关系数无法完全捕捉,需要考虑斯皮尔曼相关系数(Spearman)、**肯德尔相关系数(Kendall)**或其它更通用的统计方法。
-
相关 != 因果
- 重要原则:“相关不代表因果”。即便两个变量高度相关,也不一定说明二者存在因果关系,可能存在第三个隐变量的影响或时间先后顺序等多种因素。
2. 常见的相关性度量方法
2.1 皮尔森相关系数(Pearson’s r)
-
定义:衡量两个连续变量间的线性关系强度和方向,取值范围 [ − 1 , + 1 ] [-1, +1] [−1,+1]。
- 若 r > 0 r > 0 r>0,表示正相关; r < 0 r < 0 r<0,表示负相关; ∣ r ∣ |r| ∣r∣ 越接近 1,相关性越强。
- 若 r = 0 r = 0 r=0,表示线性无关;但不代表无任何关系,可能存在非线性关联。
-
适用条件:
- 变量为连续型并近似服从正态分布;
- 两个变量的关系大致呈线性。
-
公式:
r = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 r = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2 \sum_{i=1}^{n} (y_i - \bar{y})^2}} r=∑i=1n(xi−xˉ)2∑i=1n(yi−yˉ)2∑i=1n(xi−xˉ)(yi−yˉ)
其中 x ˉ \bar{x} xˉ 和 y ˉ \bar{y} yˉ 分别是 x、y 的样本均值。
2.2 斯皮尔曼秩相关系数(Spearman’s ρ \rho ρ)
-
定义:基于变量的“秩”(Rank)来衡量关联,主要适用于非线性关系或有序变量。
- 对原始样本排序(赋予秩),然后计算在秩空间的皮尔森相关。
-
优点:
- 对异常值或非线性更加鲁棒;
- 可以处理等级(ordinal)变量。
-
取值范围:同样是 [ − 1 , + 1 ] [-1, +1] [−1,+1]。
2.3 肯德尔秩相关系数(Kendall’s τ \tau τ)
- 定义:也是基于排名的相关系数,但计算方式与斯皮尔曼不同,更关注样本对在秩上的一致性/不一致性。
- 优点:
- 对小样本更稳定;
- 对重复秩处理较好。
2.4 距离相关(Distance Correlation)等高级方法
- 距离相关:考虑到可能存在更一般的非线性关系,通过所有样本点间的距离矩阵来定义相关度,更全面。
- 当数据分布复杂或关系高度非线性时,可以考虑此类方法。
3. 使用场景
-
特征选择
- 在机器学习前期,可能会对高相关的特征进行筛选或去冗余。如若两个特征相关系数过高(如 ∣ r ∣ > 0.9 |r|>0.9 ∣r∣>0.9),可保留对目标更有效的那个特征,以减少多重共线性。
-
多重共线性检测
- 在线性模型(如线性回归、Logistic 回归)中,如果变量之间高度相关,会影响回归系数的稳定性和解释性。可通过相关矩阵查看特征间相关程度。
-
探索性数据分析
- 在数据可视化或初步分析阶段,可计算特征与目标间的相关系数,直观判断哪些特征可能与目标有较强(线性)关系。
-
实验/研究验证
- 如果想证明两个变量的关系,可以用相关系数及其统计检验(p-value)来做初步判断。
4. 相关分析的注意事项
-
线性 vs. 非线性
- Pearson 仅能捕捉线性趋势;若两个变量呈 U 型、指数型等非线性关系,Pearson 可能显示低相关,但实际上二者关系紧密。这时需考虑 Spearman、Kendall 或其他方法。
-
相关不代表因果
- 即便相关系数达到 0.9 以上,也不能简单地说“X 导致 Y”。需要有理论、实验、时间先后顺序等佐证因果关系。
-
离群点(outlier)
- Pearson 对异常值敏感; Spearman、Kendall 更稳健一些。遇到离群值较多的场景,要先评估或清洗异常值,或采用秩相关系数。
-
数据规模
- 相关系数在小样本下不稳定;也可使用置信区间或 p-value 来评估统计显著性。
- 若样本过大,统计显著性很容易通过;此时更要看实际相关系数数值的大小(效果量)。
-
类别型/有序型变量
- 类别变量若无序,仅能做列联表 + 卡方检验等;若有序(Ordinal),可用 Spearman/Kendall。
5. 代码示例(Python)
假设我们有两个数组 x
、y
,并想计算 Pearson、Spearman、Kendall 相关系数:
import numpy as np
from scipy.stats import pearsonr, spearmanr, kendalltau
# 生成示例数据
np.random.seed(42)
x = np.random.randn(100)
y = x * 0.5 + np.random.randn(100)*0.2 # 人为构造线性关系
pearson_corr, pearson_p = pearsonr(x, y)
spearman_corr, spearman_p = spearmanr(x, y)
kendall_corr, kendall_p = kendalltau(x, y)
print(f"Pearson correlation: {pearson_corr:.3f}, p-value={pearson_p:.3e}")
print(f"Spearman correlation: {spearman_corr:.3f}, p-value={spearman_p:.3e}")
print(f"Kendall correlation: {kendall_corr:.3f}, p-value={kendall_p:.3e}")
运行后会得到类似结果(随数据而变):
Pearson correlation: 0.900, p-value=1.23e-30
Spearman correlation: 0.867, p-value=2.45e-27
Kendall correlation: 0.754, p-value=1.10e-24
说明 x、y 明显呈正相关且在统计上非常显著。
6. 小结
- 相关性(Correlation) 描述变量间的随同变化关系,常用 Pearson(线性)、Spearman(基于秩) 和 Kendall(秩一致性)等系数加以量化,取值范围都在 [ − 1 , + 1 ] [-1, +1] [−1,+1]。
- 相关不代表因果,相关分析只是初步探查变量间联系的工具。
- 实际分析中要考虑非线性、离群值、样本大小、变量类型等因素,合理选择相关系数计算方法。
- 在机器学习和数据分析中,相关性广泛应用于特征选择、多重共线性检测、探索性分析等方面,帮助我们理解数据内部结构和优化模型。