この Codelab について
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 テストを作成します。最後に、そのデータを使用してオーディエンスの詳細を把握します。
学習内容
- 計測された Remote Config 値を使用して A/B Testing を設定する方法
- A/B テストへの参加条件の一部として Google アナリティクスのユーザー プロパティを使用する方法
前提条件
必要なもの
- iOS または Android のビルドをサポートする Unity 2019.1.0f1 以降
2. デバッグ メニューを有効にする
プロジェクトにはデバッグ メニューが隠されています。このメニューにアクセスするボタンはゲーム内にありますが、現在は有効になっていません。MainMenu プレハブからアクセスするには、ボタンを有効にする必要があります。
- Unity エディタで [Project] タブを選択し、[Assets] で [Hamster] > [Prefabs] > [Menus] を開き、[MainMenu] をクリックします。
- プレファブ階層で、無効になっているサブオブジェクト DebugMenuButton を見つけてクリックし、[インスペクタ] タブで開きます。
- [Inspector] タブで、DebugMenuButton を含むテキスト フィールドの左上にあるチェックボックスをオンにして、有効にします。
- プレファブを保存します。
エディタまたはデバイスでゲームを実行すると、メニューにアクセスできるようになります。
3. Remote Config サブメニューを有効にする
- Unity エディタの [Project] タブで、[Assets] > [Hamster] > [Prefabs] > [Menus] を開き、[DebugMenu] オブジェクトをダブルクリックして、エディタの [Hierarchy] タブで開きます。
- [階層] タブで階層を開き、[DebugMenu > Panel] の下にあるサブオブジェクト([Remote Config Actions])をクリックします。
- Unity の [Inspector] タブで、オブジェクトの名前を含むテキスト フィールドの左側にあるチェックボックスをオンにして、[Remote Config Actions] を有効にします。
これには、Set Bored Of Subtitle と Set Enjoys Subtitle という 2 つの GameObject の子があります。どちらも、DebugMenu.cs
に存在する未実装のメソッドを呼び出すように構成されています。
4. 字幕のオーバーライドをアプリ内デフォルトにリセット
前回の Codelab では、パラメータのデフォルト値を JSON としてオーバーライドし、条件を使用してさまざまなバリエーションを配信しました。この Codelab では、作成した条件を削除してアプリ内デフォルトを再導入し、A/B テストの結果でのみオーバーライドします。
アプリ内デフォルトを再度有効にするには:
- Firebase コンソールの Remote Config ページを開き、
subtitle_override
パラメータの横にある鉛筆アイコンをクリックして、[パラメータを編集] サイドパネルを開きます。 - 条件の横にある X アイコンをクリックして、条件を削除します。
- 残りのデフォルト値の横にある [アプリ内デフォルトを使用する] をオンにします。
- [保存] をクリックして変更を保存し、[変更を公開] をクリックして変更を公開します。
5. デバッグ関数でユーザー プロパティを設定する
次に、DebugMenu.cs
で、事前構成済みだが実装されていない Google アナリティクス関数の関数本体を記述します([アセット] > [ハムスター] > [スクリプト] > [状態] で確認できます)。
これらの関数は、ユーザー プロパティを設定します。ユーザー プロパティは、ユーザーベースのセグメントを記述する方法であり、ゲームの字幕に対するユーザーのフィードバックを記録するために使用されます。
SetUserBoredOfSubtitle
と SetUserEnjoysSubtitle
を実装するには、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
に記録)に「退屈」という単語が含まれるユーザーにのみ、これらのバリエーションを配信します。
カスタム ディメンションを使用して、アナリティクス イベントのカスタム パラメータを作成してトラッキングします。詳しくは、カスタム ディメンションとカスタム指標をご覧ください。
新しいカスタム ディメンションを作成するには:
- Firebase コンソールを開き、[アナリティクス] メニューを開いて、[カスタム定義] を選択します。
- [カスタム定義] ページで、[カスタム ディメンションを作成] をクリックします。
- [新しいカスタム ディメンション] ウィンドウで、ディメンション名を [字幕のセンチメント] に設定し、[スコープ] プルダウンから [ユーザー] を選択します。
- [ユーザー プロパティ] フィールドで、
subtitle_sentiment.
を選択します。
7. A/B Testing テストを設定する
次に、A/B Testing テストを作成して、subtitle_override
に異なる値を設定し、2 ~ 3 日間のユーザー維持率を最適化するために、それらの値を相互にテストします。
- まず、Firebase コンソールの Remote Config ページで
subtitle_override
パラメータの [編集] を選択します。
- 表示された [パラメータを編集] ダイアログで、[新規を追加] をクリックします。
- 表示されたリストから [テスト] を選択します。
- テストの名前と説明を入力します。
- 次に、ターゲティング条件を選択します。まず、プルダウンからアプリを選択します。
- 次に、[かつ] をクリックして新しい条件を追加し、[ユーザー プロパティ] を選択して
subtitle_sentiment
を選択します。表示されない場合は、手動で入力します。 - 現在の字幕のセンチメントに「退屈」が含まれている動画にのみ字幕を設定するため、[contains] を選択し、
bored
と入力します。 - 必要に応じて、上記の条件に一致するオーディエンスのどの割合をテストに表示するかを選択します。簡単に制御できないランダム性を回避するには、[100%] を選択します。
- 次に、テストで最大化を試みる目標を選択します。[定着(2 ~ 3 日)] を選択します。
- 次に、テストのパラメータを設定し、さまざまな字幕バリエーションを作成します。これらのパターンは、
subtitle_sentiment
に「bored」が含まれているユーザーに A/B テストで表示されるさまざまな値です。A/B テストでは、維持率を最大化するために最適なパターンを特定します。 - バリエーション A に次のパラメータ値を入力します。
{"text":"A: A game about a mechanical hamster","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
- バリエーション B に次のパラメータ値を入力します。
{"text":"B: A game about a mechanical hamster","fontSize":14,"textColor":{"r":255.0,"g":0.0,"b":0.0,"a":255.0}}
- 次のように、バリエーションの比率を整数で設定します。
- ベースライン: 1
- バリエーション A: 100
- パターン B: 100
これらのバリアントは、201 回のうち 1 回は、字幕に飽きたユーザーにデフォルトを表示し、200/201 回は 2 つの新しい値のいずれかを表示してタイトル画面をオーバーライドするように指定します。
- [テストを開始] をクリックして保存して送信し、確認ポップアップで [開始] をクリックします。
8. Set User Property メソッドを実行して更新する
これで、ユーザーに関するさまざまなプロパティが設定されました。これらのプロパティは、ゲームのロジックや表示を制御するために使用できます。
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 つを「勝者」として選択しますか?それとも、さらにテストを実施しますか?