BigQuery を使用して A/B Testing データを検査する

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 AnalyticsBigQuery エクスポートを有効にする
  2. BigQuery を使用して A/B Testing データにアクセスする
  3. クエリの例を確認する

Firebase コンソールで Google AnalyticsBigQuery エクスポートを有効にする

Spark プランをご利用の場合は、BigQuery サンドボックスを使用して、サンドボックスの制限内で BigQuery に無料でアクセスできます。 詳細については、料金と BigQuery サンドボックスをご覧ください。

まず、Analytics データを BigQuery にエクスポートできるようにします。

  1. [統合] タブを開きます。このタブには、Firebase コンソールで、 > [>] を選択してアクセスできます。
  2. 他の Firebase サービスですでに BigQuery を使用している場合は、[管理] をクリックします。それ以外の場合は、[リンク] をクリックします。
  3. [Firebase の BigQuery へのリンクについて] を確認し、[次へ] をクリックします。
  4. [統合を構成する] セクションで、[Google Analytics] の切り替えボタンをオンにします。
  5. リージョンを選択し、エクスポートの設定を選択します。

  6. [BigQuery へのリンク] をクリックします。

データのエクスポート方法によっては、テーブルが使用可能になるまでに 1 日かかることがあります。BigQuery に対するプロジェクト データのエクスポートの詳細については、プロジェクト データを BigQuery にエクスポートするをご覧ください。

BigQueryA/B Testing データにアクセスする

特定のテストのデータをクエリする前に、クエリで使用する次の一部またはすべてを取得することをおすすめします。

  • テスト ID: [テストの概要] ページの URL から取得できます。たとえば、URL が https://console.firebase.google.com/project/my_firebase_project/config/experiment/results/25 のような場合、テスト ID は 25 です。
  • Google Analytics プロパティ ID: これは、9 桁の Google Analytics プロパティ ID です。Google Analytics 内で確認できます。プロジェクト名を展開して Google Analytics イベント テーブル(project_name.analytics_000000000.events)の名前を表示すると、BigQuery にも表示されます。
  • テスト日: クエリをより短時間で、効率的に作成するには、クエリの対象を、テストデータ(接尾辞 YYYYMMDD で識別されるテーブル)を含む Google Analytics の日別イベント テーブル パーティションに限定することをおすすめします。たとえば、テストを 2024 年 2 月 2 日から 2024 年 5 月 2 日まで実施した場合は、_TABLE_SUFFIX between '20240202' AND '20240502' を指定します。例については、特定のテストの値を選択するをご覧ください。
  • イベント名: 通常は、テストで構成した目標指標に対応しています。たとえば、in_app_purchase イベント、ad_impression イベント、user_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 experiment」という 3 つのバリアント(ベースラインを含む)を使用したテストで生成されるクエリを示しています。アクティブなテスト名、バリアント名、ユニーク イベント、各イベントのイベント数が返されます。クエリビルダーはプロジェクト内で直接開かれるため、テーブル名の中でプロジェクト名が指定されることはありません。

  /*
    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