计算分类变量的相关性

数据挖掘 分类数据 描述性统计 皮尔逊相关系数
2022-03-07 02:58:40

我正在努力寻找一种合适的方法来计算分类变量的相关系数。Pearson's coefficient不支持分类特征。我想找出对目标变量影响最大的特征。我的目标是:

  1. 分类变量和分类变量之间的相关性。例如对于二元目标(如泰坦尼克号数据集),我想找出类别对目标的影响(如性别对生存的影响(0/1))
  2. 捕获一些非线性依赖关系。例如,对于超市销售数据,周末的销售额通常较高,因为人们可能会在假期更多地访问此类商店。因此,我们预计会在大约 7 天的时间间隔内看到峰值。有没有办法通过相关系数来捕捉这种非线性/季节性?
1个回答

根据TowardsDataScience 上的 The Search for Categorical Correlation帖子,可以使用一种称为Cramer 关联的关联变体。

走向分类

我们需要的是看起来像相关性的东西,但可以与分类值一起使用——或者更正式地说,我们正在寻找两个分类特征之间关联的度量。介绍:Cramér's V. 它基于 Pearson 卡方检验的名义变体,内置有一些很大的好处:

  1. 与相关性类似,输出在 [0,1] 的范围内,其中 0 表示无关联,1 表示完全关联。(与相关性不同,没有负值,因为没有负关联之类的东西。要么有,要么没有)

  2. 与相关性一样,Cramer 的 V 是对称的——它对交换 x 和 y 不敏感

def cramers_v(x, y):
    confusion_matrix = pd.crosstab(x,y)
    chi2 = ss.chi2_contingency(confusion_matrix)[0]
    n = confusion_matrix.sum().sum()
    phi2 = chi2/n
    r,k = confusion_matrix.shape
    phi2corr = max(0, phi2-((k-1)*(r-1))/(n-1))
    rcorr = r-((r-1)**2)/(n-1)
    kcorr = k-((k-1)**2)/(n-1)
    return np.sqrt(phi2corr/min((kcorr-1),(rcorr-1)))