使用 Firebase 预测进行获利策略实验

利用 Firebase 预测,您可以根据预测的用户行为轻松为应用用户提供不同的体验。例如,您可以为将来可能进行应用内购买的用户提供无广告体验,向其他所有人展示广告。不过,在全面部署此获利策略之前,请确保此类策略实际上可以提高应用的整体收入。

本指南将向您展示如何使用 Firebase 预测和 Firebase A/B 测试达成两个目标:针对预计不会进行应用内购买的用户启用基于广告的获利策略,以及验证此新策略的有效性。

准备工作

在开始根据预测来确定应用的广告策略之前,您必须在应用中使用 Google Analytics for Firebase。具体来讲,您必须执行以下操作:

  • Firebase 控制台中启用 Analytics 数据共享
  • 明确记录系统未自动收集的支出相关事件,如 ecommerce_purchase(对于由 App Store 和 Play 商店处理的应用内购买,Firebase 会自动记录 in_app_purchase 事件)。您通常还应记录与您的应用相关的任何其他事件,尽可能收集更多可用数据以用于分类。
  • 提供足够的事件数据量,以便 Firebase 做出有意义的预测。通常情况下,10000 名活跃用户(每月)、500 个正例和 500 个负例即可为 Firebase 预测提供足够的数据。

远程配置广告

首先,将您的应用设置为按照远程配置参数的值显示或隐藏广告。在接下来的步骤中,您将配置预测和 A/B 测试以根据各种条件远程设置此参数,但目前您的应用将始终展示广告。

例如,使用 AdMob 来展示广告:

  1. 导入 Analytics SDK、Remote Config SDK 和 AdMob SDK:

    iOS (Swift)

    将这些 SDK 添加到您的 Podfile 中:

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

    然后,导入这些 SDK:

    import Firebase
    

    Android

    implementation 'com.google.firebase:firebase-core:16.0.6'
    implementation 'com.google.firebase:firebase-config:16.1.2'
    implementation 'com.google.firebase:firebase-ads:17.1.2'
    
  2. 初始化远程配置并将 ads_enabled 变量的默认值设置为 true。随后,您将设置预测和 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 的值显示或隐藏广告。在设置预测之前,此值将始终是 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
        }
    }

此时,您可以将应用部署到应用商店或 Play 商店。用户将获得默认广告体验(始终展示广告),但由于广告展示受远程可配置变量控制,因此您只需使用 Firebase 控制台即可更改和试验广告的行为,而无需向用户推送应用更新。

开始预测用户支出

接下来,设置您的 Firebase 项目以开始预测用户的支出行为。

Firebase 控制台中,打开 Predictions(预测)部分。如果您尚未同意 Firebase 预测服务条款,请确认同意。

在您同意服务条款后,系统就会为您的项目启用预测功能。Firebase 控制台的“预测”部分允许您创建自定义预测;不过,对于支出预测,您可以利用内置的 spendnot_spend 预测,这两个预测使用 Analytics 事件的汇总数据来预测用户将进行应用内购买还是电子商务购买(目前订阅购买不在此预测范围内)。在您启用 Firebase 预测并记录了几周的支出事件后,才可以使用这些预测。

创建获利策略实验

现在创建一项 A/B 测试实验,测试与始终展示广告相比基于预测的获利策略对收入的影响。

一个实验最好具有三个变体(一个对照组、一个无条件地设置参数的组和一个基于预测的组),这样就可以确定基于预测的方法是否能比简单地对所有用户无差别对待带来更大的收益。

创建实验的步骤如下:

  1. Firebase 控制台中,打开 A/B Testing(A/B 测试)部分。

  2. 创建新实验:

    1. 点击创建实验 > 远程配置

    2. 从列表中选择您的应用,并指定您希望纳入实验的用户数量。您还可以选择从实验中排除某些用户类别,例如支出较高的用户。

    3. 从目标指标列表中选择估算的总收入,然后选择要跟踪的其他指标,例如用户互动情况、留存时间、应用移除次数和广告点击次数。

    4. 定义三个变体:

      • 对照组(自动创建)
      • 始终不展示广告
      • 针对潜在消费者不展示广告

      对于对照组,创建 ads_enabled 参数并将其设置为 (no change)。分配给对照组的用户将获得默认行为,即始终看到广告。

      对于始终不展示广告变体,请将 ads_enabled 参数设置为 false。分配给此变体的用户将始终看不到广告。

      对于针对潜在消费者不展示广告变体,请将 ads_enabled 参数设置为 false,然后将目标条件设置为预测:支出(中等风险容忍度)。分配给此变体的用户将不会在预计支出的日期看到广告。

开始实验并让它运行几天或更长时间,直到 A/B 测试确定领先变体为止。如果该实验无法确定领先变体,则可能需要将实验扩展到更多用户

向所有用户发布胜出的变体

在 A/B 测试收集到足够的信息来确定领先变体(在这种情况下是实现最大应用收入的变体)之后,您就可以决定是否向所有用户发布胜出的变体(或其他变体)。

Firebase 控制台A/B Testing(A/B 测试)部分中,打开已完成的实验的详细信息视图。在此视图中,您可以查看在您设置的目标指标和所选的任何次要指标下,每个变体的实际效果。借助此信息,您可以决定是发布领先变体还是其他变体。

要向所有用户发布变体,请在实验的详细信息页面上点击 more_vert > 发布领先变体。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面