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

Yeni bir özel modeli veya AutoML Vision Edge modelini eğittikten sonra şunları kullanabilirsiniz: A/B Testing kullanarak yeni modelin gerçek dünya koşullarında ne kadar iyi performans gösterdiğini öğrenebilirsiniz. ve halihazırda kullandığınız modelle karşılaştırılır. Yeni modelinizin kullanıma sunarak, yeni modeli tüm kullanıcılarınıza kolayca sunabilir, Google Play Store'u kullanabilirsiniz.

Bu sayfada, iki sürümü değerlendiren bir A/B testini nasıl gerçekleştirebileceğiniz gösterilmektedir bir model geliştiriyor. Bu özellik kullanıcıların farklı bitkilerin bitki türlerini tanımlamasına yardımcı olmak için resimlerini.

Diyelim ki yeni bir bitki etiketleme modeli yayınladınız. plant_labeler_v2 ve bunu karşılaştıran bir deneme çalıştırmak istiyorsunuz plant_labeler_v1 adlı geçerli modelinizle. Aşağıdaki adımlar denemenin nasıl oluşturulacağını, çalıştırılacağını ve sonuçlara göre nasıl işlem yapılacağını gösterebilir.

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

Modellerinize A/B testi uygulamanın ilk adımı, uygulamanızı Remote Config parametresini kullanarak hangi modeli kullandığını belirler. En başta, bu parametrenin varsayılan değerini, uygulamanızın Google tarafından ancak model adı uzaktan kumanda tarafından kontrol edildiği için, yapılandırılabilir parametre olarak kullandığınızda, farklı modellerle denemeler yapabilir ve Böylece, uygulama güncellemelerini her zaman kullanıcılarınıza aktarmak zorunda kalmazsınız.

Bu nedenle, geçerli modelinizi plant_labeler_v1, uygulama başlatma kodunuzda Etiketin varsayılan değeri olarak plant_labeler_v1, plant_labeler_model parametresi için aşağıdaki örnekte gösterildiği gibi:

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:

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

Uygulamanız artık hangi modelin kaydedileceğini belirlemek için bir Remote Config parametresi sadece yeni bir model yayınlayıp ona bu modeli atayarak adını Remote Config parametresine ekler. Bu özellik sayesinde A/B Testing, amacıyla farklı modeller sunabilirsiniz.

Devam etmeden önce model indirme işlemine aşağıdaki ekleme işlemini de yapın kod:

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 denemenin etkinleştirme etkinliği. Etkinleştirme etkinliği, kullanıcının denemenin bir parçası olarak kabul edilmeden önce tetiklenmesi gerekir. Bu cihazları A/B testinize kaydedilmemesini sağlar. makine öğrenimi modelini indirmeyi bitirdi.

2. Hedef metriği belirleme

Sonraki adım, modelinizin başarısını nasıl ölçeceğinize karar vermektir. ve uygulamanızın bu bilgiyi ne kadar iyi test edebildiğini test etmek için modelin farklı sürümleri bu metriğe göre performans gösterir.

A/B Testing; gelir, günlük ve bütçe dahil olmak üzere yerleşik metriklere sahiptir. en iyi uygulamaları paylaşacağız. Bu metrikler çoğu zaman test ve farklı kullanıcı deneyimi akışları veya ince ayar parametreleri olsa da ve kullanım alanınızı değerlendirme. Böyle durumlarda optimizasyon yapmasına yardımcı olur.

Örnek olarak, varsayımsal görsel bitki arama özelliğini kullandıkça, bitki arama kullanıcılarınıza, modelin güven derecesine göre sıralayarak her sonuç. Modelinizin doğruluğu hakkında fikir edinmenin bir yolu, Kullanıcıların ilk arama sonucunu ne sıklıkta açtığına bakılır.

En iyi sonuç tıklamalarını artırma hedefine en çok hangi modelin ulaştığını test etmek için bir kullanıcı sonuçtaki ilk öğeye her dokunduğunda özel bir etkinlik kaydedersiniz liste'ye dokunun.

