Firebase Predictions を使用して収益化戦略をテストする

Firebase Predictions を使用すると、ユーザーの予測される行動に応じてさまざまな体験をアプリのユーザーに簡単に提供できます。たとえば、今後アプリ内購入を行う可能性のあるユーザーには広告を表示せず、他の全ユーザーには広告を表示するということもできます。ただし、この収益化戦略を全体に導入する前に、そのような戦略がアプリの全体収益を実際に向上させるか確認することが重要です。

このガイドでは、Firebase Predictions と Firebase A/B テストを使用して、両方の目標を達成する方法を示します。アプリ内購入を行わないと予想されるユーザーに対して広告ベースの収益化戦略を有効にし、この新しい戦略の効果を確認します。

始める前に

Predictions を活用してアプリの広告ポリシーを策定するには、あらかじめアプリで Firebase 向け Google アナリティクスを有効にする必要があります。具体的な要件は以下のとおりです。

  • Firebase コンソールアナリティクスのデータ共有を有効にします。
  • ecommerce_purchase など、自動的に収集されない支出関連のイベントを明示的に記録します(Firebase では、App Store および Play ストアで処理されるアプリ内購入の in_app_purchase イベントは自動的に記録されます)。また、分類に使用できるデータを最大化するために、アプリに関連する他のイベントも広く記録する必要があります。
  • Firebase で意味のある予測をするのに十分なイベントデータ量を保持します。Firebase Predictions に必要なデータ量の目安は、月間アクティブ ユーザー 10,000 人、正例データと負例データそれぞれ 500 件です。

広告をリモートで構成可能にする

まず、Remote Config のパラメータの値に応じて広告を表示または非表示にするようアプリを設定します。以下の手順では、Predictions と A/B テストを構成し、さまざまな基準に基づいてパラメータをリモートで設定しますが、この時点では、常にアプリに広告が表示されます。

たとえば、以下のように広告に AdMob を使用します。

  1. アナリティクス、Remote Config、および AdMob SDK をインポートします。

    iOS - Swift

    Podfile に SDK を追加します。

    pod 'Firebase/Core'
    pod 'Firebase/RemoteConfig'
    pod 'Firebase/AdMob'
    

    次に、それらをインポートします。

    import Firebase
    

    Android

    implementation 'com.google.firebase:firebase-core:16.0.5'
    implementation 'com.google.firebase:firebase-config:16.1.0'
    implementation 'com.google.firebase:firebase-ads:17.1.1'
    
  2. Remote Config を初期化し、ads_enabled 変数のデフォルト値を true に設定します。この後で、Predictions と A/B テストを設定して、この変数をリモートで設定します。ただし、アプリでデフォルト値を設定しておくことにより、リモートで構成された変数を取得する前に、アプリが正しく機能するようになります。

    iOS - Swift

    self.remoteConfig = RemoteConfig.remoteConfig()
    self.remoteConfig.setDefaults(["ads_enabled": true])
    

    Java
    Android

    mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    
    Map<String, Object> remoteConfigDefaults = new HashMap<>();
    remoteConfigDefaults.put("ads_enabled", "true");
    mFirebaseRemoteConfig.setDefaults(remoteConfigDefaults);

    Kotlin
    Android

    firebaseRemoteConfig = FirebaseRemoteConfig.getInstance()
    
    val remoteConfigDefaults = HashMap<String, Any>()
    remoteConfigDefaults["ads_enabled"] = "true"
    firebaseRemoteConfig.setDefaults(remoteConfigDefaults)
  3. ads_enabled の値に基づいて広告を表示または非表示にします。Predictions を設定するまで、この値は常に true になり、広告が常に表示されます。

    iOS - Swift

    self.remoteConfig.fetch() { (status, error) -> Void in
        if status == .success {
          self.remoteConfig.activateFetched()
        }
    
        // Act on the retrieved parameters
    
        // Show ads based on the ad policy retrieved with Remote Config
        self.executeAdsPolicy()
    
        // ...
    }
    
    // ...
    
    func executeAdsPolicy() {
        let showAds = self.remoteConfig["ads_enabled"].booleanValue
        if showAds {
            bannerView.load(GADRequest())
            self.bannerView.isHidden = false
        } else {
            self.bannerView.isHidden = true
        }
    }
    

    Java
    Android

    mFirebaseRemoteConfig.fetch(CACHE_EXPIRATION)
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                mFirebaseRemoteConfig.activateFetched();
            }
    
            // Act on the retrieved parameters
    
            // Show ads based on the ad policy retrieved with Remote Config
            executeAdsPolicy();
    
            // ...
        }
    });
    // ...
    private void executeAdsPolicy() {
        boolean showAds = mFirebaseRemoteConfig.getBoolean("ads_enabled");
        AdView mAdView = findViewById(R.id.adView);
    
        if (showAds) {
            AdRequest adRequest = new AdRequest.Builder().build();
            mAdView.loadAd(adRequest);
            mAdView.setVisibility(View.VISIBLE);
        } else {
            mAdView.setVisibility(View.GONE);
        }
    }

    Kotlin
    Android

    firebaseRemoteConfig.fetch(CACHE_EXPIRATION)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    firebaseRemoteConfig.activateFetched()
                }
    
                // Act on the retrieved parameters
    
                // Show ads based on the ad policy retrieved with Remote Config
                executeAdsPolicy()
    
                // ...
            }
    // ...
    private fun executeAdsPolicy() {
        val showAds = firebaseRemoteConfig.getBoolean("ads_enabled")
        val adView = findViewById<AdView>(R.id.adView)
    
        if (showAds) {
            val adRequest = AdRequest.Builder().build()
            adView.loadAd(adRequest)
            adView.visibility = View.VISIBLE
        } else {
            adView.visibility = View.GONE
        }
    }

