Check out what’s new from Firebase at Google I/O 2022. Learn more

Bir modelin iki versiyonunu A/B testi

Yeni bir özel modeli veya AutoML Vision Edge modelini eğittikten sonra, yeni modelin halihazırda kullandığınız modele kıyasla gerçek dünya koşullarında ne kadar iyi performans gösterdiğini görmek için A/B Testini kullanabilirsiniz. Yeni modelinizin bir iyileştirme olduğunu onayladıktan sonra, yeni modeli bir uygulama güncellemesi gerektirmeden tüm kullanıcılarınıza kolayca sunabilirsiniz.

Bu sayfa, varsayımsal bir görsel tesis arama özelliğine güç sağlayan bir modelin iki versiyonunu değerlendiren bir A/B testini nasıl gerçekleştirebileceğinizi gösterir. Bu özellik, kullanıcıların bitki türlerini görüntülerinden tanımlamasına yardımcı olmak için özel bir görüntü etiketleme modeli kullanır.

Yeni bir bitki etiketleme modeli (plant_labeler_v2) yayınladığınızı ve bunu, plant_labeler_v2 adlı mevcut modelinizle karşılaştıran bir deney yürütmek istediğinizi plant_labeler_v1 . Aşağıdaki adımlar, denemenin nasıl kurulacağını, çalıştırılacağını ve sonuçlar üzerinde nasıl işlem yapılacağını gösterir.

1. Modelinizi uzaktan yapılandırılabilir yapın

Modellerinizi A/B testinin ilk adımı, uygulamanızı hangi modeli kullandığını belirlemek için Remote Config parametresini kullanacak şekilde değiştirmektir. Başlangıçta, bu parametrenin varsayılan değerini uygulamanızın zaten kullandığı model olacak şekilde ayarlayacaksınız, ancak model adı uzaktan yapılandırılabilir bir parametre tarafından kontrol edildiğinden, uygulama güncellemelerini cihazınıza göndermek zorunda kalmadan değiştirebilir ve farklı modelleri deneyebilirsiniz. kullanıcılar her zaman

Dolayısıyla, mevcut modelinizi plant_labeler_v1 adı altında yayınladıysanız, uygulama başlatma kodunuzda plant_labeler_v1 aşağıdaki örnekte olduğu gibi plant_labeler_model parametresinin varsayılan değeri olarak ayarlarsınız:

Kotlin+KTX

val remoteConfig = FirebaseRemoteConfig.getInstance()

val remoteConfigDefaults = HashMap<String, Any>()
remoteConfigDefaults["plant_labeler_model"] = "plant_labeler_v1"
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults))

remoteConfig.fetchAndActivate().addOnSuccessListener { success ->
    if (success) {
      // Okay to get remote values.
      // ...
    }
}

Java

final FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();

Map<String, Object> remoteConfigDefaults = new HashMap<>();
remoteConfigDefaults.put("plant_labeler_model", "plant_labeler_v1");
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults));

remoteConfig.fetchAndActivate().addOnSuccessListener(
        new OnSuccessListener<Boolean>() {
            @Override
            public void onSuccess(Boolean success) {
                if (success) {
                  // Okay to get remote values.
                  // ...
                }
            }
        });

Ardından, plant_labeler_model parametresi tarafından belirtilen modeli yüklemek için model kurulum kodunuzu değiştirin:

Kotlin+KTX

val rcValue = remoteConfig.getValue("plant_labeler_model")
val remoteModelName = rcValue.asString()

// ...

val remoteModel = FirebaseRemoteModel.Builder(remoteModelName)
        .enableModelUpdates(true)
        .setInitialDownloadConditions(initialConditions)
        .setUpdatesDownloadConditions(updateConditions)
        .build()
FirebaseModelManager.getInstance().registerRemoteModel(remoteModel)

// Optionally configure a local model:
// https://firebase.google.com/docs/ml/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model

Java

FirebaseRemoteConfigValue rcValue = remoteConfig.getValue("plant_labeler_model");
String remoteModelName = rcValue.asString();

// ...

