Firebase Remote Config を使用して Unity ゲームの A/B テストを実装する

1. はじめに

この Codelab では、Firebase Remote Config を使用してゲームを計測するで変更したサンプルゲーム MechaHamster: Level Up with Firebase edition の A/B Testing を使用して Remote Config テストを作成する方法を学びます。

Remote Config で A/B Testing を使用すると、アプリの UI、機能、エンゲージメント キャンペーンに対する変更を、より広範なユーザーに公開する前に、ターゲット ユーザーを対象にテストできます。テスト結果は以下の目的にも使用できます。

  • 収益や維持率などの主要指標を改善するパラメータ値のバリエーションを特定します。
  • ユーザーのサブグループがどのバリエーションを好むかを把握できます。
  • テストデータを収集して保存し、異なるパラメータ値を設定した場合の影響についてさらに分析する。

これが A/B Testing の本質です。A/B Testing では、Remote Config 用にインストルメント化されたコードを使用して、Remote Config の条件(Google アナリティクスのユーザー プロパティを含む)、ロールアウトの割合、アナリティクスのコンバージョン イベント、およびこれらの組み合わせに基づいて、クライアントが受け取る値を制御するテストを開始できます。

まず、ユーザー アクションに基づいてユーザー プロパティを設定して、テストの対象となるユーザーを限定する条件を実装します。次に、Google アナリティクスのユーザー プロパティを使用して、テストに含めるクライアントを決定する A/B Testing テストを作成します。そして最後に、そのデータを使用して視聴者について理解を深めます。

学習内容

  • Remote Config の計測値を使用して A/B Testing を設定する方法
  • A/B テストへの参加条件の一部として Google アナリティクスのユーザー プロパティを使用する方法

前提条件

必要なもの

  • Unity 2019.1.0f1 以降(iOS または Android ビルドのサポートあり)

2. デバッグ メニューの有効化

プロジェクトでデバッグ メニューが非表示になっています。このメニューにアクセスするためのボタンがゲームに存在しますが、現在有効になっていません。MainMenu プレハブからアクセスするには、ボタンを有効にする必要があります。

  1. Unity エディタで [Project] タブを選択し、[Assets] の下で [Hamster] > [Prefabs] > [Menus] を展開し、[MainMenu] をクリックします。

Unity エディタの [Project] タブで\n アセットが表示されています。ハムスター、プレハブ、メニュー

  1. プレハブ階層で、DebugMenuButton という名前の無効なサブオブジェクトを見つけてクリックし、[Inspector] タブで開きます。

Unity エディタにメインメニューが表示されているが、DebugMenu が無効になっている\n

  1. [Inspector] タブで、DebugMenuButton を含むテキスト フィールドの左上隅にあるチェックボックスをオンにして、ボタンを有効にします。

チェックボックス付きの DebugMenuButton の\n[Inspector] タブ

  1. プレハブを保存します。

エディタまたはデバイスでゲームを実行すると、メニューにアクセスできるようになります。

3. Remote Config サブメニューを有効にする

  1. Unity Editor の [Project] タブで、[Assets] > [Hamster] > [Prefabs] > [Menus] の順に開き、DebugMenu オブジェクトをダブルクリックしてエディタの [Hierarchy] タブで開きます。

    Assets、\nHamster、Prefabs、Menus の下にネストされた DebugMenu アイテム
  2. [Hierarchy] タブで階層を展開し、[DebugMenu] > [Panel] の下にある [Remote Config Actions] というラベルの付いたサブオブジェクトをクリックします。

Remote Config アクションが\nCanvas の DebugMenu の下にネストされています

  1. Unity の [Inspector] タブで、オブジェクト名を含むテキスト フィールドの左側にあるチェックボックスをオンにして、[Remote Config Actions] を有効にします。

Unity エディタと Remote Config\nDebugMenu の Panel で Actions が有効化されている

これには、Set Bored Of Subtitle と Set Enjoys Subtitle という 2 つの GameObject の子があり、どちらも DebugMenu.cs の既存の未実装のメソッドを呼び出すように設定されています。

4. 字幕オーバーライドをアプリ内デフォルトにリセットする