この時点で、App Store や Play ストアにアプリをデプロイできます。ユーザーにはデフォルトの広告エクスペリエンス(常に広告を表示)が適用されます。しかし、表示はリモートで構成可能な変数で制御するため、Firebase コンソールを使うだけで、広告の挙動を変更してテストできます。アプリのアップデートを配信する必要はありません。

ユーザー支出の予測を開始する

次に、Firebase プロジェクトを設定して、ユーザーの支出行動の予測を始めます。

Firebase コンソールで、[Predictions] セクションを開きます。Predictions の利用規約に同意していない場合は、同意してください。

利用規約に同意すると、プロジェクトで Predictions が有効になります。Firebase コンソールの [Predictions] セクションでは、カスタム予測を定義できます。ただし、支出の予測のために、組み込みの spend 予測と not_spend 予測を使うことができます。これらは、ユーザーがアプリ内購入や e コマースでの購入をするかどうかを、アナリティクス イベントの集計を使って予測します(今のところ、定期購入は考慮されていません)。これらの予測は、Predictions を有効にして、数週間分の支出イベントを記録した後で利用可能になります。

収益化戦略のテストを作成する

ここでは、常に広告を表示する場合と比較した、予測に基づく収益化戦略の効果を調べる A/B テストを作成します。

これは、3 つのバリアント(コントロール グループ、無条件にパラメータを設定するグループ、予測ベースのグループ)がある場合に有効です。テストすることで、予測ベースのアプローチが、単純にすべてのユーザーを同じように扱う場合に比べて有効かを判断できます。

以下の手順でテストを作成します。

  1. Firebase コンソールで、[A/B テスト] セクションを開きます。

  2. 新しいテストを作成します。

    1. [テストを作成] > [Remote Config] をクリックします。

    2. リストからアプリを選択し、テストに含めるユーザーの数を指定します。高額購入者などの特定のユーザー カテゴリをテストから除外することもできます。

    3. 目標指標のリストから [収益の推定総額] を選択し、ユーザー エンゲージメント、維持率、アプリの削除、広告のクリックなど、追加する追跡指標を選択します。

    4. 以下の 3 つのバリアントを定義します。

      • コントロール グループ(自動的に作成)
      • 広告を表示しない
      • 購入の可能性があるユーザーには広告を表示しない

      コントロール グループに対しては、ads_enabled パラメータを作成し、それを (no change) に設定します。コントロール グループに割り当てられたユーザーには、広告が常に表示されるデフォルトの動作が適用されます。

      広告を表示しないバリアントでは、ads_enabled パラメータに false を設定します。このバリアントに割り当てられたユーザーには広告を表示しません。

      購入の可能性があるユーザーには広告を表示しないバリアントでは、ads_enabled パラメータに false を設定し、ターゲット条件を [予測: spend(リスク許容度: 中)] に設定します。このバリアントに割り当てられたユーザーは、購入すると予測された日には広告が表示されません。

テストを開始し、A/B テストで最も効果的なパターンが判別されるまで、数日以上続けます。最も効果的なパターンが判別されない場合は、より多くのユーザーにテストを拡大する必要があります。

最も効果的なバリアントをすべてのユーザーに適用する

A/B テストで、最も効果的なパターン(この場合、アプリ収益を最大化したバリアント)を判別する上で十分な情報が収集された後、そのバリアント(あるいは別のバリアント)をユーザーに適用するかどうか決めることができます。

Firebase コンソールの [A/B テスト] セクションで、完了したテストの詳細を開きます。ここには、選択した目標指標とその他の二次的指標について、各バリアントのパフォーマンスが表示されます。この情報を使って、最も効果的なパターンのバリアントを適用するか、他のバリアントを適用するか決めることができます。

バリアントをすべてのユーザーに適用するには、テスト詳細のページで、[more_vert] > [最も効果的なパターンを適用] をクリックします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。