訓練新的自訂模型或 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
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
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
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 事件,以便日後用於實驗的
2. 決定目標指標
接下來,您必須決定如何評估模型的成效,並確保應用程式收集到必要資料,以便根據該指標測試不同版本的模型效能。
A/B Testing 內建多項指標,包括收益、每日參與度和使用者留存率。這些指標通常可用於測試不同的使用者體驗流程或微調參數,但可能不適合用於評估模型和用途。在這種情況下,您可以改為嘗試針對自訂 Analytics 事件進行最佳化。
以假設的視覺植物搜尋功能為例,假設您按照模型對每個結果的信心程度,向使用者呈現搜尋結果。您可以查看使用者開啟第一個搜尋結果的頻率,藉此瞭解模型的準確度。
如要測試哪個模型最能達成提高熱門搜尋結果點擊次數的目標,您可以在使用者輕觸結果清單中的第一個項目時,記錄自訂事件。
Kotlin
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 實驗,測試使用新模型 (而非目前的模型) 的效果。
如要建立實驗,請按照下列步驟操作:
-
在 Firebase 主控台的「事件」頁面上,確認您是否記錄相關的 Analytics 事件:啟用事件和目標指標。
應用程式必須至少記錄一次每個事件,事件才會顯示在 Firebase 控制台中。
-
在 Firebase 主控台中,開啟「A/B Testing」專區。
-
建立新實驗:
依序點選「建立實驗」>「Remote Config」。
-
在「指定目標」部分中:
- 從清單中選擇應用程式
- 指定要納入實驗的使用者人數
- 選取您開始記錄的啟用事件 (在本例中為 nondefault_model_downloaded)
-
在「目標」部分,從目標指標清單中選擇先前部分所確定的目標指標 (本例為 first_result_opened),然後選取要追蹤的其他指標,例如購買收益或無當機的使用者。
-
在「變體」部分中,定義兩個變體:
- 控制組 (系統自動建立)
- 實驗性植物標籤
針對控制組,建立
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 部分中,開啟已完成實驗的詳細資料檢視畫面。透過這個檢視畫面,您可以根據目標指標和所選的次要指標,查看各個變化版本的成效。有了這項資訊,您就可以決定是否要推出領先變數或其他變數。
如要向所有使用者推出變化版本,請在實驗的詳細資料頁面中,依序點選 more_vert >「推出變化版本」。完成後,所有使用者的 plant_labeler_model
參數值都會變成 plant_labeler_v2
。
在日後的應用程式更新中,您應將 plant_labeler_model
參數的預設值變更為 plant_labeler_v2
,並更新已使用的內含模型。不過,使用者已在使用最新的模型,因此您可以視情況將這項更新推送至已發布的應用程式,例如下次進行功能更新時。