Yeni bir özel modeli veya AutoML Vision Edge modelini eğittikten sonra, yeni modelin halihazırda 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 Testini kullanabilirsiniz. Yeni modelinizin bir iyileştirme olduğunu onayladıktan sonra, yeni modeli uygulama güncellemesi gerektirmeden tüm kullanıcılarınıza kolayca sunabilirsiniz.

Bu sayfa, varsayımsal bir görsel tesis arama özelliğine güç sağlayan bir modelin iki versiyonunu değerlendiren bir A/B testini nasıl gerçekleştirebileceğinizi gösterir. Bu özellik, kullanıcıların bitki türlerini görüntülerinden tanımlamalarına yardımcı olmak için özel bir görüntü etiketleme modeli kullanır.
Yeni bir bitki etiketleme modeli (plant_labeler_v2) yayınladığınızı ve bunu, plant_labeler_v2
adlı mevcut modelinizle karşılaştıran bir deney yürütmek istediğinizi plant_labeler_v1
. Aşağıdaki adımlar, denemenin nasıl kurulacağını, çalıştırılacağını ve sonuçlar üzerinde nasıl işlem yapılacağını gösterir.
1. Modelinizi uzaktan yapılandırılabilir yapın
Modellerinizi A/B testinin 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 zaten 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 cihazınıza göndermek zorunda kalmadan değiştirebilir ve farklı modelleri 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 plant_labeler_v1
aşağıdaki örnekte olduğu gibi plant_labeler_model
parametresinin varsayılan değeri olarak ayarlarsınız:
Süratli
let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
"plant_labeler_model": "plant_labeler_v1" as NSObject,
// ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()
Amaç-C
FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig];
NSDictionary<NSString *, NSObject *> *defaults = @{
@"plant_labeler_model" : (NSObject *)@"plant_labeler_v1",
// ...
};
[remoteConfig setDefaults:defaults];
[remoteConfig fetchAndActivateWithCompletionHandler:nil];
Ardından, plant_labeler_model
parametresi tarafından belirtilen modeli yüklemek için model kurulum kodunuzu değiştirin:
Süratli
let rcValue = remoteConfig.configValue(forKey: "plant_labeler_model")
guard let remoteModelName = rcValue.stringValue else { return }
// ...
let remoteModel = RemoteModel(
name: remoteModelName,
allowsModelUpdates: true,
initialConditions: initialConditions,
updateConditions: updateConditions
)
ModelManager.modelManager().register(remoteModel)
// Optionally configure a local model:
// https://firebase.google.com/docs/ml/ios/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/ios/use-custom-models#configure_a_local_model
Amaç-C
FIRRemoteConfigValue *rcValue = [remoteConfig configValueForKey:@"plant_labeler_model"];
NSString *remoteModelName = [rcValue stringValue];
// ...
FIRRemoteModel *remoteModel = [[FIRRemoteModel alloc] initWithName:remoteModelName
allowsModelUpdates:YES
initialConditions:initialConditions
updateConditions:updateConditions];
[[FIRModelManager modelManager] 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 yetenek, A/B Testinin, onları karşılaştırmak amacıyla farklı kullanıcılara farklı modeller atamasını sağlar.
Devam etmeden önce, model indirme kodunuza aşağıdaki eklemeyi de yapın:
Süratli
NotificationCenter.default.addObserver(
forName: .firebaseMLModelDownloadDidSucceed,
object: nil,
queue: nil
) { [weak self] notification in
guard let _ = self,
let userInfo = notification.userInfo,
let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]
as? RemoteModel,
model.name == remoteModelName
else { return }
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
if rcValue.source == .remote {
Analytics.logEvent("nondefault_model_downloaded", parameters: nil)
}
}
Amaç-C
__weak typeof(self) weakSelf = self;
[NSNotificationCenter.defaultCenter
addObserverForName:FIRModelDownloadDidSucceedNotification
object:nil
queue:nil
usingBlock:^(NSNotification *_Nonnull note) {
if (weakSelf == nil | note.userInfo == nil) {
return;
}
FIRRemoteModel *model = note.userInfo[FIRModelDownloadUserInfoKeyRemoteModel];
if ([model.name isEqualToString:remoteModelName] &&
rcValue.source == FIRRemoteConfigSourceRemote) {
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
[FIRAnalytics logEventWithName:@"nondefault_model_downloaded" parameters:nil];
}
}];
Yukarıdaki kod, daha sonra denemeniz için kullanacağınız özel bir Analytics etkinliğini günlüğe kaydeder.
2. Bir hedef metriği 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 Testi, gelir, günlük katılım ve kullanıcıyı elde tutma dahil olmak üzere çeşitli yerleşik metriklere sahiptir. Bu ölçümler genellikle farklı UX akışlarını test etmek veya parametrelerin ince ayarını yapmak için kullanışlıdır, ancak modelinizi ve kullanım durumunuzu 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 tesis arama özelliğini kullanarak, kullanıcınıza arama sonuçlarını modelin her bir sonuç için güven sırasına göre sunduğunuzu varsayalım. Modelinizin doğruluğu hakkında bir fikir edinmenin bir yolu, kullanıcıların ilk arama sonucunu ne sıklıkta açtığına bakmaktır.
Hangi modelin en iyi sonuç tıklamalarını en üst düzeye çıkarma hedefine en iyi ulaştığını test etmek için, bir kullanıcı sonuç listesindeki ilk öğeye her dokunduğunda özel bir olay kaydedersiniz.
Süratli
Analytics.logEvent("first_result_opened", parameters: nil)
Amaç-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
Test ettiğiniz ölçüm, nihai olarak uygulamanızın modelinizi nasıl kullandığına bağlıdır.
Bu noktada uygulamanızı App 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 sağlayacak.
3. Bir A/B Testi denemesi çalıştırın
Artık uygulamanız kullanıcılarınızın elinde olduğuna ve analitik 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 olaylarını günlüğe kaydettiğinizi doğrulayın: etkinleştirme olayı ve hedef metriği.
Uygulamanızın, Firebase konsolunda görünmeden önce her etkinliği en az bir kez 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ı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 )
Hedefler bölümünde, hedef metrikleri listesinden önceki bölümde belirlediğiniz hedef metriği seçin (bu örnekte first_result_opened ) ve satın alma geliri veya kilitlenmeyen kullanıcılar gibi izlemek istediğiniz ek metrikleri 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 bunuplant_labeler_v1
olarak ayarlayın. Kontrol grubuna atanan kullanıcılar eski modeli kullanacaktır. (Parametreyi(no change)
olarak ayarlamayın, çünkü uygulamanızda uzak bir değer kullandığınızı test ediyorsunuz.)Deneysel bitki etiketleyici varyantı için
plant_labeler_model
parametresiniplant_labeler_v2
olarak ayarlayın (yeni modelinizi bu ad altında yayınladığınızı varsayarak). 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 fazla çalışmasına izin verin. Deneme bir lider belirleyemiyorsa , denemeyi daha fazla kullanıcıya genişletmeniz gerekebilir.
4. Kazanan varyantı tüm kullanıcılara sunun

A/B Testi, bir lider ilan etmek için yeterli bilgi topladıktan sonra (bu durumda, en iyi arama sonucu tıklamaları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 , tamamlanmış 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 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 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
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. Bununla birlikte, 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ğunda bu güncellemeyi yayınlanan uygulamanın bir parçası olarak aktarabilirsiniz.