You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从DataFrame移除强相关列:保留单列及列选择方法问询

嘿,你已经搞定了相关性过滤的核心步骤,接下来的列选择确实是特征工程里很关键的一环!我来分享两种核心思路:怎么实现自动保留一列,以及怎么评估该保留哪一列,帮你拿到目标结果~

一、自动从强相关列对中保留一列的实现方法

我们可以利用相关矩阵的上三角部分避免重复处理对称的列对,然后针对性删除冗余列(相当于保留配对的另一列)。示例代码如下:

import pandas as pd
import numpy as np

# 假设你的数据集是df
corr_matrix = df.corr().abs()  # 取绝对值的相关系数矩阵

# 生成上三角矩阵(只保留对角线以上的部分,避免重复处理(a,b)和(b,a)这类对称对)
upper_triangle = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))

# 找出所有相关系数超过0.95的列(这些列会被删除,对应的配对列则保留)
columns_to_drop = [col for col in upper_triangle.columns if any(upper_triangle[col] > 0.95)]

# 得到精简后的数据集
df_reduced = df.drop(columns_to_drop, axis=1)

注意:这个逻辑默认保留先出现在DataFrame列顺序中的列,删除后出现的配对列。如果你想自定义保留规则,就需要结合下面的评估方法来调整。

二、评估选择保留哪一列的实用策略

选择保留哪一列,本质是在“减少冗余”和“保留有效信息”之间找平衡,以下是几种常用的评估方法,你可以根据业务场景组合使用:

  • 优先看业务意义:如果你的数据有明确的业务背景,优先保留更有解释性的列。比如在用户行为数据中,“实际点击量”肯定比“预测点击量”更有价值;在财务数据里,“实际营收”比“估算营收”更可靠。
  • 看缺失值比例:保留缺失值更少的列。缺失值多的列后续填充成本高,信息密度也更低。你可以用df.isnull().mean()查看每列的缺失比例,直接淘汰比例过高的列。
  • 看方差/信息熵:对于数值型列,保留方差更大的列——方差大意味着该列的取值离散程度高,能提供更多区分不同样本的信息;对于分类列,可以用信息熵衡量,熵越高代表列的类别分布越均匀,信息含量越高。
    # 查看数值列的方差排序
    df.var().sort_values(ascending=False)
    
  • 基于模型特征重要性:如果已经有目标变量(比如做分类/回归任务),可以训练一个简单的模型(比如随机森林、XGBoost),然后看特征重要性,保留重要性更高的列。示例代码:
    from sklearn.ensemble import RandomForestRegressor
    
    # 假设correlated_cols是某一对强相关的列,y是目标变量
    model = RandomForestRegressor(random_state=42)
    model.fit(df[correlated_cols], y)
    # 输出特征重要性排序
    importance_rank = pd.Series(model.feature_importances_, index=correlated_cols).sort_values(ascending=False)
    print(importance_rank)
    
  • 看稳定性:如果是时间序列数据,你可以查看列在不同时间窗口的波动情况,保留更稳定的列;或者检查该列在不同子集数据中的相关性是否一致,避免保留“仅在部分数据中相关”的列。
  • 看信息覆盖度:如果某列是其他相关列的聚合(比如“总销售额”=“线上销售额”+“线下销售额”),可以根据需求选择:如果需要简洁性就保留聚合列,如果需要细分信息就保留拆分后的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:08:49