Bir modelin iki sürümüne A/B testi yapma

Yeni bir özel model veya AutoML Vision Edge modelini eğittikten sonra, yeni modelin gerçek koşullarda mevcut modelinize kıyasla ne kadar iyi performans gösterdiğini görmek için A/B Testing'ü kullanabilirsiniz. Yeni modelinizin iyileştirme sağladığını onayladıktan sonra, uygulama güncellemesi gerekmeden yeni modeli tüm kullanıcılarınıza kolayca sunabilirsiniz.

Bu sayfada, varsayımsal bir görsel bitki arama özelliğini destekleyen bir modelin iki sürümünü değerlendiren bir A/B testi nasıl yürütebileceğiniz gösterilmektedir. Bu özellik, kullanıcıların bitki türlerini resimlerinden belirlemelerine yardımcı olmak için özel bir resim etiketleme modeli kullanır.

Yeni bir bitki etiketleme modeli (plant_labeler_v2) yayınladığınızı ve bunu mevcut modeliniz (plant_labeler_v1) ile karşılaştıran bir deneme çalıştırmak istediğinizi varsayalım. Aşağıdaki adımlarda, denemenin nasıl oluşturulacağı, çalıştırılacağı ve sonuçlara göre nasıl işlem yapılacağı gösterilmektedir.

1. Modelinizi uzaktan yapılandırılabilir hale getirme

Modellerinizi A/B testi yapmanın ilk adımı, uygulamanızı hangi modeli kullanacağını belirlemek için Remote Config parametresi kullanacak şekilde değiştirmek olacaktır. Başlangıçta bu parametrenin varsayılan değerini, uygulamanızın halihazırda kullandığı model olarak ayarlarsınız. Ancak model adı, uzaktan yapılandırılabilir bir parametre tarafından kontrol edildiğinden, her seferinde uygulama güncellemelerini kullanıcılarınıza göndermek zorunda kalmadan farklı modelleri değiştirebilir ve deneyebilirsiniz.

Dolayısıyla, mevcut modelinizi plant_labeler_v1 adı altında yayınladıysanız uygulamanızın ilk başlatma kodunda plant_labeler_v1 parametresinin varsayılan değeri olarak plant_labeler_model değerini ayarlarsınız. Aşağıdaki örnekte bu işlem gösterilmektedir:

Kotlin

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, model kurulum kodunuzu plant_labeler_model parametresi tarafından belirtilen modeli yükleyecek şekilde değiştirin:

Kotlin

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

Uygulamanız hangi modelin yükleneceğini belirlemek için Remote Config parametresini kullandığından, yeni bir model yayınlayıp adını Remote Config parametresine atayarak modeli değiştirebilirsiniz. Bu özellik, A/B Testing'nin farklı modelleri karşılaştırmak amacıyla farklı kullanıcılara atamasına olanak tanır.

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

Kotlin

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 denemenizin etkinleştirme etkinliği olarak kullanacağınız özel bir Analytics etkinliğini günlüğe kaydeder. Etkinleştirme etkinliği, kullanıcının denemenin bir parçası olarak kabul edilmeden önce tetiklemesi gereken bir etkinliktir. Bu sayede, cihazları özel makine öğrenimi modelini indirene kadar kullanıcılar A/B testinize kaydedilmez.

2. Hedef metrik belirleme

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 Testing; gelir, günlük etkileşim ve kullanıcıları elde tutma gibi çeşitli yerleşik metriklere sahiptir. Bu metrikler genellikle farklı kullanıcı deneyimi akışlarını test etmek veya parametreleri hassaslaştırmak için kullanışlıdır ancak modelinizi ve kullanım alanınızı değerlendirmek için anlamlı olmayabilir. Bu durumda, özel bir Analytics etkinliği için optimizasyon yapmayı deneyebilirsiniz.

Örnek olarak varsayımsal görsel bitki arama özelliğini kullanarak kullanıcınıza arama sonuçlarını, modelin her bir sonuçla ilgili güven düzeyine göre sırayla sunduğunuzu varsayalım. Modelinizin doğruluğu hakkında fikir edinmenin bir yolu, kullanıcıların ilk arama sonucunu ne sıklıkta açtığını incelemektir.

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

Kotlin

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

Java

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

Test ettiğiniz metrik, 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 eder ancak eklediğiniz Remote Config ve Analytics kodu, yalnızca Firebase konsolunu kullanarak farklı modellerle deneme yapmanıza olanak tanır.

3. A/B Testing denemesi çalıştırma

Uygulamanız kullanıcılarınızın elinde ve analiz verileri toplamaya başladı. Şimdi, mevcut model yerine yeni modelinizi kullanmanın etkisini test eden bir A/B Testing denemesi oluşturun.

Denemeyi oluşturmak için:

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

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

  2. Firebase konsolunda A/B Testing 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
      • Kullanıcılarınızın kaç tanesini denemeye dahil etmek istediğinizi belirtin
      • Günlüğe kaydetmeye başladığınız etkinleştirme etkinliğini 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 (bu örnekte first_result_opened) ve takip etmek istediğiniz ek metrikleri (ör. satın alma geliri veya kilitlenme yaşamayan kullanıcılar) 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 bu parametreyi plant_labeler_v1 olarak ayarlayın. Kontrol grubuna atanan kullanıcılar eski modeli kullanır. (Uygulamanızda uzak bir değer kullandığınızı test ettiğiniz için parametreyi (no change) olarak ayarlamayın.)

      Deneysel bitki etiketleyici varyantı için plant_labeler_model parametresini plant_labeler_v2 olarak ayarlayın (yeni modelinizi bu ada göre yayınladığınız varsayılarak). Bu varyanta atanan kullanıcılar yeni modeli kullanır.

    A/B testi yapılandırma ekranı

Denemeyi başlatın ve A/B Testing bir lider ilan edene kadar birkaç gün veya daha uzun süre çalıştırın. Deneme bir lider belirleyemiyorsa denemeyi daha fazla kullanıcıya genişletmeniz gerekebilir.

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

A/B testi sonuç kartı

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

Firebase Konsolu'nun A/B Testing bölümünde, tamamlanmış denemenin ayrıntılar görünümünü açın. Bu görünümde, her varyantın hedef metriğinize ve seçtiğiniz ikincil metriklere göre nasıl performans gösterdiğini görebilirsiniz. Bu bilgilerle, lider 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 olur.

Gelecekteki bir uygulama güncellemesinde, plant_labeler_model parametresinin varsayılan değerini plant_labeler_v2 olarak değiştirmeniz ve kullanıyorsanız paketlenmiş modeli güncellemeniz gerekir. Ancak kullanıcılarınız zaten en son modeli kullandığından, bu güncellemeyi uygun bir zamanda (ör. bir sonraki özellik güncellemesini yaptığınızda) yayınlanan uygulamanın bir parçası olarak yayınlayabilirsiniz.