You need to enable JavaScript to run this app. Python中如何分析分类变量与标签的相关性及影响?
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何分析分类变量与标签的相关性及影响?

适配场景的统计方法与现有方案评估

现有方案适配性说明

  • OrdinalEncoder:仅适用于有天然顺序的分类变量(如学历、年龄分段、年收入区间),无顺序分类变量(如地域、性别)不要使用,否则会引入不存在的顺序关系干扰后续统计结果,这类变量建议用独热编码或直接选择不需要编码的统计方法。
  • 卡方检验:你目前使用的stats.chi2.ppf()是卡方分布分位数计算函数,做特征和标签的独立性检验应该用stats.chi2_contingency(),先构造特征与Level的列联表再输入即可,这个方法完全适配你的场景,可以判断某个特征是否和Level显著相关。
  • 相关矩阵:不要使用皮尔逊相关系数,你的标签是有序分类、特征多为分类变量,改用斯皮尔曼秩相关系数更合理,结果参考性更高。

推荐适配统计方法

1. 快速探索类方法

先做描述性统计可以快速定位核心特征,比直接使用复杂统计量更直观:

  • 分组分布统计:用pandas.DataFrame.groupby()直接查看不同Level的特征分布,示例代码:
# 查看不同Level的年收入分布占比
example.groupby("Level")["Annual Income"].value_counts(normalize=True).unstack()
  • 列联表分析:用pd.crosstab()构造特征与Level的交叉表,配合卡方检验输出显著性,p值小于0.05即可认为该特征与Level存在显著关联。

2. 关联度量化类函数

  • 互信息(分类版):sklearn.feature_selection.mutual_info_classif,可以衡量任意特征和标签的依赖程度,不管是线性还是非线性关系,也不需要提前对无序分类变量做编码,输出值越高说明该特征对Level的影响越大,是这类场景最常用的特征筛选指标之一。
  • 斯皮尔曼秩相关系数:scipy.stats.spearmanr,专门适配有序变量之间的相关性计算,你可以把有序分类特征(学历、收入、年龄)编码后和Level计算相关系数,正负号代表正/负相关,绝对值越大相关性越强。
  • 克雷默V系数:专门用于衡量两个分类变量的关联强度,取值范围0到1,越高说明关联越强,适合无顺序分类变量(如地域、性别)和Level的关联度计算,代码实现如下:
import numpy as np
import pandas as pd
import scipy.stats as ss
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)))

3. 影响程度量化类方法

如果需要明确每个特征对Level提升的具体影响,可以用以下模型方法:

  • 有序逻辑回归:因为你的Level是有顺序的分类(3>2>1>0),用有序逻辑回归得到的系数可以直接量化每个特征变化带来的Level提升概率,比普通多分类逻辑回归更适配。
  • 树模型特征重要性:用随机森林、LightGBM等树模型训练后输出的特征重要性,可以捕捉特征对Level的非线性影响,比如收入超过某个阈值后Level才会明显上升这类关系,不需要提前做复杂的特征编码。

内容的提问来源于stack exchange,提问作者RubberDuckProducer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 13:57:03