FirebaseRemoteModel remoteModel = new FirebaseRemoteModel.Builder(remoteModelName)
        .enableModelUpdates(true)
        .setInitialDownloadConditions(initialConditions)
        .setUpdatesDownloadConditions(updateConditions)
        .build();
FirebaseModelManager.getInstance().registerRemoteModel(remoteModel);

// Optionally configure a local model:
// https://firebase.google.com/docs/ml/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model

Artık uygulamanız hangi modelin yükleneceğini belirlemek için bir Remote Config parametresi kullandığına göre, yalnızca yeni bir model yayınlayarak ve adını Remote Config parametresine atayarak modeli değiştirebilirsiniz. Bu yetenek, A/B Testinin, onları karşılaştırmak amacıyla farklı kullanıcılara farklı modeller atamasını sağlar.

Devam etmeden önce, model indirme kodunuza aşağıdaki eklemeyi de yapın:

Kotlin+KTX

FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
    .addOnSuccessListener {
        // If the model downloaded was specified by a remote parameter, log an
        // event, which will be our experiment's activation event.
        if (rcValue.source == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
            FirebaseAnalytics.getInstance(this).logEvent("nondefault_model_downloaded", null)
        }
    }

Java

FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                // If the model downloaded was specified by a remote parameter, log an
                // event, which will be our experiment's activation event.
                if (rcValue.getSource() == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
                    FirebaseAnalytics.getInstance(YourActivity.this)
                            .logEvent("nondefault_model_downloaded", null);
                }
            }
        });

Yukarıdaki kod, daha sonra denemeniz için kullanacağınız özel bir Analytics etkinliğini günlüğe kaydeder. aktivasyon olayı . Aktivasyon olayı, kullanıcının denemenin bir parçası olarak kabul edilmeden önce tetiklemesi gereken bir olaydır. Bu, cihazları özel ML modellerini indirmeyi bitirene kadar kullanıcıların A/B testinize kaydedilmemesini sağlar.

2. Bir hedef metriği belirleyin

Sonraki adım, modelinizin başarısını nasıl ölçeceğinize karar vermek ve uygulamanızın, modelin farklı sürümlerinin bu metriğe göre ne kadar iyi performans gösterdiğini test etmek için gerekli verileri topladığından emin olmaktır.

A/B Testi, gelir, günlük katılım ve kullanıcıyı elde tutma dahil olmak üzere çeşitli yerleşik metriklere sahiptir. Bu ölçümler genellikle farklı UX akışlarını test etmek veya parametrelerin ince ayarını yapmak için kullanışlıdır, ancak modelinizi ve kullanım durumunuzu değerlendirmek için anlamlı olmayabilir. Bu durumda, bunun yerine özel bir Analytics etkinliği için optimizasyon yapmayı deneyebilirsiniz.

Örnek olarak varsayımsal görsel tesis arama özelliğini kullanarak, kullanıcınıza arama sonuçlarını modelin her bir sonuca olan güven sırasına göre sunduğunuzu varsayalım. Modelinizin doğruluğu hakkında bir fikir edinmenin bir yolu, kullanıcıların ilk arama sonucunu ne sıklıkla açtıklarına bakmaktır.

En iyi sonuç tıklamalarını en üst düzeye çıkarma hedefine hangi modelin en iyi ulaştığını test etmek için, bir kullanıcı sonuç listesindeki ilk öğeye her dokunduğunda özel bir olay kaydedersiniz.

Kotlin+KTX

FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)

Java

FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);

Test ettiğiniz ölçüm, nihai olarak uygulamanızın modelinizi nasıl kullandığına bağlıdır.

Bu noktada, uygulamanızı Play Store'a dağıtabilirsiniz. Uygulamanız orijinal modelinizi kullanmaya devam edecek, ancak eklediğiniz Remote Config ve Analytics kodu, yalnızca Firebase konsolunu kullanarak farklı modellerle denemeler yapmanıza olanak sağlayacak.

3. Bir A/B Testi denemesi çalıştırın

