訓練新的自訂模型後,您可以透過 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/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/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實驗
現在使用者已開始使用您的應用程式,且應用程式正在收集 Analytics 資料,請建立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),因為您在應用程式中測試的是使用遠端值。)如果是「Experimental plant labeler」(實驗性植物標籤器) 變體,請將
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,並更新隨附模型 (如有)。不過,使用者已採用最新模型,因此您可以在方便時 (例如下次更新功能時),將這項更新推送至已發布的應用程式。