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
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:
-
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.
-
Firebase konsolunda A/B Testi 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
- 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)
-
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.
-
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 bunuplant_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
parametresiniplant_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.
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 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 more_vert > 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.