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 modelle karşılaştırıldığında 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, uygulama güncellemesine gerek kalmadan yeni modeli kolayca tüm kullanıcılarınıza sunabilirsiniz.

Bu sayfada, varsayımsal bir görsel tesis arama özelliğine güç veren bir modelin iki versiyonunu değerlendiren bir A/B testini nasıl yürütebileceğiniz gösterilmektedir. Bu özellik, kullanıcıların bitki türlerini resimlerinden tanımlamasına yardımcı olmak için özel bir resim etiketleme modeli kullanır.

Yeni bir tesis etiketleme modeli ( plant_labeler_v2 yayınladığınızı ve bunu plant_labeler_v1 adlı mevcut modelinizle karşılaştıran bir deneme yürütmek istediğinizi varsayalım. Aşağıdaki adımlarda denemenin nasıl oluşturulacağı, çalıştırılacağı ve sonuçlar üzerinde nasıl işlem yapılacağı gösterilmektedir.

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

Modellerinizi A/B testine tabi tutmanın 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 halihazırda 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 bilgisayarınıza göndermenize gerek kalmadan farklı modelleri değiştirebilir ve 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, aşağıdaki örnekte olduğu gibi plant_labeler_model parametresinin varsayılan değeri olarak plant_labeler_v1 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 özellik, A/B Testinin farklı kullanıcılara karşılaştırma amacıyla 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 etkinliği olarak kullanacağınız özel bir Analytics etkinliğini günlüğe kaydeder. etkinleştirme olayı . Etkinleştirme etkinliği, kullanıcının denemenin parçası olarak kabul edilmesinden önce tetiklemesi gereken bir etkinliktir. Bu, kullanıcıların, cihazları özel makine öğrenimi modelini indirmeyi tamamlayana kadar A/B testinize kaydedilmemesini sağlar.

2. Bir hedef ölçüsü belirleyin

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 Testinde gelir, günlük etkileşim ve kullanıcıyı elde tutma dahil çeşitli yerleşik ölçümler bulunur. Bu ölçümler genellikle farklı kullanıcı deneyimi akışlarını test etmek veya parametrelere ince ayar yapmak için kullanışlıdır ancak modelinizi ve kullanım senaryonuzu değerlendirmek açısından anlamlı olmayabilir. Bu durumda bunun yerine özel bir Analytics etkinliği için optimizasyon yapmayı deneyebilirsiniz.

Varsayımsal görsel tesis arama özelliğini örnek olarak kullanarak, arama sonuçlarını kullanıcınıza modelin her sonuca olan güven sırasına göre 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.

Hangi modelin en yüksek sonuç tıklamalarını en üst düzeye çıkarma hedefine en iyi şekilde ulaştığını test etmek için, bir kullanıcı sonuç listesindeki ilk öğeye dokunduğunda özel bir etkinliği 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 sonuçta 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 tanıyacak.

3. Bir A/B Testi denemesi yapın

Artık uygulamanız kullanıcılarınızın elinde olduğuna ve analiz verilerini 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ünmeden önce 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 > Uzaktan Yapılandırma'yı 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ğini (bu örnekte, ilk_sonuç_opened ) seçin ve satın alma geliri veya kilitlenme yaşayan 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 kullanacak. (Uygulamanızda uzak bir değer kullandığınızı test ettiğiniz için parametreyi (no change) olarak ayarlamayın.)

      Deneysel tesis etiketleme çeşidi için plant_labeler_model parametresini plant_labeler_v2 olarak ayarlayın (yeni modelinizi bu adla 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 uzun süre çalışmasına izin verin. Deneme bir lider belirleyemezse denemeyi daha fazla kullanıcıya genişletmeniz gerekebilir.

4. Kazanan seçeneği tüm kullanıcılara sunun

A/B testi sonuç kartı

A/B Testi bir lider (bu durumda arama sonucu tıklamalarını en üst düzeye çıkaran varyant) ilan etmek için yeterli bilgiyi topladıktan sonra, 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, her bir varyantın hedef metriğinize ve seçtiğiniz ikincil metriklere göre 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 seçeneğini 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. Ancak 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ğunuzda bu güncellemeyi yayınlanan uygulamanın bir parçası olarak yayınlayabilirsiniz.