除了在 Firebase 控制台中查看 A/B Testing 实验数据之外,您还可以在 BigQuery 中检查和分析实验数据。虽然 A/B Testing 没有单独的 BigQuery 表,但实验和变体成员资格会存储在 Analytics 事件表中的每个 Google Analytics 事件上。
包含实验信息的用户属性的形式为 userProperty.key like "firebase_exp_%"
或 userProperty.key =
"firebase_exp_01"
,其中 01
是实验 ID,userProperty.value.string_value
包含实验变体的索引(从零开始)。
您可以使用这些实验用户属性来提取实验数据。这样,您便能够按多种不同的方式拆分实验结果,并独立验证 A/B Testing 的结果。
如需开始使用,请按照本指南中的说明完成以下操作:
在 Firebase 控制台中为 Google Analytics 启用 BigQuery Export
如果您使用的是 Spark 方案,则可以使用 BigQuery 沙盒免费访问 BigQuery,但需遵循沙盒限制。如需了解详情,请参阅价格和 BigQuery 沙盒。
首先,请确保您将 Analytics 数据导出到 BigQuery:
- 打开集成标签页,您可以在 Firebase 控制台中使用 > 项目设置访问该标签页。
- 如果您已经将 BigQuery 与其他 Firebase 服务搭配使用,请点击管理。否则,请点击关联。
- 查看如何将 Firebase 关联至 BigQuery,然后点击下一步。
- 在配置集成部分中,启用 Google Analytics 切换开关。
选择区域,然后选择导出设置。
点击关联到 BigQuery。
根据您选择导出数据的方式,这些表最多可能需要一天的时间才能供您使用。如需详细了解如何将项目数据导出到 BigQuery,请参阅将项目数据导出到 BigQuery。
在 BigQuery 中访问 A/B Testing 数据
在查询特定实验的数据之前,您需要获取要在查询中使用的以下部分或全部信息:
- 实验 ID:您可以从实验概览页面的网址获取此 ID。例如,如果您的网址类似于
https://console.firebase.google.com/project/my_firebase_project/config/experiment/results/25
,则实验 ID 为 25。 - Google Analytics 媒体资源 ID:这是 9 位数 Google Analytics 媒体资源 ID。您可以在 Google Analytics 中找到该 ID;当您展开项目名称以显示 Google Analytics 事件表的名称 (
project_name.analytics_000000000.events
) 时,该 ID 也会显示在 BigQuery 中。 - 实验日期:为了编写更快速、更高效的查询,最好是将查询限制为包含实验数据的 Google Analytics 每日事件表分区,即由
YYYYMMDD
后缀标识的表。因此,如果您的实验运行时间为 2024 年 2 月 2 日至 2024 年 5 月 2 日,则应指定_TABLE_SUFFIX between '20240202' AND '20240502'
。如需查看示例,请参阅选择特定实验的值。 - 事件名称:通常,这些名称与您在实验中配置的目标指标相对应。例如,
in_app_purchase
事件、ad_impression
或user_retention
事件。
收集好生成查询所需的信息后,请执行以下操作:
使用 Firebase 控制台自动生成的查询来查询实验数据
如果您使用的是 Blaze 方案,则实验概览页面会提供一个示例查询,该查询会返回您正在查看的实验的实验名称、变体、事件名称和事件数量。
如需获取并运行自动生成的查询,请执行以下操作:
- 在 Firebase 控制台中,打开 A/B Testing,然后选择您要查询的 A/B Testing 实验以打开实验概览。
- 在“选项”菜单中的 BigQuery 集成下方,选择查询实验数据。系统会在 Google Cloud 控制台内的 BigQuery 中打开您的项目,并提供可用于查询实验数据的基本查询。
以下示例展示了为包含三个变体(包括基准)的实验(名为“Winter Welcome 实验”)生成的查询。该查询会返回运行中实验的名称、变体名称、唯一身份事件以及每个事件的事件计数。请注意,查询构建器不会在表名称中指定项目名称,因为它会直接在项目中打开。
/*
This query is auto-generated by Firebase A/B Testing for your
experiment "Winter welcome experiment".
It demonstrates how you can get event counts for all Analytics
events logged by each variant of this experiment's population.
*/
SELECT
'Winter welcome experiment' AS experimentName,
CASE userProperty.value.string_value
WHEN '0' THEN 'Baseline'
WHEN '1' THEN 'Welcome message (1)'
WHEN '2' THEN 'Welcome message (2)'
END AS experimentVariant,
event_name AS eventName,
COUNT(*) AS count
FROM
`analytics_000000000.events_*`,
UNNEST(user_properties) AS userProperty
WHERE
(_TABLE_SUFFIX BETWEEN '20240202' AND '20240502')
AND userProperty.key = 'firebase_exp_25'
GROUP BY
experimentVariant, eventName
如需查看其他查询示例,请继续探索示例查询。
探索示例查询
以下各部分提供了一些查询示例,您可以使用这些查询示例从 Google Analytics 事件表中提取 A/B Testing 实验数据。
从所有实验中提取购买和实验标准差值
您可以使用实验结果数据独立验证 Firebase A/B Testing 结果。以下 BigQuery SQL 语句会提取实验变体、每个变体中的唯一身份用户数,in_app_purchase
和 ecommerce_purchase
事件带来的总收入,以及指定为 _TABLE_SUFFIX
开始日期和结束日期的时间范围内的所有实验的标准差。您可以将通过此查询获取的数据与统计显著性生成器结合使用进行单侧 t 测试,以验证 Firebase 提供的结果是否与您自己的分析结果一致。
如需详细了解 A/B Testing 如何计算推理,请参阅解读测试结果。
/*
This query returns all experiment variants, number of unique users,
the average USD spent per user, and the standard deviation for all
experiments within the date range specified for _TABLE_SUFFIX.
*/
SELECT
experimentNumber,
experimentVariant,
COUNT(*) AS unique_users,
AVG(usd_value) AS usd_value_per_user,
STDDEV(usd_value) AS std_dev
FROM
(
SELECT
userProperty.key AS experimentNumber,
userProperty.value.string_value AS experimentVariant,
user_pseudo_id,
SUM(
CASE
WHEN event_name IN ('in_app_purchase', 'ecommerce_purchase')
THEN event_value_in_usd
ELSE 0
END) AS usd_value
FROM `PROJECT_NAME.analytics_ANALYTICS_ID.events_*`
CROSS JOIN UNNEST(user_properties) AS userProperty
WHERE
userProperty.key LIKE 'firebase_exp_%'
AND event_name IN ('in_app_purchase', 'ecommerce_purchase')
AND (_TABLE_SUFFIX BETWEEN 'YYYYMMDD' AND 'YYYMMDD')
GROUP BY 1, 2, 3
)
GROUP BY 1, 2
ORDER BY 1, 2;
选择特定实验的值
以下示例查询展示了如何在 BigQuery 中获取特定实验的数据。此示例查询会返回实验名称、变体名称(包括基准)、事件名称和事件数量。
SELECT
'EXPERIMENT_NAME' AS experimentName,
CASE userProperty.value.string_value
WHEN '0' THEN 'Baseline'
WHEN '1' THEN 'VARIANT_1_NAME'
WHEN '2' THEN 'VARIANT_2_NAME'
END AS experimentVariant,
event_name AS eventName,
COUNT(*) AS count
FROM
`analytics_ANALYTICS_PROPERTY.events_*`,
UNNEST(user_properties) AS userProperty
WHERE
(_TABLE_SUFFIX BETWEEN 'YYYMMDD' AND 'YYYMMDD')
AND userProperty.key = 'firebase_exp_EXPERIMENT_NUMBER'
GROUP BY
experimentVariant, eventName