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

Uji A/B dua versi model

Setelah 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 baru saja menerbitkan model pelabelan tanaman baru, plant_labeler_v2 dan Anda ingin menjalankan eksperimen yang membandingkannya 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 memublikasikan model Anda saat ini dengan nama plant_labeler_v1 , Anda akan, dalam kode inisialisasi aplikasi, menetapkan plant_labeler_v1 sebagai nilai default parameter plant_labeler_model , seperti dalam contoh berikut:

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

Jawa

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.
                  // ...
                }
            }
        });

Kemudian, ubah kode pengaturan model Anda untuk memuat model yang ditentukan oleh parameter plant_labeler_model :

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

Jawa

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

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:

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

Jawa

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

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

Kotlin+KTX

FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)

Jawa

FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);

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

Pada titik ini, Anda dapat menerapkan aplikasi Anda ke Play 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. Di halaman Peristiwa di Firebase console, verifikasi bahwa Anda mencatat peristiwa Analytics yang relevan: peristiwa aktivasi dan metrik sasaran.

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

  2. Di Firebase console, buka bagian Pengujian A/B .

  3. Buat eksperimen baru:

    1. Klik Buat eksperimen > Remote Config .

    2. Di bagian Penargetan :

      • Pilih aplikasi Anda dari daftar
      • Tentukan berapa banyak pengguna yang ingin Anda sertakan dalam eksperimen
      • Pilih acara aktivasi yang Anda mulai masuk (dalam contoh ini, nondefault_model_downloaded )
    3. Di bagian Sasaran , pilih metrik sasaran yang Anda tentukan di bagian sebelumnya (dalam contoh ini, first_result_opened ) dari daftar metrik sasaran, dan pilih metrik tambahan yang ingin Anda lacak, seperti pendapatan pembelian atau pengguna bebas error.

    4. Di bagian Varian , tentukan dua varian:

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

      Untuk grup Kontrol , buat parameter plant_labeler_model dan setel ke plant_labeler_v1 . Pengguna yang ditetapkan ke grup kontrol akan menggunakan model lama. (Jangan setel parameter ke (no change) , karena di aplikasi Anda, Anda menguji apakah Anda menggunakan nilai jarak jauh.)

      Untuk varian plant_labeler_model tanaman Eksperimental , setel parameter plant_labeler_v2 ke plant_labeler_v2 (dengan asumsi Anda menerbitkan model baru Anda dengan 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 eksperimen tidak dapat menentukan unggulan, Anda mungkin perlu memperluas eksperimen ke lebih banyak pengguna .

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.

Di bagian Pengujian A/B pada Firebase console , buka tampilan detail eksperimen yang telah 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 meluncurkan varian ke semua pengguna, klik > Luncurkan varian di halaman detail eksperimen. Setelah Anda melakukannya, nilai parameter plant_labeler_model akan menjadi 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, sehingga Anda dapat mendorong pembaruan ini sebagai bagian dari aplikasi yang diterbitkan kapan pun nyaman, seperti saat Anda membuat pembaruan fitur berikutnya.