ga_session_id
、page_location
、user_pseudo_id
、session_engaged
、...engagement rate
,就像GA4报告一样。engagement_rate = engaged_session_nums / session_nums * 100%
我创建了一个数据框,其中包括
ga_session_id
、page_location
、user_pseudo_id
、session_engaged
,session_engaged
是布尔类型。
我使用以下代码来计算
engagement rate
:
(不确定
engaged_session_nums
如何计算)
# the session = ga_session_id + user_pseudo_id
df['pseudo_with_session'] = df['ga_session_id'].astype(str) + df['user_pseudo_id']
# not sure engaged_session_nums how to calculate
df['engaged_session_nums'] = df.groupby(['page_location'])['session_engaged'].transform(lambda x: (x == '1').sum())
# calculate the session nums for each page
df['total_session_nums'] = df.groupby('page_location')['pseudo_with_session'].transform('nunique')
df['engaged_rate'] = df['engaged_session_nums'] / df['total_session_nums'] * 100
结果超过100%,与GA4报告有很大不同。
页面位置 | 参与率 |
---|---|
/ | 26.2% |
/zh/ | 117% |
... | ... |
页面位置 | 参与率 |
---|---|
/ | 75.22% |
/zh/ | 73.34% |
... | ... |
计算用户参与的会话数与每个用户的最大会话数的比率。
对 session_engged 求和(如果没有参与会话,则该值将为 0;如果有参与会话,则该值为 1。对于 session_start 事件中的每个 user_pseudo_id。 从 session_start 事件中查找每个 user_pseudo_id 的最大 session_number 。 (它计算特定 user_pseudo_id 的会话数) 将总 session_engged 除以每个用户的最大 session_number。 这就是你想要的:
WITH session_data AS (
SELECT
user_pseudo_id,
MAX((SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_number')) AS max_session_number,
SUM((SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'session_engaged')) AS total_session_engaged
FROM
`yoyr_dataset_id`
WHERE
event_name = 'session_start'
GROUP BY
user_pseudo_id ) SELECT
user_pseudo_id,
IF(max_session_number = 0, 0, total_session_engaged / max_session_number) AS engagement_ratio FROM
session_data;