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 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. aktivasyon olayı . Aktivasyon olayı, kullanıcının denemenin bir parçası olarak kabul edilmeden önce tetiklemesi gereken bir olaydır. Bu, cihazları özel ML modellerini indirmeyi bitirene kadar kullanıcıların A/B testinize kaydedilmemesini sağlar.

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:

  1. 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.

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

  3. Yeni bir deneme oluşturun:

    1. Deneme oluştur > Remote Config'i 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ğ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.

    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 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 parametresini plant_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.

    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 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 sonuç kartı

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 > 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.