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ımlamalarına yardımcı olmak için özel bir görüntü etiketleme modeli kullanır.

Sadece yeni bir bitki etiketleme modelini yayınlanan varsayalım, plant_labeler_v2 ve mevcut modele adlı karşılaştırır bir deney yapmak istiyorum 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

Yani, adı altında mevcut modeli yayınlanan eğer plant_labeler_v1 , olur, uygulama başlatma kodu, ayarlanan plant_labeler_v1 varsayılan değer olarak plant_labeler_model şu örnekte olduğu gibi parametre:

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.
                  // ...
                }
            }
        });

Sonra, belirlenen modeli yükleme modeliniz kurulum kodunu değiştirmek plant_labeler_model parametresi:

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 metrikler 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ıkta açtığına bakmaktır.

Hangi modelin en iyi sonuç tıklamalarını en üst düzeye çıkarma hedefine 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. Açık Olaylar aktivasyon olayı ve hedef metrik: Firebase konsolunun sayfasında, ilgili Analytics olayları giriş yaptığını olun.

    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. Uzaktan> Config'i deneme oluştur 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
      • Eğer oturum başlamış aktivasyon olayı seçin (bu örnekte, nondefault_model_downloaded)
    3. Hedefler bölümünde, hedef Ölçümler listesinden (bu örnekte, first_result_opened) önceki bölümde belirlenen metrik hedef seçin ve bu satın alma geliri veya kilitlenme içermeyen kullanıcılar olarak izlemek istediğiniz herhangi bir ek ölçümleri seçin.

    4. Varyantlar bölümünde, iki değişken belirlemek:

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

      Kontrol grubu için bir oluşturmak plant_labeler_model parametresi ve ayarlayın plant_labeler_v1 . Kontrol grubuna atanan kullanıcılar eski modeli kullanacaktır. (Do parametreyi ayarlanmamış (no change) size uygulamanızda bu yana, bir uzak değerini kullanmakta olduğunuz olduğunuz testi.)

      Deneysel Bitki etiketleyici varyantı için, set plant_labeler_model parametresini plant_labeler_v2 (bu isim altında yeni bir model yayınlanan varsayılarak). 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. Deney bir lideri belirleyemez ise, gerekebilir daha fazla kullanıcıya deney genişletmek .

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.

A / B Testi bölümünde Firebase konsoluna , ayrıntıları tamamlanmış deney görüntülemek 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.

Tüm kullanıcılara bir varyant dışarı rulo için tıklayın denemenin ayrıntıları sayfasında varyant dışarı> Rulosunu. Bunu yaptıktan sonra, değeri plant_labeler_model parametresi olacak plant_labeler_v2 tüm kullanıcılar için.

Gelecekteki bir uygulama güncellemesinde olarak, varsayılan değeri değiştirmek gerekir plant_labeler_model için parametre plant_labeler_v2 ve eğer kullanıyorsanız paketlenmiş modelini güncellemek. 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.