Firebase A/B Testing 简介

为了最大限度地提高测试结果的相关性和实用性,本页面详细介绍了 Firebase A/B Testing 的工作原理。

样本大小

Firebase A/B Testing 推断不要求在开始实验之前确定最小样本大小。一般情况下,您应选择您认为合适的最高的实验曝光级别。样本规模越大,获得具有统计显著性的结果的几率就越大,尤其是在变体之间的效果差异较小的情况下。另外,您也可以使用样本大小在线计算器,根据实验的特征来找到建议采用的样本大小。

修改实验

您可以修改正在运行的实验的选定参数,包括:

  • 实验名称
  • 说明
  • 定位条件
  • 变体值

如需修改实验,请按以下步骤操作:

  1. 打开要修改的实验的结果页面。
  2. 更多 菜单中,选择修改正在运行的实验
  3. 进行更改,然后点击发布

请注意,在运行实验期间更改应用的行为可能会影响结果。

Remote Config 变体分配逻辑

根据变体权重以及实验 ID 和用户的 Firebase 安装 ID 的哈希,匹配所有实验定位条件(包括曝光百分比条件)的用户被分配到实验变体。

Google Analytics 受众群体有一定的延迟,并非在用户最初满足受众群体标准后就立即可用:

  • 新创建的受众群体可能需要 24-48 小时才能累积新用户。
  • 新用户通常会在符合条件后的 24-48 小时内加入符合条件的受众群体。

如果定位条件对时间很敏感,请考虑使用 Google Analytics 用户属性或内置的定位选项,如国家/地区、语言和应用版本。

用户进入实验后,会被永久性地分配给其实验变体,并在实验有效期内从实验接收参数值,即使其用户属性发生变化并因此而不符合实验定位条件也是如此。

激活事件

实验激活事件将实验衡量范围限制为触发了激活事件的应用用户。 实验激活事件不会对应用提取的实验参数产生任何影响;所有符合实验定位条件的用户都会收到实验参数。因此,请务必选择符合以下条件的激活事件:发生在提取并激活实验参数之后、实验参数用于修改应用行为之前。

变体权重

在创建实验期间,您可以更改默认的变体权重,为某个变体分配更高比例的实验用户。

解读测试结果

Firebase A/B Testing 使用“频率推断”来帮助您了解实验结果仅仅是随机事件的可能性。这种可能性由概率值(或称 p 值)表示。p 值表示两个变体之间的效果差异是随机事件的概率,它是一个介于 0 到 1 之间的值。A/B Testing 使用 0.05 的显著性水平,因此:

  • p 值小于 0.05 表示变体之间的差异具有统计显著性,这意味着差异不太可能是随机发生的。
  • p 值大于 0.05 表示变体之间的差异不具有统计显著性。

实验数据每天刷新一次,并且上一次更新时间显示在实验结果页面顶部。

实验结果图表显示所选指标的累计平均值。例如,如果您跟踪每用户带来的广告收入这一指标,图表会显示观测到的每用户带来的收入;如果您跟踪未遇到崩溃问题的用户比例,图表会显示未遇到崩溃问题的用户所占的百分比。此数据从实验开始就进行累计。

结果会被拆分为观测数据推断数据。观测数据直接根据 Google Analytics 数据计算得出,而推断数据则提供 p 值和置信区间,以帮助您评估观测数据的统计显著性。

对于每个指标,系统都会显示以下统计信息:

观测到的数据

  • 所跟踪指标的总值(留存用户数、崩溃用户数、总收入)
  • 特定指标比率(留存率、转化率、每用户带来的收入)
  • 变体与基准之间的差值百分比(提升幅度)

推断数据

  • 95% CI(平均值差异)会显示一个包含所跟踪指标的“真实”值的置信区间,置信水平为 95%。例如,如果实验获得一个估算总收入在 5 美元到 10 美元之间的 95% CI,则表示平均值的真实差异在 5 美元到 10 美元之间的概率为 95%。如果 CI 范围包括 0,则表示未检测到变体与基准之间存在具有统计显著性的差异。

    置信区间值的格式与所跟踪的指标一致。例如,用户留存率对应时间(采用 HH:MM:SS 格式),每用户带来的广告收入对应美元,转化率对应百分比。

  • P 值:表示变体和基准之间不存在真实差异的概率;换句话说,观测到的差异可能是随机发生的。p 值越低,观测到的效果在未来为真的置信水平就越高。0.05 或更低的 p 值表示显著差异,即结果是偶然事件的可能性较低。P 值基于单侧检验,其中变体值大于基准值。Firebase 对连续变量(例如收入等数值)使用不等方差 t 检验,对转化数据(二进制值,例如用户留存率、未遇到崩溃问题的用户比例、触发 Google Analytics 事件的用户比例)使用比例 z 检验。

实验结果提供每个实验变体的重要数据洞见,包括:

  • 与直接测量(即实际观测到的数据)的基准值相比,每个实验指标更高或更低的程度
  • 观测到的变体与基准之间的差异是随机事件的概率(p 值)
  • 对于每个实验指标,可能包含变体和基准之间的“真实”效果差异的范围,这是一种了解“最佳”和“最差”效果场景的方式

解读由 Google 优化工具提供支持的实验结果

2023 年 10 月 23 日之前开始的实验的 Firebase A/B Testing 结果由 Google 优化工具提供支持。Google 优化工具使用贝叶斯推断,利用实验数据生成见解深刻的统计信息。

结果会被拆分为“观测的数据”和“模型计算的数据”。 观测的数据直接从分析数据中计算得出,而模型计算的数据是对观测的数据应用贝叶斯模型后得出的数据。