前の Codelab では、パラメータのデフォルト値を JSON としてオーバーライドし、条件を使用してさまざまなバリアントを提供しました。この Codelab では、作成した条件を削除してアプリ内デフォルト値を再導入し、A/B Testing の結果のみでオーバーライドします。

アプリ内デフォルト値を再度有効にするには:

  1. Firebase コンソールの [Remote Config] ページを開き、subtitle_override パラメータの横にある鉛筆アイコンをクリックして、[パラメータを編集] サイドパネルを開きます。
  2. 条件の横にある [X] アイコンをクリックして、条件を削除します。
  3. 残りのデフォルト値の横にある [Use in-app default] トグルをオンにします。

Remote\nConfig パラメータ エディタから条件を削除する

  1. [保存] をクリックして変更を保存し、[変更を公開] をクリックして変更を公開します。Remote Config ページの\n 変更の公開オプション

5. デバッグ関数でユーザー プロパティを設定する

DebugMenu.cs(Assets > Hamster > Scripts > States にあります)に、設定済みだが未実装の Google アナリティクス関数の関数本文を作成します。

これらの関数はユーザー プロパティを設定します。ユーザー プロパティは、ユーザーベースのセグメントを記述する方法と、ゲームのサブタイトルについてユーザーがどう感じているかを記録するために使用されます。

SetUserBoredOfSubtitleSetUserEnjoysSubtitle を実装するには、DebugMenu.cs で既存のバージョンを見つけて、次のように上書きします。

void SetUserBoredOfSubtitle()
{
  Firebase.Analytics.FirebaseAnalytics.SetUserProperty("subtitle_sentiment", "bored");
}
void SetUserEnjoysSubtitle()
{
  Firebase.Analytics.FirebaseAnalytics.SetUserProperty("subtitle_sentiment", "enjoys");
}

Google アナリティクスでアプリが正しく設定されている場合は、これらの関数のいずれかを呼び出して、プロパティを Remote Config の条件で使用できるようにすることができます。モバイル デバイスから SetUserBoredOfSubtitle を呼び出すには、ゲームを開始し、メインメニューの [Debug Menu] ボタンを押して、[Set Bored of Subtitle] を押します。

6. カスタム ディメンションを作成する

次に、subtitle_override のさまざまな字幕バリエーションをセットアップして、最適な字幕を確認します。しかし、A/B テストでは、(subtitle_sentiment に記録されている)現在のサブタイトルについて「退屈」という単語が含まれているユーザーに対してのみ、これらのパターンを配信します。

カスタム ディメンションを使用して、アナリティクス イベントのカスタム パラメータを作成してトラッキングします。詳しくは、カスタム ディメンションとカスタム指標をご覧ください。

新しいカスタム ディメンションを作成するには:

  1. Firebase コンソールを開き、[分析] メニューを展開して、[カスタム定義] を選択します。
  2. [カスタム定義] ページで [カスタム ディメンションを作成] をクリックします。
  3. [新しいカスタム ディメンション] ウィンドウで、ディメンション名を「サブタイトルの感情」に設定し、[スコープ] プルダウンから [ユーザー] を選択します。
  4. [ユーザー プロパティ] フィールドで [subtitle_sentiment.] を選択します。

7. A/B Testing テストをセットアップする

次に、2 ~ 3 日間のユーザー維持率を最適化するため、A/B Testing のテストを作成して、subtitle_override を相互にテストするための異なる値を設定します。

  1. まず、Firebase コンソールの Remote Config ページsubtitle_override パラメータの [編集] を選択します。

[編集] オプションが表示されている\nRemote Config ページの subtitle_override パラメータ。

  1. 表示された [パラメータを編集] ダイアログで、[新しく追加] をクリックします。

Remote Config の [パラメータの編集] ページの\n[新しいテストを追加] オプション。

  1. 表示されるリストから [テスト] を選択します。

Remote Config パラメータ ページ: 新しい\n テストの追加

  1. テストの名前と説明を入力します。

テストの名前と説明\n セクション

  1. 次にターゲティング条件を選択しますまず、プルダウンからアプリを選択します。