Artık uygulamanız kullanıcılarınızın elinde olduğuna ve analitik verileri topladığına göre, mevcut model yerine yeni modelinizi kullanmanın etkisini test eden bir A/B Testi denemesi oluşturun.

Denemeyi oluşturmak için:

  1. Firebase konsolunun Etkinlikler sayfasında, ilgili Analytics olaylarını günlüğe kaydettiğinizi doğrulayın: etkinleştirme olayı ve hedef metriği.

    Uygulamanızın, Firebase konsolunda görünmeden önce her etkinliği en az bir kez kaydetmesi gerekir.

  2. Firebase konsolunda A/B Testi bölümünü açın.

  3. Yeni bir deneme oluşturun:

    1. Deneme oluştur > Remote Config'i tıklayın.

    2. Hedefleme bölümünde:

      • Listeden uygulamanızı seçin
      • Denemeye kaç kullanıcınızı dahil etmek istediğinizi belirtin
      • Günlüğe kaydetmeye başladığınız etkinleştirme olayını seçin (bu örnekte nondefault_model_downloaded )
    3. Hedefler bölümünde, hedef metrikleri listesinden önceki bölümde belirlediğiniz hedef metriği seçin (bu örnekte first_result_opened ) ve satın alma geliri veya kilitlenmeyen kullanıcılar gibi izlemek istediğiniz ek metrikleri seçin.

    4. Varyantlar bölümünde iki varyant tanımlayın:

      • Kontrol grubu (otomatik olarak oluşturulur)
      • deneysel bitki etiketleyici

      Kontrol grubu için bir plant_labeler_model parametresi oluşturun ve bunu plant_labeler_v1 olarak ayarlayın. Kontrol grubuna atanan kullanıcılar eski modeli kullanacaktır. (Parametreyi (no change) olarak ayarlamayın, çünkü uygulamanızda uzak bir değer kullandığınızı test ediyorsunuz.)

      Deneysel bitki etiketleyici varyantı için plant_labeler_model parametresini plant_labeler_v2 olarak ayarlayın (yeni modelinizi bu ad altında yayınladığınızı varsayarak). Bu varyanta atanan kullanıcılar yeni modeli kullanacak.

    A/B testi yapılandırma ekranı

Denemeyi başlatın ve A/B Testi bir lider ilan edene kadar birkaç gün veya daha fazla çalışmasına izin verin. Deneme bir lider belirleyemezse , denemeyi daha fazla kullanıcıya genişletmeniz gerekebilir.

4. Kazanan varyantı tüm kullanıcılara sunun

A/B testi sonuç kartı

A/B Testi, bir lider ilan etmek için yeterli bilgi topladıktan sonra (bu durumda, en iyi arama sonucu tıklamalarını en üst düzeye çıkaran varyant), kazanan varyantı (veya başka bir varyantı) tüm kullanıcılarınıza sunup sunmayacağınıza karar verebilirsiniz.

Firebase konsolunun A/B Testi bölümünde , tamamlanmış denemenin ayrıntılar görünümünü açın. Bu görünümden, hedef metriğinize ve seçtiğiniz ikincil metriklere göre her bir varyantın nasıl performans gösterdiğini görebilirsiniz. Bu bilgilerle, önde gelen varyantı mı yoksa başka bir varyantı mı kullanıma sunacağınıza karar verebilirsiniz.

Bir varyantı tüm kullanıcılara sunmak için denemenin ayrıntılar sayfasında > Varyantı kullanıma sun'u tıklayın. Bunu yaptığınızda, plant_labeler_model parametresinin değeri tüm kullanıcılar için plant_labeler_v2 olacaktır.

Gelecekteki bir uygulama güncellemesinde, plant_labeler_model parametresinin varsayılan değerini plant_labeler_v2 olarak değiştirmeli ve kullanıyorsanız, paketlenmiş modeli güncellemelisiniz. Bununla birlikte, kullanıcılarınız zaten en son modeli kullanıyor, bu nedenle, bir sonraki özellik güncellemesi yaptığınızda olduğu gibi, uygun olduğunda bu güncellemeyi yayınlanan uygulamanın bir parçası olarak aktarabilirsiniz.