訓練新的自訂模型或 AutoML Vision Edge 模型後,您可以使用 A/B 測試功能,比較新模型在實際情況下的執行情況 (相較於您已使用的模型)。確認新模型已改善後,即可輕鬆向所有使用者推出新模型,無須更新應用程式。
![](https://storage.googleapis.com/spec-host-backup/mio-collections%2Fassets%2F1MJW_FfTQUByefvZdSCFsExAds1orNYj9%2Fexperience-communicate-results-confidence-order.png)
本頁說明如何執行 A/B 測試,以評估假想視覺植物搜尋功能採用的兩種模型版本。這項功能使用自訂圖片標籤模型,協助使用者從圖片中識別植物物種。
假設您剛發布了新的植物標籤模型 plant_labeler_v2
,並且想要執行實驗,將該模型與目前的模型 (名為 plant_labeler_v1
) 進行比較。下列步驟說明如何設定、執行實驗,以及根據結果採取行動。
1. 將模型設為可從遠端設定
A/B 測試模型的第一步,是修改應用程式,使用遠端設定參數來判斷要使用的模型。一開始,您會將此參數的預設值設為應用程式已經使用的模型,但由於模型名稱是由遠端設定的參數控制,因此您不必每次向使用者推送應用程式更新,就能變更及測試不同的模型。
因此,如果您以 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/android/label-images-with-automl#configure-a-local-model-source
// 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/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model
現在應用程式使用遠端設定參數來決定要載入的模型,您只要發布新模型,並將其名稱指派給遠端設定參數,就可以變更模型。這項功能可讓 A/B 測試指派不同的模型給不同的使用者,以便進行比較。
繼續之前,請一併在模型下載程式碼中加入下列項目:
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 (分析) 事件,您稍後會使用這個事件做為實驗的
2. 決定目標指標
下一步是決定要如何評估模型成效,並確保應用程式收集必要的資料,以測試不同模型版本根據該指標的成效。
A/B 測試有數種內建指標,包括收益、每日參與度和使用者留存率。這些指標通常有助於測試不同的使用者體驗流程或微調參數,但對於評估模型和用途來說可能並不合理。在這種情況下,您可以改為針對自訂 Analytics (分析) 事件進行最佳化。
以假想視覺植物搜尋功能為例,假設您按照模型對每項結果的信心順序,向使用者顯示搜尋結果。您可以查看使用者開啟第一個搜尋結果的頻率,藉此瞭解模型的準確度。
如要測試哪個模型最能達成「盡量提高熱門搜尋結果點擊次數」的目標,您需要記錄使用者輕觸結果清單中第一個項目時產生的自訂事件。
Kotlin+KTX
FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)
Java
FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);
最終測試的指標取決於應用程式使用模型的方式。
此時,您可以將應用程式部署至 Play 商店。應用程式會繼續使用原始模型,但新增的遠端設定和 Analytics (分析) 程式碼,則可讓您透過 Firebase 控制台測試不同的模型。
3. 執行 A/B 測試實驗
現在,您的應用程式已進入使用者手中,並且正在收集數據分析資料,請建立 A/B 測試實驗,測試使用新模型 (而非目前模型) 的效果。
如要建立實驗,請按照下列步驟操作:
-
在 Firebase 控制台的「事件」頁面中,確認您記錄的是相關 Analytics (分析) 事件:啟用事件和目標指標。
應用程式至少需要記錄一次事件,事件才會顯示在 Firebase 控制台中。
-
在 Firebase 控制台中開啟「A/B 測試」部分。
-
建立新實驗:
依序按一下「建立實驗」>「遠端設定」。
-
在「指定目標」部分中:
- 從清單中選擇應用程式
- 指定要納入實驗的使用者人數
- 選取您開始記錄的啟用事件 (在此範例中為 nondefault_model_downloaded)
-
在「目標」區段,從目標指標清單中選擇您在上個部分決定的目標指標 (在此範例中為 first_result_opened),然後選取您想追蹤的其他指標,例如購買收益或未發生當機情形的使用者。
-
在「Variants」區段中定義兩個變化版本:
- 控制組 (自動建立)
- 實驗用植物標籤人員
針對「Control group」,建立
plant_labeler_model
參數並設為plant_labeler_v1
。指派給控制組的使用者會使用舊模式。(請勿將參數設為(no change)
,因為您是在應用程式中測試正在使用遠端值)。針對「實驗版植物標籤工具」變化版本,將
plant_labeler_model
參數設為plant_labeler_v2
(假設您以該名稱發布新模型)。指派給這個變化版本的使用者會使用新模型。
開始實驗,並讓實驗執行數天以上,直到 A/B 測試宣告主要版本為止。如果實驗無法決定勝出版本,您可能需要 讓更多使用者參與實驗。
4. 向所有使用者推出成效最佳的變化版本
![A/B 測試結果資訊卡](https://firebase.google.com/static/docs/ml/images/ml-abtest-leader.png?authuser=9&hl=zh-tw)
A/B 測試收集了足夠的資訊,可以宣告主要搜尋結果勝出版本 (在此範例中為獲得最多搜尋結果點擊次數的變化版本),您可以決定是否要向所有使用者推出成效最佳的變化版本 (或其他變化版本)。
在 Firebase 主控台的「A/B Testing」部分,開啟已完成實驗的詳細資料檢視畫面。在這個檢視畫面中,您可以查看根據目標指標和您選取的所有次要指標,每個變化版本的成效。透過這項資訊,您可以決定要推出主要的變化版本,還是其他變化版本。
如要向所有使用者推出變化版本,請在實驗詳細資料頁面上依序點選 more_vert > [推出變化版本]。如此一來,所有使用者的 plant_labeler_model
參數值就會為 plant_labeler_v2
。
日後的應用程式更新應將 plant_labeler_model
參數的預設值變更為 plant_labeler_v2
,並更新隨附的模型 (如有使用)。不過,使用者已經在使用最新模型,因此您可以視需要在已發布的應用程式中推送這項更新,例如下次進行功能更新時。