A/B 測試模型的兩個版本

訓練新的自訂模型或 AutoML Vision Edge 模型後,您可以使用 A/B Testing,以便查看新模型在現實中的成效。 。當您確認新模型已 您可以輕鬆將新模式提供給所有使用者 不必更新應用程式

本頁說明您可以如何執行 A/B 版本測試,評估兩個版本的成效 這種模型為假想視覺植物搜尋功能採用模型這項功能 使用自訂圖像標籤模型 協助使用者辨識來自不同領域的植物 這類模型的成本

假設您剛發布了新的植物標籤模型 plant_labeler_v2而且您想進行實驗 切換至目前的模型 (名為 plant_labeler_v1)。步驟如下 ,說明如何設定並執行實驗,以及根據結果採取行動。

1. 將模型設為可從遠端設定

A/B 測試模型的第一步是修改應用程式,使其使用 Remote Config 參數,即可判斷要使用的模型。一開始, 會將此參數的預設值設為您應用程式的模型 但由於模型名稱是由遠端控制 您可以設定參數,藉此變更及測試不同模式 不必每次都向使用者推送應用程式更新

因此,如果您將目前的模型以 plant_labeler_v1,您應該在應用程式初始化程式碼中 將 plant_labeler_v1 做為 plant_labeler_model 參數,如以下範例所示:

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

Java

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

然後變更模型設定程式碼,以載入 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-kit/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml-kit/android/use-custom-models#configure_a_local_model

Java

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-kit/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml-kit/android/use-custom-models#configure_a_local_model

現在應用程式可以使用 Remote Config 參數,判斷要採用哪個模型 只需要發布新模型並指派模型即可 Remote Config 參數的名稱。這項功能可讓 A/B Testing 指派 以便向不同使用者比較不同模型

繼續操作之前,請一併在下載模型時新增下列項目 程式碼:

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

Java

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

上述程式碼會記錄稍後要用做的 Analytics 事件, 實驗的啟用事件。啟用事件是指 使用者必須先觸發實驗,系統才會將他們納入實驗。這個 確保在 A/B 版本測試中,系統不會在使用者的裝置 並成功下載自訂 ML Kit 模型

2. 決定目標指標

下一步是決定如何評估模型成效 並確保應用程式收集的資料可測試成效 不同的模型版本會根據該指標表現

A/B Testing」提供多項內建指標,包括收益 (每日) 參與度和使用者留存率這些指標在測試時 不同的使用者體驗流程或微調參數, 並評估模型和用途在這種情況下,您可以改為嘗試 以自訂 Analytics 事件做為最佳化目標

以假想視覺植物搜尋功能為例 系統會根據模型的可信度 每項結果。想要瞭解模型準確度的方法之一 有利於使用者開啟第一個搜尋結果的頻率

如要測試哪種模式最能達成「盡量提高熱門搜尋結果點擊次數」的目標, 每當使用者輕觸搜尋結果中的第一個項目時,就會記錄自訂事件 請參考閱讀清單,進一步瞭解 如何選擇 Kubeflow Pipelines SDK 或 TFX

Kotlin+KTX

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

Java

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

最終測試的指標取決於應用程式使用 模型

此時,您可以將應用程式部署至 Play 商店。您的應用程式會繼續使用原始模型。 但您加入的 Remote Config 和 Analytics 程式碼可以用來進行實驗 方便客戶使用 Firebase 控制台

3. 執行A/B Testing實驗

應用程式已納入使用者收集數據分析資料 建立 A/B Testing 實驗,測試新採用 而不是目前的模型

如要建立實驗,請按照下列步驟操作:

  1. 事件 Firebase 控制台的頁面,檢查您是否記錄相關的 Analytics 事件:啟用事件和目標指標。

    您的應用程式至少要記錄每個事件一次,事件才會顯示在 Firebase 控制台。

  2. Firebase 控制台中開啟「A/B Testing部分。

  3. 建立新實驗:

    1. 按一下「建立實驗」>「建立實驗」Remote Config

    2. 在「指定目標」部分中:

      • 從清單中選擇應用程式
      • 指定要納入名單的使用者人數 實驗組
      • 選取您開始記錄的啟用事件 (在此範例中為 nondefault_model_downloaded)
    3. 在「目標」部分,選擇您決定的目標指標 上一個區段 (在本例中為 first_result_opened) 請從目標指標清單中,選取您想使用的其他指標 例如購買收益或未發生當機情形的使用者

    4. 在「Variants」區段中定義兩個變化版本:

      • 控制組 (自動建立)
      • 實驗用植物標籤人員

      針對「控制組」建立 plant_labeler_model 參數,並將該參數設為 plant_labeler_v1。指派給控制組的使用者 就會使用舊模型(請勿將此參數設為 (no change),因為您在應用程式中會測試您正在使用 遠端值。)

      針對「實驗版植物標籤工具」變數,將 將 plant_labeler_model 參數傳送至 plant_labeler_v2 (假設您發布了新模型) 。指派給這個變化版本的使用者會使用新的 模型

開始實驗,並讓實驗持續幾天以上,直到 A/B Testing 會宣告主要版本。如果實驗無法決定勝出版本, 您可能需要 向更多使用者開放實驗。

4. 向所有使用者推出成效最佳的變化版本

A/B Testing 收集到足夠的資訊可宣告 勝出者—在本例中是成效最佳的變化版本。 並決定是否採用成效最佳的版本 (或其他版本) 版本) 發布給所有使用者。

Firebase 控制台A/B Testing 部分,開啟詳細資料 即可查看已完成實驗的檢視畫面這個檢視畫面會顯示每個變化版本的 是根據您選取的目標指標和任何次要指標執行的成效 掌握這項資訊後,您就能決定要推出成效最佳的版本, 其他變化版本。

如要向所有使用者推出變化版本,請按一下 >針對以下項目導入變化版本: 實驗的詳細資料頁面。完成後, plant_labeler_model 參數會是 plant_labeler_v2 提供給所有使用者

日後的應用程式更新時,建議您 將 plant_labeler_model 參數更新為 plant_labeler_v2,並將隨附的 模型不過,您的使用者已經採用最新的模型, 您隨時可以在已發布的應用程式中推送這項更新 例如您下次更新功能時