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

1. はじめに

このコードラボでは、サンプル ゲームMechaHamster: Level Up with Firebase editionの A/B テストを使用して Remote Config 実験を作成する方法を学習します。これは、 「Firebase Remote Config を使用してゲームをインストルメントする」で変更しました。

Remote Config を使用した A/B テストを使用すると、アプリの UI、機能、エンゲージメント キャンペーンへの変更を、より幅広いユーザーに展開する前に、対象ユーザーに対してテストできます。実験結果を次の目的に使用することもできます。

  • どのパラメータ値のバリエーションが収益や維持率などの主要な指標を向上させるかを判断します。
  • ユーザーのどのサブグループがどのバリエーションを好むかを発見します。
  • 実験データを収集して保存し、さまざまなパラメーター値を設定した場合の影響について追加の分析を実行します。

これが A/B テストの本質です。これにより、Remote Config 用にインストルメント化されたコードを取得し、Remote Config の条件 (Google Analytics ユーザー プロパティを含む)、パーセンテージ ロールアウト、Analytics コンバージョン イベント、およびこれらの組み合わせ。

まず、ユーザーのアクションに基づいてユーザー プロパティを設定することで、実験に誰が含まれるかを制限する条件を実装します。次に、Google アナリティクスのユーザー プロパティを使用して、どのクライアントが実験に含まれるかを決定する A/B テスト実験を作成します。そして最後に、そのデータを使用して視聴者についてさらに理解します。

学べること

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

前提条件

必要なもの

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

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

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

  1. Unity エディターで、 [プロジェクト]タブを選択し、 [アセット][Hamster ] > [プレハブ] > [メニュー]を展開し、 [MainMenu]をクリックします。

The Unity editor Project tab showing\nAssets. Hamster, Prefabs, Menus

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

The Unity editor shows the Main Menu,\nwith DebugMenu disabled

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

The Inspector tab for DebugMenuButton\nwith checkbox

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

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

3. 「Remote Config」サブメニューを有効にします。

  1. Unity エディターの [プロジェクト]タブから、 [アセット] > [ハムスター] > [プレハブ] > [メニュー]を展開し、 DebugMenuオブジェクトをダブルクリックしてエディターの[階層]タブで開きます。

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

Remote Config Actions nested under\nCanvas, DebugMenu

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

Unity editor with Remote Config\nActions enabled under DebugMenu, Panel

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

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

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

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

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

Deleting a condition from the Remote\nConfig parameter editor

  1. 「保存」をクリックして変更を保存し、「変更の公開」をクリックして変更を公開します。 Publish\nchanges option on the Remote Config page

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

ここで、事前構成されているが実装されていないいくつかの Google Analytics 関数の関数本体をDebugMenu.cs ([Assets] > [Hamster] > [Scripts] > [States] にあります) に記述します。

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

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

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

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

6. カスタムディメンションの作成

次に、 subtitle_overrideのさまざまな字幕バリアントを設定して、どの字幕が最適に機能するかを確認します。ただし、A/B テストでは、現在の字幕 ( subtitle_sentimentに記録されている) についての感情に「退屈」という単語が含まれるユーザーにのみ、これらのバリアントを提供します。

カスタム ディメンションを使用して、Analytics イベントのカスタム パラメータを作成および追跡します。詳細については、 「カスタム ディメンションとカスタム指標」を参照してください。

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

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

7. A/B テスト実験を設定する

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

  1. まず、Firebase コンソールの[リモート設定] ページsubtitle_overrideパラメータで[編集]を選択します。

The subtitle_override parameter on\nthe Remote Config page, showing the Edit option.

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

The Add new experiment option on the\nRemote Config Edit parameter page.

  1. 表示されるリストから、 「実験」を選択します。

Remote Config parameter page: Add new\nexperiment

  1. 実験の名前と説明を入力します。

Experiment name and description\nsection

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

The Targeting step of an A/B Testing\nconfiguration, with an app selected

  1. 次に、 [And]をクリックして新しい条件を追加し、 [User Property]を選択してsubtitle_sentimentを選択します。表示されない場合は手動で入力してください。
  2. 現在の字幕のセンチメントに「退屈」が含まれている人にのみ字幕を設定したいため、「含む」を選択し、 boredと入力します。
  3. 必要に応じて、上記の基準に一致する聴衆の何パーセントをテストに公開するかを選択します。簡単に制御できないランダム性を避けるには、 100%を選択します。

A/B Testing Targeting section with\nsubtitle_sentiment selected

  1. 次に、テストで最大化を目指す目標を選択します。ピック保持 (2 ~ 3 日)

A/B Testing Goals section

  1. 次に、実験のパラメータを設定し、さまざまな字幕バリアントを作成します。これらのバリアントは、 subtitle_sentimentに「退屈」が含まれるユーザーに A/B テストが提供するさまざまな値であり、A/B テストはリテンションを最大化するのに最適なバリアントを決定します。
  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% になります。 Variant weights configuration\nsectionこれらの亜種では、201 回に 1 回、A/B テストは字幕に飽きた人にデフォルトを提供しますが、200/201 回は 2 つの新しい値のいずれかを提供し、タイトル画面をオーバーライドすることを指定します。
  5. [実験を開始]をクリックして保存して送信し、確認のポップアップで[開始]をクリックします。 Click Start to start the\nexperiment

8. Set User Property メソッドを実行して更新します。

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

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

(再フェッチする前に) boredに設定した場合は、およそ 50/50 の比率で新しい値の 1 つが表示されるはずです。

デバイスが A/B テスト実験に入ると、その実験から受け取る値は変更されず、インストールごとに永続的になります。結果として、他の実験値のいずれかを受け取るには、ゲームを同じデバイス/シミュレーターに再インストールするか、ゲームを新しいデバイス/シミュレーターにインストールすることによって、新しいインストールを作成する必要があります。

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

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

9. おめでとうございます!

Remote Config A/B テストを使用して、さまざまな Remote Config 値を実験し、それぞれの値が Analytics メトリクスにどのような影響を与えるかを判断しました。

私たちがカバーした内容

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

次のステップ

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