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
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:
-
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
-
Firebase konsolunda A/B Testing bölümünü açın.
-
Yeni bir deneme oluşturun:
Deneme oluştur > Remote Config'i tıklayın.
-
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)
-
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.
-
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 parametreyiplant_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
parametresiniplant_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.
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 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 more_vert > 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.