根据TowardsDataScience 上的 The Search for Categorical Correlation帖子,可以使用一种称为Cramer 关联的关联变体。
走向分类
我们需要的是看起来像相关性的东西,但可以与分类值一起使用——或者更正式地说,我们正在寻找两个分类特征之间关联的度量。介绍:Cramér's V. 它基于 Pearson 卡方检验的名义变体,内置有一些很大的好处:
与相关性类似,输出在 [0,1] 的范围内,其中 0 表示无关联,1 表示完全关联。(与相关性不同,没有负值,因为没有负关联之类的东西。要么有,要么没有)
与相关性一样,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)))