A/B Testing 構成のターゲティング ステップで、\n アプリが選択された状態

  1. 次に、[および] をクリックして新しい条件を追加し、[ユーザー プロパティ]、[subtitle_sentiment] の順に選択します。表示されない場合は、手動で入力します。
  2. 現在の字幕センチメントに「退屈」が含まれている人にのみ字幕を設定するため、[含む] を選択して「bored」と入力します。
  3. 必要に応じて、テストに表示するオーディエンスの割合を選択します(上記の条件に一致するオーディエンスの割合)。簡単に制御できないランダム性を避けるには、[100%] を選択します。

[A/B Testing のターゲティング] セクションで\nsubtitle_sentiment を選択済み

  1. 次に、最大化を試みるテストの目標を選択します。[定着(2 ~ 3 日)] を選択します。

A/B Testing の目標のセクション

  1. 次に、テストのパラメータを設定し、さまざまな字幕バリエーションを作成します。A/B Testing では、subtitle_sentiment に「退屈」が含まれるユーザーに対して、さまざまな値が表示されます。A/B Testing では、維持率を最大化するために最適なバリアントが特定されます。
  2. パターン A に次のパラメータ値を入力します。
    {"text":"A: A game about a mechanical hamster","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
    
  3. パターン B に次のパラメータ値を入力します。
    {"text":"B: A game about a mechanical hamster","fontSize":14,"textColor":{"r":255.0,"g":0.0,"b":0.0,"a":255.0}}
    
  4. バリアント比を次のように整数で設定します。
    • ベースライン: 1
    • バリアント A: 100
    • バリアント B: 100
    これにより、ベースラインが 0.5%、パターン A が 49.8%、パターン B が 49.8% となります。パターンの重み付けの設定\n セクションこれらのバリエーションでは、201 回のうち 1 回はサブタイトルに飽きたユーザーには A/B Testing がデフォルトで配信され、200 回と 201 回では 2 つの新しい値のいずれかが配信され、タイトルがオーバーライドされます。
  5. 保存して送信するには、[テストを開始] をクリックし、確認のポップアップで [開始] をクリックします。[開始] をクリックして\n 実験を開始します

8. ユーザー プロパティの設定メソッドを実行して更新する

これで、ユーザーに関するさまざまなプロパティを設定できました。これらのプロパティを使用して、ゲームのロジックや表示を指示できます。

以前に SetUserProperty メソッドを実行したことがない場合や、メソッドを enjoys に設定していない場合でも、ゲームを開いたときにデフォルトのサブタイトルが表示されます。

(再取得前に)bored に設定すると、新しい値の 1 つが約 50:50 の比率で表示されます。

デバイスが A/B Testing テストを受けると、そのテストから得られる値は変更されず、インストールごとに永続的です。そのため、他の試験運用版の値を受け取るためには、ゲームを同じデバイス/シミュレータに再インストールするか、ゲームを新しいデバイス/シミュレータにインストールして、新しいインストールを作成する必要があります。

ユーザーベース全体で実施した実際の A/B テストでは、ベースラインに他のバリアントと同様の重み付けを行う必要があります。しかし、この場合は、テストが機能していることを検証するために、偏った確率を割り当てます。(1/201 のケースで)デフォルト値のままである場合は、ゲームをデバイス/シミュレータに再インストールしてみてください。

これによるもう一つの効果は、ユーザー プロパティを enjoys に戻しても値がベースラインに戻ることはありませんが、enjoys に切り替えて再インストールすることで実現できます。

9. お疲れさまでした

Remote Config A/B Testing を使用して Remote Config のさまざまな値を試し、それぞれの値がアナリティクスの指標に与える影響を確認しました。

学習した内容

  • Remote Config の計測値を使用して A/B Testing を設定する方法
  • A/B Testing テストへの参加条件の一部として Google アナリティクスのユーザー プロパティを使用する方法

次のステップ

テストが終了したら、プロジェクト内のテストのリストからテストを選択して、そのテストをどのように行うかを決めることができます。どちらを「勝者」として選択しますか?それとも、さらにテストを実施しますか?