Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Uji A/B dua versi model

Setelah Anda melatih model kustom baru atau model AutoML Vision Edge, Anda dapat menggunakan Pengujian A/B untuk melihat seberapa baik performa model baru dalam kondisi dunia nyata, dibandingkan dengan model yang sudah Anda gunakan. Setelah mengonfirmasi bahwa model baru Anda merupakan peningkatan, Anda dapat dengan mudah meluncurkan model baru ke semua pengguna, tanpa memerlukan pembaruan aplikasi.

Halaman ini menunjukkan bagaimana Anda dapat melakukan pengujian A/B yang mengevaluasi dua versi model yang mendukung fitur pencarian tanaman visual hipotetis. Fitur ini menggunakan model pelabelan gambar khusus untuk membantu pengguna mengidentifikasi spesies tanaman dari gambar mereka.

Misalkan Anda hanya menerbitkan sebuah model label pabrik baru, plant_labeler_v2 dan Anda ingin menjalankan eksperimen yang membandingkan dengan model Anda saat ini, bernama plant_labeler_v1 . Langkah-langkah di bawah ini menunjukkan cara menyiapkan eksperimen, menjalankannya, dan mengambil tindakan terhadap hasilnya.

1. Jadikan model Anda dapat dikonfigurasi dari jarak jauh

Langkah pertama untuk menguji A/B model Anda adalah memodifikasi aplikasi Anda untuk menggunakan parameter Remote Config guna menentukan model mana yang digunakannya. Awalnya, Anda akan menyetel nilai default parameter ini menjadi model yang sudah digunakan aplikasi Anda, tetapi karena nama model dikontrol oleh parameter yang dapat dikonfigurasi dari jarak jauh, Anda dapat mengubah dan bereksperimen dengan model yang berbeda tanpa harus mendorong pembaruan aplikasi ke pengguna setiap saat.

Jadi, jika Anda diterbitkan model Anda saat ini di bawah nama plant_labeler_v1 , Anda akan, dalam kode inisialisasi aplikasi Anda, set plant_labeler_v1 sebagai nilai default dari plant_labeler_model parameter, seperti dalam contoh berikut:

Cepat

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];

Kemudian, mengubah kode setup model Anda untuk memuat model ditentukan oleh plant_labeler_model parameter:

Cepat

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

Setelah aplikasi Anda menggunakan parameter Remote Config untuk menentukan model mana yang akan dimuat, Anda dapat mengubah model hanya dengan memublikasikan model baru dan menetapkan namanya ke parameter Remote Config. Kemampuan ini memungkinkan Pengujian A/B menetapkan model yang berbeda untuk pengguna yang berbeda untuk tujuan membandingkannya.

Sebelum melanjutkan, buat juga tambahan berikut pada kode unduhan model Anda:

Cepat

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];
              }
            }];

Kode di atas mencatat peristiwa Analytics khusus yang akan Anda gunakan nanti sebagai eksperimen Anda acara aktivasi . Peristiwa aktivasi adalah peristiwa yang harus dipicu oleh pengguna sebelum dianggap sebagai bagian dari eksperimen. Ini memastikan bahwa pengguna tidak akan direkam dalam pengujian A/B Anda hingga perangkat mereka selesai mengunduh model ML khusus mereka.

2. Tentukan metrik tujuan

Langkah selanjutnya adalah memutuskan bagaimana Anda akan mengukur keberhasilan model Anda, dan untuk memastikan aplikasi Anda mengumpulkan data yang diperlukan untuk menguji seberapa baik performa versi model yang berbeda menurut metrik tersebut.

Pengujian A/B memiliki beberapa metrik bawaan, termasuk pendapatan, interaksi harian, dan retensi pengguna. Metrik ini sering berguna untuk menguji aliran UX yang berbeda atau parameter penyesuaian, tetapi mungkin tidak masuk akal untuk mengevaluasi model dan kasus penggunaan Anda. Dalam situasi ini, Anda dapat mencoba mengoptimalkan peristiwa Analytics khusus.

Menggunakan fitur pencarian tanaman visual hipotetis sebagai contoh, misalkan Anda menyajikan hasil pencarian kepada pengguna Anda dalam urutan kepercayaan model dalam setiap hasil. Salah satu cara Anda bisa mendapatkan gambaran tentang akurasi model Anda adalah dengan melihat seberapa sering pengguna membuka hasil pencarian pertama.

Untuk menguji model mana yang paling berhasil mencapai tujuan memaksimalkan klik hasil teratas, Anda akan mencatat peristiwa khusus setiap kali pengguna mengetuk item pertama dalam daftar hasil.

