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

1. はじめに

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

Remote Config を使用した A/B テストでは、アプリの UI、機能、エンゲージメント キャンペーンの変更を、より広範なユーザーにロールアウトする前に、ターゲット ユーザーでテストできます。テスト結果は、次の目的にも使用できます。

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

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

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

学習内容

  • インストゥルメント化された Remote Config 値を使用して A/B Testing を設定する方法
  • A/B テストへの参加条件の一部として Google アナリティクスのユーザー プロパティを使用する方法

前提条件

必要なもの

  • iOS または Android のビルドをサポートする Unity 2019.1.0f1 以降

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

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

  1. Unity エディタで [Project] タブを選択し、[Assets] で [Hamster] を展開します。プレハブ >Menus] に移動し、[MainMenu] をクリックします。

アセットが表示された Unity エディタの [Project] タブ。ハムスター、プレハブ、メニュー

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

Unity エディタにメインメニューが表示され、DebugMenu が\n 無効化されています。

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

DebugMenuButton のインスペクタ タブ\n(チェックボックスあり)

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

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

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

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

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

Remote Config のアクションは Canvas、DebugMenu の下に\n ネストされています

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

Remote Config を使用した Unity エディタ\nDebugMenu の [Panel] で有効になっているアクション

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

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

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

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

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

Remote Config パラメータ エディタからの条件の削除

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

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

次に、事前構成済みだが実装されていない一部の Google アナリティクス関数の関数本体を DebugMenu.cs に記述します([アセット] > [ハムスター] > [スクリプト] > [状態] で確認できます)。

これらの関数は、ユーザー プロパティを設定します。ユーザー プロパティは、ユーザーベースをセグメントに分けて表現する方法であり、ゲームの字幕に対するユーザーの意見を記録するために使用されます。

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 Edit] パラメータ ページの [Add new experiment] オプション。

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

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

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

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

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

アプリを選択した A/B Testing 構成の [ターゲティング] ステップ

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

\nsubtitle_sentiment が選択された A/B テストのターゲティング セクション

  1. 次に、テストで最大化しようとする目標を選択します。[保持(2 ~ 3 日)] を選択します。

[A/B テストの目標] セクション

  1. 次に、テスト用のパラメータを設定し、さまざまな字幕のバリエーションを作成します。これらのパターンは、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 に設定すると、新しい値のいずれかが約 50 対 50 の比率で表示されます。

デバイスが A/B テストに登録されると、そのテストから受け取る値は変更されず、インストールごとに保持されます。そのため、他のテスト値を受け取るには、同じデバイス / シミュレータにゲームを再インストールするか、新しいデバイス / シミュレータにゲームをインストールして、新しいインストールを作成する必要があります。

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

ユーザー プロパティを enjoys に戻しても値がベースラインに戻らないという効果もありますが、これも enjoys に切り替えて再インストールすることで変更できます。

9. 完了

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

学習した内容

  • インストゥルメント化された Remote Config 値を使用して A/B Testing を設定する方法
  • A/B テストへの参加条件として Google アナリティクスのユーザー プロパティを使用する方法

次のステップ

テストが終了したら、プロジェクト内のテストのリストから 1 つを選択して、テストで何を行うかを決定できます。1 つを「勝者」として選択するか、さらにテストを実施するか