Kotlin+KTX

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

Java

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

Test edeceğiniz metrik, uygulamanızın modeli.

Bu noktada, uygulamanızı Play Store'a dağıtabilirsiniz. Uygulamanız orijinal modelinizi kullanmaya devam eder. ancak eklediğiniz Remote Config ve Analytics kodu, deneme yapmanıza yalnızca Firebase konsolunu kullanarak farklı modellerle gerçekleştirebilirsiniz.

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

Uygulamanız artık kullanıcılarınızın analiz verileri topluyor. yeni örnek uygulamanızı kullanmanın etkisini test eden bir A/B Testing ilişkilendirme modelini kullanır.

Denemeyi oluşturmak için:

  1. Etkinliklerde Firebase konsolunun ilgili sayfasına giderek ilgili Analytics etkinlikleri: etkinleştirme etkinliği ve hedef metriği.

    Uygulamanızın, Firebase konsolu.

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

  3. Yeni bir deneme oluşturun:

    1. Deneme oluştur > Remote Config değerleridir.

    2. Hedefleme bölümünde:

      • Listeden uygulamanızı seçin
      • Kaç kullanıcınızı dahil etmek istediğinizi deneme
      • Giriş yapmaya başladığınız etkinleştirme etkinliğini seçin (bu örnekte, nondefault_model_downloaded (yalnızca varsayılan olarak değil)
    3. Hedefler bölümünde, belirlediğiniz hedef metriğini seçin önceki bölüm (bu örnekte, first_result_opened) seçin ve belirlediğiniz diğer metrikleri, (satın alma geliri veya kilitlenme sorunu yaşamayan kullanıcılar gibi) izlemek istedikleriniz.

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

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

      Kontrol grubu için bir plant_labeler_model parametresini alıp plant_labeler_v1. Kontrol grubuna atanan kullanıcılar eski modeli kullanacak. (Uygulamanızda GCLID yerine (no change) gibi alan adı kullandığınızdan emin olun uzaktan kumanda olarak ayarlanır.)

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

    A/B testi yapılandırma ekranı

Denemeyi başlatın ve tamamlanana kadar birkaç gün veya daha uzun süre çalıştırın. A/B Testing lider ilan ediyor. Deneme bir öncü belirleyemezse denemeyi daha fazla kullanıcıyı kapsayacak şekilde genişletin.

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

A/B testi sonuç kartı

A/B Testing tarafından beyan için yeterli bilgi toplandıktan sonra lider; bu örnekte, en iyi arama sonucunu en üst düzeye çıkaran varyant Kazanan varyantın mı (veya başka bir varyantın mı) kullanıma sunulacağına karar verebilirsiniz. varyantı) sunun.

Firebase konsolunun A/B Testing bölümünde ayrıntıları açın bir görünümünü elde edersiniz. Bu görünümden her varyantın performans, hedef metriğinize ve seçtiğiniz ikincil metriklere göre belirtilir. Bu bilgiler ışığında, öncü varyantı kullanıma sunup sunmayacağınıza karar verebilirsiniz. kullanabilirsiniz.

Bir varyantı tüm kullanıcılara sunmak için şunu tıklayın: > Varyantı şurada kullanıma sunun: denemenizin ayrıntılar sayfasına gidin. Bunu yaptığınızda, plant_labeler_model parametresi plant_labeler_v2 olacak kullanıcı başına ortalama gelirdir.

Gelecekteki bir uygulama güncellemesinde, plant_labeler_model parametresini plant_labeler_v2 olarak ayarlayıp paketlenen modeli hakkında bilgi edinin. Ancak kullanıcılarınız zaten en son modeli kullanıyor. Bu nedenle, uygun bir zamanda bu güncellemeyi, yayınlanan uygulamanın bir parçası olarak aktarabilirsiniz. Örneğin bir özellik güncellemesi yaptığınızda.