Cepat

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

Objective-C

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

Metrik yang Anda uji pada akhirnya bergantung pada bagaimana aplikasi Anda menggunakan model Anda.

Pada titik ini, Anda dapat menerapkan aplikasi Anda ke App Store. Aplikasi Anda akan terus menggunakan model asli Anda, tetapi Remote Config dan kode Analytics yang Anda tambahkan akan memungkinkan Anda bereksperimen dengan model yang berbeda hanya menggunakan Firebase console.

3. Jalankan eksperimen Pengujian A/B

Setelah aplikasi Anda berada di tangan pengguna dan mengumpulkan data analitik, buat eksperimen Pengujian A/B yang menguji efek penggunaan model baru Anda, bukan model saat ini.

Untuk membuat eksperimen:

  1. Pada Acara halaman dari Firebase konsol, memverifikasi Anda log peristiwa Analytics yang relevan: acara aktivasi dan tujuan metrik.

    Aplikasi Anda perlu mencatat setiap peristiwa setidaknya sekali sebelum muncul di Firebase console.

  2. Dalam Firebase konsol, buka bagian A / B Testing.

  3. Buat eksperimen baru:

    1. Klik Buat eksperimen> Jarak Jauh Config.

    2. Pada bagian Penargetan:

      • Pilih aplikasi Anda dari daftar
      • Tentukan berapa banyak pengguna yang ingin Anda sertakan dalam eksperimen
      • Pilih acara aktivasi Anda mulai log (dalam contoh ini, nondefault_model_downloaded)
    3. Pada bagian Goals, memilih tujuan metrik yang ditentukan dalam bagian sebelumnya (dalam contoh ini, first_result_opened) dari daftar metrik tujuan, dan pilih metrik tambahan yang ingin Anda melacak, seperti pendapatan pembelian atau pengguna kecelakaan bebas.

    4. Pada bagian Varian, mendefinisikan dua varian:

      • Grup kontrol (dibuat secara otomatis)
      • Pelabel tanaman eksperimental

      Untuk kelompok kontrol, membuat plant_labeler_model parameter dan set ke plant_labeler_v1 . Pengguna yang ditetapkan ke grup kontrol akan menggunakan model lama. (Jangan mengatur parameter untuk (no change) , karena dalam aplikasi Anda, Anda pengujian sedang bahwa Anda menggunakan nilai terpencil.)

      Untuk Eksperimental Labeler tanaman varian, mengatur plant_labeler_model parameter untuk plant_labeler_v2 (dengan asumsi Anda diterbitkan model baru Anda di bawah nama itu). Pengguna yang ditetapkan ke varian ini akan menggunakan model baru.

    Layar konfigurasi pengujian A/B

Mulai eksperimen dan biarkan berjalan selama beberapa hari atau lebih, hingga Pengujian A/B menyatakan yang terdepan. Jika percobaan tidak dapat menentukan pemimpin, Anda mungkin perlu memperluas percobaan untuk pengguna yang lebih .

4. Luncurkan varian pemenang ke semua pengguna

Kartu hasil tes A/B

Setelah Pengujian A/B mengumpulkan informasi yang cukup untuk menyatakan yang terdepan—dalam hal ini, varian yang memaksimalkan klik hasil penelusuran teratas—Anda dapat memutuskan apakah akan meluncurkan varian unggulan (atau varian lain) ke semua pengguna Anda.

Pada bagian A / B Testing dari Firebase konsol , membuka rincian melihat dari percobaan selesai. Dari tampilan ini, Anda dapat melihat performa setiap varian menurut metrik sasaran dan metrik sekunder yang Anda pilih. Dengan informasi ini, Anda dapat memutuskan apakah akan meluncurkan varian terdepan atau varian lain.

Untuk menggelar varian untuk semua pengguna, klik > roll keluar varian pada halaman detail eksperimen. Setelah Anda melakukannya, nilai plant_labeler_model parameter akan plant_labeler_v2 untuk semua pengguna.

Dalam update aplikasi masa depan, Anda harus mengubah nilai default dari plant_labeler_model parameter untuk plant_labeler_v2 dan memperbarui model dibundel jika Anda menggunakan satu. Pengguna Anda sudah menggunakan model terbaru, jadi Anda dapat mendorong pembaruan ini sebagai bagian dari aplikasi yang diterbitkan kapan pun nyaman, seperti saat Anda membuat pembaruan fitur berikutnya.