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

DataFrame的.corr()方法仅返回-1或1,无法得到理想相关值

DataFrame转置后计算相关系数的异常问题解决

问题原因分析

你遇到的极端值(1/-1)和NaN问题,核心原因如下:

  • 极端值(1/-1):当两个用户的非NaN重叠评分仅2个时,Pearson相关系数必然是完美相关(1或-1)——两点可拟合一条完全线性的直线,导致结果偏离预期。
  • NaN值:两个用户没有任何重叠的非NaN评分(比如Angee和Karthik),无法计算相关系数,因此返回NaN。

替换NaN为0能得到“合理”值,但会严重扭曲用户的评分分布(比如将未评分的电影视为0分),不符合业务需求。

可行解决方案

1. 设置最小观测阈值

通过min_periods参数指定计算相关系数所需的最小重叠非NaN样本数,过滤掉样本量不足的组合,避免极端值:

# 要求至少3个重叠非NaN评分才计算相关系数
df.T.corr(min_periods=3)

结果中,重叠样本不足3个的用户对会返回NaN,仅保留样本量足够的可靠相关系数。

2. 用用户均值填充缺失值

相比填0,用用户自身的评分均值填充NaN,能保留用户的整体评分水平,计算出的相关系数更贴合实际:

# 按用户(行)填充NaN为该行的评分均值
df_filled = df.apply(lambda row: row.fillna(row.mean()), axis=1)
# 转置后计算相关系数
corr_matrix = df_filled.T.corr()

这种方式既解决了缺失值问题,又不会引入不合理的评分偏差。

3. 改用Spearman秩相关系数

Spearman相关基于数据排序,对线性关系的依赖更低,在小样本场景下结果更稳健:

df.T.corr(method='spearman')

适合关注评分排序相关性而非绝对数值相关性的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:49:52