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

Yeni bir özel modeli veya AutoML Vision Edge modelini eğittikten sonra yeni modelin şu anda 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 Testi'ni kullanabilirsiniz. Yeni modelinizin bir iyileştirme olduğunu onayladıktan sonra uygulama güncellemesine gerek kalmadan yeni modeli tüm kullanıcılarınıza kolayca sunabilirsiniz.

Bu sayfada, varsayımsal görsel bitki arama özelliğini destekleyen bir modelin iki sürümünü değerlendiren bir A/B testini nasıl gerçekleştirebileceğiniz gösterilmektedir. Bu özellik, kullanıcıların görüntülerinden bitki türlerini tanımlamalarına yardımcı olmak için özel bir görüntü etiketleme modeli kullanır.

plant_labeler_v2 adlı yeni bir bitki etiketleme modeli yayınladığınızı ve bu modeli plant_labeler_v1 adlı mevcut modelinizle 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

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

Bu nedenle, geçerli modelinizi plant_labeler_v1 adıyla yayınladıysanız aşağıdaki örnekte gösterildiği gibi uygulama başlatma kodunuzda plant_labeler_v1 öğesini 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, model kurulum kodunuzu değiştirerek plant_labeler_model parametresi tarafından belirtilen modeli yükleyin:

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 Remote Config parametresi kullanmaktadır. Yeni bir model yayınlayıp bu modelin adını Remote Config parametresine atayarak modeli değiştirebilirsiniz. Bu özellik, A/B Testi'nin karşılaştırma amacıyla farklı kullanıcılara farklı modeller atamasına olanak tanır.

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 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 edilmesi için önce tetiklemesi gereken bir etkinliktir. Bu sayede kullanıcılar, cihazları özel ML modellerini indirme işlemini tamamlayana kadar A/B testinize kaydedilmez.

2. Hedef metriği belirleme

Bir 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'nde gelir, günlük etkileşim ve kullanıcıyı elde tutma gibi çeşitli yerleşik metrikler bulunur. Bu metrikler genellikle farklı kullanıcı deneyimi akışlarını veya ince ayar parametrelerini test etmek için yararlı olsa da modelinizi ve kullanım alanınızı 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 bitki arama özelliğini kullanarak arama sonuçlarını, modelin her sonuçtaki güven sırasına göre kullanıcılarınıza 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ığına bakmaktır.

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

Kotlin+KTX

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

Java

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

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

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

Uygulamanız kullanıcılarınızın elinde olduğuna ve analiz 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 etkinliklerini (etkinleştirme etkinliği ve hedef metriği) günlüğe kaydettiğinizi doğrulayın.

    Uygulamanızın, Firebase konsolunda görünmesi için her etkinliği en az bir kez günlüğe 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ı 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ğini (bu örnekte first_result_opened) seçin ve izlemek istediğiniz ek metrikleri (ör. satın alma geliri veya kilitlenme sorunu yaşamayan kullanıcılar) seçin.

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

      • Kontrol grubu (otomatik oluşturulan)
      • Deneysel bitki etiketleyici

      Kontrol grubu için plant_labeler_model parametresi oluşturun ve bunu plant_labeler_v1 olarak ayarlayın. Kontrol grubuna atanan kullanıcılar eski modeli kullanır. (Uygulamanızda uzak 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 adla yayınladığınız varsayılır). 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 uzun süre çalıştırın. Deneme bir öncü belirleyemezse denemeyi daha fazla kullanıcıyı kapsayacak şekilde genişletmeniz gerekebilir.

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

A/B testi sonuç kartı

A/B Testi bir lider bildirmek için yeterli bilgi topladıktan sonra (bu örnekte, en çok arama sonucu tıklama sayısı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, tamamlanan 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 bilgileri kullanarak öncü 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. Bu işlemi 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 varsa paket halinde sunulan modeli güncellemeniz gerekir. Bununla birlikte, kullanıcılarınız zaten en yeni modeli kullanıyor. Bu nedenle, mümkün olduğunda (örneğin, bir sonraki özellik güncellemesinde) bu güncellemeyi, yayınlanan uygulamanın bir parçası olarak aktarabilirsiniz.