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

如何计算对接BigQuery的GA4中各页面的Engagement Rate?

正确计算GA4页面级Engagement Rate的方法

问题根源

你的代码出现超过100%的核心原因是:

  • 同一个会话(user_pseudo_id + ga_session_id)在同一页面可能有多条记录(如页面刷新、交互事件触发),直接对session_engaged求和会重复统计同一个engaged会话,导致engaged_session_nums虚高。
  • GA4中页面级Engagement Rate的定义是:访问过该页面的会话中,属于engaged会话的数量 ÷ 访问过该页面的总会话数 × 100%,每个会话在每个页面仅需统计一次。

修正后的代码

# 1. 生成唯一会话标识(用下划线分隔避免字符串拼接冲突)
df['session_id'] = df['user_pseudo_id'] + '_' + df['ga_session_id'].astype(str)

# 2. 标记每个会话的engaged状态(同一个会话的session_engaged值统一,取第一个即可)
df['session_is_engaged'] = df.groupby('session_id')['session_engaged'].transform('first')

# 3. 去重页面-会话组合,避免同一页面下的同一会话被重复统计
unique_page_session = df[['page_location', 'session_id', 'session_is_engaged']].drop_duplicates()

# 4. 按页面分组计算核心指标
page_engagement = unique_page_session.groupby('page_location').agg(
    total_session_nums=('session_id', 'count'),
    engaged_session_nums=('session_is_engaged', 'sum')
).reset_index()

# 5. 计算Engagement Rate
page_engagement['engagement_rate'] = (page_engagement['engaged_session_nums'] / page_engagement['total_session_nums']) * 100

# 可选:保留两位小数,和GA4报表格式对齐
page_engagement['engagement_rate'] = page_engagement['engagement_rate'].round(2)

关键说明

  • 会话去重:通过drop_duplicates()确保每个页面-会话组合仅统计一次,彻底解决重复计数问题。
  • 会话状态标记:利用groupby.transform为同一会话的所有记录统一标记engaged状态,保证会话状态的一致性。
  • 指标计算逻辑:total_session_nums是访问过该页面的唯一会话数,engaged_session_nums是这些会话中engaged的数量,完全匹配GA4的定义。

这样计算出来的结果就会和GA4报表的数值一致,不会出现超过100%的异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:00:21