对于每个指标,系统都会显示以下统计信息:

实测数据

  • 总值(变体中所有用户的指标的总和)
  • 平均值(变体中用户的指标的平均值)
  • 与基准的偏差百分比

模型计算的数据

  • 胜过基准组合的概率:此变体的相关指标高于基准组合的可能性
  • 与基准的偏差百分比:根据变体指标的模型估计值中位数与基准指标计算得出
  • 指标范围:指标值最有可能属于的范围,确定性达到 50% 到 95%

总体而言,实验结果为我们提供了关于实验中每个变体的以下三类重要的数据洞见:

  1. 与直接测量(即实际观察到的数据)的基准值相比,每个实验指标更高或更低的程度
  2. 根据贝叶斯推断,每个实验指标高于基准/最佳值的可能性有多大(更好/最佳的概率)
  3. 基于贝叶斯推断的每个实验指标的合理范围 -“最佳情形”和“最差情形”场景(可信区间 (credible intervals))

确定领先变体

对于使用频率推断的实验,如果变体和基准在目标指标上存在具有统计显著性的效果差异,Firebase 会声明该变体是领先变体。如果有多个变体符合此条件,则选择 p 值最低的变体。

对于使用 Google 优化工具的实验,如果某个变体在主要指标上有 95% 以上的可能优于基准变体,则 Firebase 会声明该变体为“明显领先的变体”。如果有多个变体达到“明显领先的变体”标准,则只有整体效果最佳的变体会被标记为“明显领先的变体”。

由于领先变体的确定仅基于主要目标,因此在决定是否发布领先变体之前,您应该考虑所有相关因素并查看次要指标的结果。建议您考虑做出相应更改的预期好处、不利方面的风险(例如改进的置信区间的下限),以及对主要目标以外的指标的影响。

例如,如果您的主要指标是“未遇到崩溃问题的用户比例”,并且变体 A 是相对于基准的明显领先变体,但变体 A 的用户留存率指标落后于基准用户留存率,那么建议您在广泛发布变体 A 之前进行进一步调查。

您可以根据对主要指标和次要指标的总体效果评估来发布任何变体,而不仅仅是领先变体。

实验时长

Firebase 建议持续运行实验,直到满足以下条件:

  1. 实验已积累足够的数据,可提供有用的结果。实验和结果数据每天更新一次。建议您使用样本大小在线计算器来评估实验的推荐样本大小。
  2. 实验运行的时间足够长,可确保获得的用户样本具有代表性,并衡量长期效果。对于典型的 Remote Config 实验,建议的最短运行时间为两周。

系统最多会处理实验开始后 90 天的实验数据。90 天后,实验将自动停止;届时,Firebase 控制台中不再更新实验结果,并且实验停止发送其特定的参数值。与此同时,客户端会根据 Remote Config 模板中设置的条件开始提取参数值。系统会保留历史实验数据,直到您删除实验。

BigQuery 架构

除了在 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 的结果。

如需开始使用,请按照本指南中的说明完成以下操作:

  1. 在 Firebase 控制台中为 Google Analytics 启用 BigQuery Export
  2. 使用 BigQuery 访问 A/B Testing 数据
  3. 探索示例查询

在 Firebase 控制台中为 Google Analytics 启用 BigQuery Export

如果您使用的是 Spark 方案,则可以使用 BigQuery 沙盒免费访问 BigQuery,但需遵循沙盒限制。如需了解详情,请参阅价格和 BigQuery 沙盒

首先,请确保您将 Analytics 数据导出到 BigQuery

  1. 打开集成标签页,您可以在 Firebase 控制台中使用 > 项目设置访问该标签页。
  2. 如果您已经将 BigQuery 与其他 Firebase 服务搭配使用,请点击管理。否则,请点击关联
  3. 查看如何将 Firebase 关联至 BigQuery,然后点击下一步
  4. 配置集成部分中,启用 Google Analytics 切换开关。
  5. 选择区域,然后选择导出设置。

  6. 点击关联到 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_impressionuser_retention 事件。

收集好生成查询所需的信息后,请执行以下操作:

  1. Google Cloud 控制台中打开 BigQuery
  2. 选择您的项目,然后选择创建 SQL 查询
  3. 添加查询。如需查看要运行的示例查询,请参阅探索示例查询
  4. 点击运行

使用 Firebase 控制台自动生成的查询来查询实验数据

如果您使用的是 Blaze 方案,则实验概览页面会提供一个示例查询,该查询会返回您正在查看的实验的实验名称、变体、事件名称和事件数量。

如需获取并运行自动生成的查询,请执行以下操作:

  1. Firebase 控制台中,打开 A/B Testing,然后选择您要查询的 A/B Testing 实验以打开实验概览
  2. 在“选项”菜单中的 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_purchaseecommerce_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

限制

A/B Testing 最多只能包含共计 300 个实验、24 个运行中的实验和 24 个草稿实验。这些限制与 Remote Config 发布共享。例如,如果您有 2 个正在运行的发布和 3 个正在运行的实验,则最多可以再运行 19 个发布或实验。

  • 如果您达到 300 个实验总数上限或 24 个草稿实验上限,必须先删除一个现有实验,然后才能创建新实验。

  • 如果您达到 24 个正在运行的实验和发布上限,必须先停止一个正在运行的实验或发布,然后才能开始新实验或发布。

一个实验最多可包含 8 个变体(包括基准变体),每个变体最多有 25 个参数。 一个实验的大小最多可以为 200 KiB 左右。这包括变体名称、变体参数和其他配置元数据。