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 Testi ile yeni modelin gerçek dünya koşullarında ne kadar iyi performans gösterdiğini 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:

Swift

let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
    "plant_labeler_model": "plant_labeler_v1" as NSObject,
    // ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()

Objective-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:

Swift

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

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

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 ekleyin. Bu özellik sayesinde A/B Testi, amacıyla farklı modeller sunabilirsiniz.

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

Swift

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)
    }
}

Objective-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, ileride günlük olarak kullanacağınız özel bir Analytics etkinliğini günlüğe kaydeder. 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 Testi'nde gelir, günlük ve bütçe gibi çeşitli yerleşik metrikler bulunur. 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.

Swift

Analytics.logEvent("first_result_opened", parameters: nil)

Objective-C

[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];

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

Bu noktada, uygulamanızı App Store'a dağıtabilirsiniz. Uygulamanız orijinal modelinizi kullanmaya devam eder. Ancak eklediğiniz Remote Config ve Analytics kodu, farklı özellikleri Firebase konsolunu kullanarak farklı modellere erişebilirsiniz.

3. A/B Testi denemesi çalıştırma

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

Denemeyi oluşturmak için:

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

    Uygulamanızın, Firebase konsolu.

  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 seçin.

    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 kullandığınızdan emin olmak için parametreyi (no change) olarak ayarlamayın. uzaktan kumanda değeri.)

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

    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 Testi bir lider tanımladı. Deneme bir öncü belirleyemezse denemeyi daha fazla kullanıcıya genişletin.

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

A/B testi sonuç kartı

A/B Testi kullanıcının dönüşüm gerçekleştireceğini beyan etmek için 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 Testi 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.