Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

A/B Testing を使用してメッセージング テストを作成する

ユーザーへの働きかけや新しいマーケティング キャンペーンを行うときには、確実に効果が得られるように方策を練る必要があります。A/B テストでは、ユーザーベース内の選択した集合に向けたいくつかのメッセージ バリアントをテストすることにより、最適な表現やプレゼンテーションを見つけられます。リテンション(定着率)の改善が目的の場合も、オファーに対するコンバージョンの改善が目的の場合も、A/B テストでは統計的分析を実行することにより、メッセージの特定のバリアント(言い回し)が、選択した目的に関連するコントロール グループにとって効果的かどうかを判断できます。

コントロール グループを使って機能バリアントの A/B テストを実施するには:

  1. テストを作成します。
  2. テストデバイスでテストを検証します。
  3. テストを管理します。

テストの作成

Notifications Composer を使用したテストでは、単一の通知メッセージで複数のバリアントを評価できます。

  1. Firebase にログインし、データ共有設定を更新して、データ共有が有効になっていることを確認します。データを共有しないと、テストでアナリティクス データにアクセスできません。
  2. Firebase コンソールのナビゲーション バーの [エンゲージメント] セクションで [A/B Testing] をクリックします。
  3. [テストを作成] をクリックし、テストするサービスの選択を求めるメッセージが表示されたら [通知] を選択します。
  4. テストの [名前] とオプションの [説明] を入力し、[次へ] をクリックします。
  5. [ターゲット設定] の各フィールドに入力します。最初に、そのテストを使用するアプリを選択します。また、次のようなオプションを選択することで、テストに参加するユーザーのサブセットをターゲットに設定することもできます。

    • バージョン: アプリの 1 つ以上のバージョン。
    • ユーザー: テスト対象とする可能性のあるユーザーをターゲットとして設定するために使用する、アナリティクスのユーザー層。
    • ユーザー プロパティ: テスト対象とする可能性のあるユーザーを選択するための、1 つ以上のアナリティクス ユーザー プロパティ。
    • 予測: 機械学習で予測された、特定の動作に関与するユーザー グループ。
    • 国 / 地域: テスト対象とする可能性のあるユーザーを選択するための 1 つ以上の国またはリージョン。
    • デバイスの言語: テスト対象とする可能性のあるユーザーを選択するために使用する、1 つ以上の言語とロケール。
  6. [ターゲット ユーザーの割合] の設定: テストのコントロール グループと 1 つ以上のバリアントの間で均等に分散させる、[ターゲット ユーザー] で設定した条件に一致するアプリのユーザーベースの割合を選択します。これは 0.01%~100% の任意のパーセント値にできます。パーセント値は、重複したテストも含め、各テストでユーザーにランダムに再割り当てされます。

  7. [バリアント] セクションの [メッセージのテキストを入力] フィールドに、コントロール グループに送信するメッセージを入力します。コントロール グループにメッセージを送信しない場合は、このフィールドは空白のままにしておきます。

  8. (省略可)複数のバリアントをテストに追加するには、[バリアントを追加] をクリックします。デフォルトでは、テストには 1 つのコントロール グループと 1 つのバリアントがあります。

  9. (省略可)テストの各バリアントの名前を入力して、[バリアント A]、[バリアント B] などの名前を置き換えます。

  10. プルダウン リストから、テストのバリアントを評価する際に使用するテストの目標指標と追加の指標を選択して定義します。この指標には、組み込みの目標(エンゲージメント、購入、収益、維持率など)、アナリティクスのコンバージョン イベント、その他のアナリティクス イベントなどがあります。

  11. メッセージのオプションを選択します。

    • 配信日: 保存時にテストをすぐに開始する場合は [今すぐ送信] を選択し、後でテストを開始する場合は [スケジュール設定] を選択し、時間を指定します。
    • 詳細オプション: テストに含まれるすべての通知に関する詳細オプションを選択するには、[詳細オプション] を展開し、リストされたオプションを変更します。
  12. [レビュー] をクリックしてテストを保存します。

