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

如何用Scipy和Pandas检验同列pageview与click的线性/分类/二元关系

检验同列下pageview和click事件相关性的实现方案

你之前的写法报错是因为corr()用于计算数据框列与列之间的相关性,而你筛选得到的pageviews和clicks是两个行子集,长度、索引都无法对齐,自然无法计算,你需要先重构数据结构再做分析。

第一步:重构数据格式

首先将长格式数据表转换为宽格式,让pageview和click作为独立列,每行对应同一个关联对象(示例以link_id即链接唯一标识为分组依据,你可以根据业务逻辑替换为会话ID、用户ID等分组字段):

# 统计每个link_id下的pageview和click发生次数,无发生则填充0
event_count = df.groupby(['link_id', 'event']).size().unstack(fill_value=0)

运行后得到的event_count会包含pageview和click两个数值列,每行对应一个链接的两个事件的发生次数。

第二步:检验线性相关关系

如果要验证「浏览量越高的链接,点击量是否越高」的线性关联,可使用皮尔逊相关检验,同时得到相关系数(效应量)和显著性p值:

import scipy.stats as stats
# corr为相关系数,p_value为显著性值
corr, p_value = stats.pearsonr(event_count['pageview'], event_count['click'])

结果解读:

  • 相关系数绝对值在0.1、0.3、0.5附近分别对应小、中、大效应量,数值正负代表正/负相关
  • p值小于0.05即可认为相关性统计上显著

第三步:检验二元分类关联

如果要验证「是否有浏览」和「是否有点击」的二分类关联,可先将数值转换为二元标识,再用卡方检验+phi系数计算显著性和效应量:

# 转换为二元变量:1=发生过该事件,0=未发生
event_binary = event_count.applymap(lambda x: 1 if x > 0 else 0)
# 构建列联表
contingency_table = pd.crosstab(event_binary['pageview'], event_binary['click'])
# 卡方检验
chi2, p, dof, expected = stats.chi2_contingency(contingency_table, correction=False)
# 计算2*2列联表的效应量phi系数
phi = (chi2 / len(event_binary)) ** 0.5

结果解读:

  • p值小于0.05即可认为两个二元事件存在统计上显著的关联
  • phi系数的效应量解读逻辑和皮尔逊相关系数一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:15:03