如何计算连接到 BigQuery 的 GA4 中的“互动率”?

How to calculate the "Engagement Rate" in GA4 connected to BigQuery?

提问人:Xiang 提问时间:11/16/2023 更新时间:11/20/2023 访问量:42

问:

描述

  • 我已将 GA4 连接到 BigQuery
  • bigquery 中的 GA4 数据包括:、、、、...ga_session_idpage_locationuser_pseudo_idsession_engaged
  • 我想使用 python 客户端 api 从 bigquery 查询数据。
  • 然后,使用 bigquery 中的数据来计算每个页面(如 GA4)报告。engagement rate

尝试

根据参与率的定义

engagement_rate = engaged_session_nums / session_nums * 100%

我创建了一个数据帧,其中包括 、 、 、 和 是 booling 类型。ga_session_idpage_locationuser_pseudo_idsession_engagedsession_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 报告有很大不同。

page_location engagement_rate
/ 26.2%
/zh/cn/ 117%
... ...

预期(GA4 报告)

page_location engagement_rate
/ 75.22%
/zh/cn/ 73.34%
... ...
python 数据帧 google-bigquery google-analytics google-analytics-4

评论

0赞 Chiến Lê 11/16/2023
GA4 是基于事件的,如果按 page_location求和,则可能是大量有效事件(参与),并且在主页上,用户单击并被重定向到另一个页面,这使得该页面不计入该页面上的参与。

答:

0赞 ali izadi 11/17/2023 #1

计算用户参与的会话数与每个用户的最大会话数之比。

对于session_start事件中的每个user_pseudo_id,求和 session_engaged(如果没有参与的会话,则该值将为 0;如果有参与的会话,则该值将为 1。 从session_start事件中查找每个user_pseudo_id的最大session_number。(它计算特定user_pseudo_id的会话数) 将总session_engaged除以每个用户的最大session_number。 这是你想要的:

WITH session_data AS (
    SELECT
        user_pseudo_id,
        (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS page_location,
        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
        `dataset_id`
    WHERE
        event_name = 'session_start'
    GROUP BY
        user_pseudo_id, page_location
)
SELECT
    page_location,
    100 - AVG(IF(max_session_number = 0, 0, total_session_engaged / max_session_number * 100)) AS bounce_rate
FROM
    session_data
GROUP BY
    page_location;

评论

0赞 Xiang 11/20/2023
我希望每个都得到跳出率,但是这个SQL没有.我认为这会得到与我预期的不同的结果。page_locationGROUPBY page_location
0赞 ali izadi 11/20/2023
是的,我编辑了我的上一篇文章,现在这是你所期望的
0赞 Xiang 11/20/2023
感谢您的回复。但是,我尝试使用此代码,结果与 GA4 报告仍然有很大不同。跳出率示例:但是/en/GA4=25.37%BQ=0.0%