プロジェクトあたり最大 300 個のテストを使用できます。その内訳は、実行中のテストが最大 24 個まで、残りは下書きまたは完了済みのテストになります。

テストデバイスでテストを検証する

Firebase のインストールごとに、関連付けられている FCM 登録トークンを取得できます。このトークンを使用して、アプリがインストールされているテストデバイス上の特定のテスト バリアントをテストできます。テストデバイスでテストを検証する方法を以下に示します。

  1. 次のように FCM 登録トークンを取得します。

    Swift

    Messaging.messaging().token { token, error in
      if let error = error {
        print("Error fetching FCM registration token: \(error)")
      } else if let token = token {
        print("FCM registration token: \(token)")
        self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
      }
    }
    

    Objective-C

    [[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
      if (error != nil) {
        NSLog(@"Error getting FCM registration token: %@", error);
      } else {
        NSLog(@"FCM registration token: %@", token);
        self.fcmRegTokenMessage.text = token;
      }
    }];
    

    Java

    FirebaseMessaging.getInstance().getToken()
        .addOnCompleteListener(new OnCompleteListener<String>() {
            @Override
            public void onComplete(@NonNull Task<String> task) {
              if (!task.isSuccessful()) {
                Log.w(TAG, "Fetching FCM registration token failed", task.getException());
                return;
              }
    
              // Get new FCM registration token
              String token = task.getResult();
    
              // Log and toast
              String msg = getString(R.string.msg_token_fmt, token);
              Log.d(TAG, msg);
              Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

    Kotlin+KTX

    FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
        if (!task.isSuccessful) {
            Log.w(TAG, "Fetching FCM registration token failed", task.exception)
            return@OnCompleteListener
        }
    
        // Get new FCM registration token
        val token = task.result
    
        // Log and toast
        val msg = getString(R.string.msg_token_fmt, token)
        Log.d(TAG, msg)
        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
    })

    C++

    firebase::InitResult init_result;
    auto* installations_object = firebase::installations::Installations::GetInstance(
        firebase::App::GetInstance(), &init_result);
    installations_object->GetToken().OnCompletion(
        [](const firebase::Future& future) {
          if (future.status() == kFutureStatusComplete &&
              future.error() == firebase::installations::kErrorNone) {
            printf("Installations Auth Token %s\n", future.result()->c_str());
          }
        });
        

    Unity

    Firebase.Messaging.FirebaseMessaging.DefaultInstance.GetTokenAsync().ContinueWith(
      task => {
        if (!(task.IsCanceled || task.IsFaulted) && task.IsCompleted) {
          UnityEngine.Debug.Log(System.String.Format("FCM registration token {0}", task.Result));
        }
      });
    
  2. Firebase コンソールのナビゲーション バーで [A/B Testing] をクリックします。
  3. [下書き] をクリックし、テストにカーソルを合わせてコンテキスト メニュー()をクリックしてから、[テストデバイスを管理] をクリックします。
  4. テストデバイスの FCM トークンを入力して、そのテストデバイスに送信するテスト バリアントを選択します。
  5. アプリを実行して、選択したバリアントがテストデバイスで受信されていることを確認します。

テストを管理する

テストの作成に Remote Config、Notifications Composer、Firebase アプリ内メッセージングのいずれを使用しても、テストを検証して開始し、実行中のテストをモニタリングできます。また、実行中のテストの対象ユーザーを増やすこともできます。

テストが終わったら、最も有効なバリアントで使用された設定をメモして、その設定をすべてのユーザーに適用できます。または、別のテストを実行することもできます。

テストの開始

  1. Firebase コンソールのナビゲーション バーの [エンゲージメント] セクションで [A/B Testing] をクリックします。
  2. [下書き] をクリックしてから、テストのタイトルをクリックします。
  3. テストの対象とするユーザーがアプリに含まれていることを確認するには、下書きの詳細を展開して、[ターゲティングと配信] セクションで 0% を超える数値(たとえばユーザーの 1% が条件に一致しているなど)を確認します。
  4. テストを変更するには、[編集] をクリックします。
  5. テストを開始するには、[テストを開始] をクリックします。プロジェクトごとに一度に最大 24 個のテストを実行できます。

テストのモニタリング

しばらくテストを実行したら進行状況をチェックして、これまでにテストに参加したユーザーに関する結果を確認することができます。

  1. Firebase コンソールのナビゲーション バーの [エンゲージメント] セクションで [A/B Testing] をクリックします。
  2. [実行中] をクリックし、テストのタイトルをクリックします。このページでは、以下のような、実行中のテストに関するさまざまな観測統計やモデル化された統計を表示できます。

    • ベースラインとの差(%): ベースライン(コントロール グループとも呼ばれます)と比較した場合の、特定のバリアントに関する指標の改善の測定結果。バリアントの値の範囲をベースラインの値の範囲と比較することで計算されます。
    • ベースラインを上回る可能性: 特定のバリアントが選択された指標のベースラインを上回ることが推定される可能性。
    • observed_metricユーザー 1 人あたりの値: テスト結果に基づき、時間の経過とともに指標の値が収まることが予測される範囲。
    • 合計値observed_metric: コントロール グループまたはバリアントの観測累積値。この値は、各テスト バリアントがどれだけ適切に実行されているかの測定や、改善値の範囲ベースラインを上回る可能性最良のバリアントである可能性の計算に使用されます。測定される指標に応じて、この列には「ユーザー 1 人あたりの期間」、「ユーザーあたりの収益」、「維持率」、「コンバージョン率」と表示されます。
  3. テストを一定期間(FCM とアプリ内メッセージングの場合は少なくとも 7 日間、Remote Config の場合は少なくとも 14 日間)実行すると、このページのデータによって、どのバリアントが「リーダー」であるかが示されます(存在する場合)。一部の測定には、データを視覚的に表現する棒グラフも表示されます。

すべてのユーザーにテストを適用する

目標指標に対する「リーダー」、つまり最良のバリアントを見つけるのに十分な期間テストを実行したら、次は全ユーザーにテストを適用します。これにより、すべてのユーザーを対象に公開するバリアントを選択できるようになります。実施したテストによって明確な候補が示されなかった場合でも、バリアントをすべてのユーザーに適用できます。

  1. Firebase コンソールのナビゲーション バーの [エンゲージメント] セクションで [A/B Testing] をクリックします。
  2. [完了] または [実行中] をクリックしてから、すべてのユーザーに適用するテストをクリックし、コンテキスト メニュー()、[バリアントを展開] の順にクリックします。
  3. 次のいずれかの手順に沿って、すべてのユーザーにテストを適用します。

    • Notifications Composer を使用するテストの場合は、[メッセージ送信] ダイアログを使用して、テストに参加しなかった残りのターゲット ユーザーにメッセージを送信します。
    • Remote Config テストの場合は、バリアントを選択し、更新する Remote Config パラメータ値を決定します。テストの作成時に定義するターゲティング条件は、新しい条件としてテンプレートに追加されます。これにより、ロールアウトの影響がテスト対象のユーザーにのみ及ぶようにできます。[Remote Config で確認] をクリックして変更を確認した後、[変更を公開] をクリックしてロールアウトを完了します。
    • アプリ内メッセージングのテストの場合、ダイアログを使用して、スタンドアロンのアプリ内メッセージング キャンペーンとして展開する必要があるバリアントを特定します。選択すると、FIAM 作成画面にリダイレクトされます。必要であれば、公開前に変更を行うことができます。

テストの拡大

A/B テストでリーダーが宣言されない理由が被験者の不足にあると思われる場合は、テストの対象範囲を拡大し、アプリのユーザーベースに対する割合を増やすことができます。

  1. Firebase コンソールのナビゲーション バーの [エンゲージメント] セクションで [A/B Testing] をクリックします。
  2. 編集する実行中のテストを選択します。
  3. [テストの概要] でコンテキスト メニュー()をクリックし、[実行中のテストを編集] をクリックします。
  4. [ターゲット設定] ダイアログに、現在実行中のテストに参加しているユーザーの割合を増やすためのオプションが表示されます。現在の割合より大きい数を選択し、[公開] をクリックします。指定したユーザーの割合まで、テストが拡大されます。

テストの複製または中止

  1. Firebase コンソールのナビゲーション バーの [エンゲージメント] セクションで [A/B Testing] をクリックします。
  2. [完了] または [実行中] をクリックし、テストにカーソルを合わせてコンテキスト メニュー()をクリックしてから、[テストを複製] または [テストを停止] をクリックします。

ユーザー ターゲティング

次のユーザー ターゲティング条件を使用して、テストに含めるユーザーをターゲット設定します。

ターゲティング条件 演算子 メモ
バージョン 次を含む、
次を含まない、
完全に一致する、
正規表現を含む
テストに含める 1 つ以上のアプリ バージョンの値を入力します。

[次を含む]、[次を含まない]、[完全に一致する] のいずれかの演算子を使用する場合は、カンマ区切りの値リストを指定できます。

[正規表現を含む] 演算子を使用する場合は、正規表現を RE2 形式で作成できます。正規表現は対象バージョン文字列の全部または一部に一致させることができます。また、対象文字列の先頭、末尾、または全体と一致させるために ^$ アンカーを使うこともできます。

ユーザー 以下をすべて含む、
以下を 1 つ以上含む、
以下をすべて含まない、
以下の少なくとも 1 つを含まない
1 名以上のアナリティクス ユーザーを選択して、テスト対象とする可能性のあるユーザーをターゲット設定します。  
ユーザー プロパティ テキスト:
次を含む、
次を含まない、
完全一致、
正規表現を含む

数字:
<、≤、=、≥、>
アナリティクスのユーザー プロパティは、テスト対象とする可能性のあるユーザーを選択するために使用します。ユーザー プロパティ値の選択についてはさまざまなオプションがあります。

クライアントでは、ユーザー プロパティに関する文字列値のみを設定できます。数値演算子を使用する条件の場合、Remote Config サービスは、対応するユーザー プロパティの値を整数または浮動小数点の数値に変換します。
[正規表現を含む] 演算子を使用する場合は、正規表現を RE2 形式で作成できます。正規表現は対象バージョン文字列の全部または一部に一致させることができます。また、対象文字列の先頭、末尾、または全体と一致させるために ^$ アンカーを使うこともできます。
予測 該当なし Firebase Predictions によって定義されたユーザーのターゲット グループ(たとえば、アプリの使用を止めそうなユーザー、またはアプリ内購入を行いそうなユーザー)。Firebase Predictions ツールで定義された値のいずれかを選択します。オプションが利用できない場合は、Firebase コンソールの [Predictions] セクションにアクセスして、Firebase Predictions を有効にする必要があります。  
デバイスの国 該当なし テスト対象とする可能性のあるユーザーを選択するための、1 つ以上の国またはリージョン。  
デバイスの言語 該当なし テスト対象とする可能性のあるユーザーを選択するために使用する、1 つ以上の言語とロケール。 このターゲティング条件は Remote Config でのみ使用できます。
初回起動 次より大きい
次より少ない
次の範囲
ユーザーの初回起動日に基づいてユーザーをターゲティングします(日数で指定します)。 このターゲティング条件は、Firebase アプリ内メッセージングでのみ使用できます。
前回のアプリ エンゲージメント 次より大きい
次より少ない
次の範囲
ユーザーが最後にアプリを利用した日時に基づいてユーザーをターゲティングします(日数で指定します)。 このターゲティング条件は、Firebase アプリ内メッセージングでのみ使用できます。

A/B Testing の指標

テストを作成する際には、テスト バリアントの比較に使用する指標を選択します。追跡対象とする他の指標も選択して、各バリアントの詳細を把握し、重大な副作用(アプリ クラッシュなど)を検出するために役立てることができます。次の表に、目標指標と他の指標の計算方法の詳細を示します。

目標指標

指標 説明
定着(1 日) アプリを毎日使用するユーザーの数。
定着(2~3 日) アプリの使用間隔が 2~3 日以内のユーザー数。
定着(4~7 日) アプリの使用間隔が 4~7 日以内のユーザー数。
定着(8~14 日) アプリの使用間隔が 8~14 日以内のユーザー数。
定着(15 日以上) アプリの使用間隔が 15 日以上のユーザー数。
通知開封 Notifications Composer によって送信された通知をユーザーが開くかどうかを追跡。
購入による収益 すべての ecommerce_purchase イベントと in_app_purchase イベントを合算した値。
AdMob の推定収益 AdMob からの推定収益額。
収益の推定総額 購入額と AdMob の推定収益を合算した値。
first_open ユーザーがアプリをインストールまたは再インストールした後、最初にそのアプリを開くときにトリガーされるアナリティクス イベント。コンバージョン プロセスの一環として使用されます。
notification_open Notifications Composer によって送信された通知をユーザーが開いたときにトリガーされるアナリティクス イベント。コンバージョン プロセスの一環として使用されます。

その他の指標

指標 説明
クラッシュの影響を受けていないユーザー テスト中に Firebase Crashlytics SDK によって検出されたアプリ内エラーが発生しなかったユーザーの割合。
notification_dismiss Notifications Composer によって送信された通知が拒否されたときにトリガーされるアナリティクス イベント(Android のみ)。
notification_receive アプリがバックグラウンドで動作している場合に、Notifications Composer によって送信された通知が受信されたときにトリガーされるアナリティクス イベント(Android のみ)。
os_update デバイスのオペレーティング システムがいつ新しいバージョンに更新されるかを追跡するアナリティクス イベント。詳細は、自動的に収集されるイベントをご覧ください。
screen_view アプリ内で表示される画面を追跡するアナリティクス イベント。詳細については、追跡のスクリーン表示をご覧ください。
session_start アプリ内のユーザー セッション数をカウントするアナリティクス イベント。詳細は、自動的に収集されるイベントをご覧ください。
user_engagement アプリがフォアグラウンドで動作している場合に、定期的にトリガーされるアナリティクス イベント。詳細は、自動的に収集されるイベントをご覧ください。

BigQuery へのデータのエクスポート

BigQuery の A/B テストに関連するすべてのアナリティクス データにアクセスできます。BigQuery では、BigQuery SQL を使用してのデータ分析、別のクラウド プロバイダへのデータのエクスポート、カスタム ML モデルでのデータの使用が可能です。詳しくは、BigQuery を Firebase にリンクするをご覧ください。

BigQuery のデータ エクスポートを最大限に活用するには、Firebase プロジェクトでお支払いプランに Blaze を選択し、従量課金制を採用する必要があります。BigQuery では、データの保存、ストリーミング挿入、データのクエリは有料ですが、データの読み込みとエクスポートは無料です。詳細については、BigQuery の料金または BigQuery のサンドボックスをご覧ください。

使用を開始するには、Firebase プロジェクトが BigQuery にリンクされていることを確認してください。左側のナビゲーション バーで [設定] > [プロジェクト設定] を選択し、[統合] > [BigQuery] > [リンク] を選択します。このページには、プロジェクト内のすべてのアプリの BiqQuery アナリティクス データ エクスポートを行う場合のオプションが表示されます。

テストの分析データをクエリで取得するには:

  1. アクティブなテストのリストから目的のテストを選択して、テスト結果ページを開きます。
  2. [テストの概要] ペインの コンテキスト メニューから、[テストデータをクエリ] を選択します(無料枠のプロジェクトの場合、このオプションは使用できません)。

    BigQuery コンソールのクエリ コンポーザが開き、レビュー用にプリロードされたテストデータのクエリ例が自動的に生成され、表示されます。このクエリでは、テストがユーザー プロパティとしてエンコードされ、キーにテスト名、値にテスト バリアントが含まれます。

  3. クエリ コンポーザで [Run Query] を選択します。結果が下のペインに表示されます。

BigQuery の Firebase データは 1 日に 1 回しか更新されないため、テストページでは BigQuery コンソールで使用可能なデータよりも新しいデータが使用できる場合があります。