訓練新的自訂模型後,您可以透過 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 參數的預設值,如下列範例所示:
Swift
let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
"plant_labeler_model": "plant_labeler_v1" as NSObject,
// ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()
Objective-C
FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig];
NSDictionary<NSString *, NSObject *> *defaults = @{
@"plant_labeler_model" : (NSObject *)@"plant_labeler_v1",
// ...
};
[remoteConfig setDefaults:defaults];
[remoteConfig fetchAndActivateWithCompletionHandler:nil];
接著,變更模型設定程式碼,載入 plant_labeler_model 參數指定的模型:
Swift
let rcValue = remoteConfig.configValue(forKey: "plant_labeler_model")
guard let remoteModelName = rcValue.stringValue else { return }
// ...
let remoteModel = RemoteModel(
name: remoteModelName,
allowsModelUpdates: true,
initialConditions: initialConditions,
updateConditions: updateConditions
)
ModelManager.modelManager().register(remoteModel)
// Optionally configure a local model:
// https://firebase.google.com/docs/ml/ios/use-custom-models#configure_a_local_model
Objective-C
FIRRemoteConfigValue *rcValue = [remoteConfig configValueForKey:@"plant_labeler_model"];
NSString *remoteModelName = [rcValue stringValue];
// ...
FIRRemoteModel *remoteModel = [[FIRRemoteModel alloc] initWithName:remoteModelName
allowsModelUpdates:YES
initialConditions:initialConditions
updateConditions:updateConditions];
[[FIRModelManager modelManager] 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 為不同使用者指派不同模型,以便進行比較。
繼續操作前,請在模型下載程式碼中新增下列內容:
Swift
NotificationCenter.default.addObserver(
forName: .firebaseMLModelDownloadDidSucceed,
object: nil,
queue: nil
) { [weak self] notification in
guard let _ = self,
let userInfo = notification.userInfo,
let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue]
as? RemoteModel,
model.name == remoteModelName
else { return }
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
if rcValue.source == .remote {
Analytics.logEvent("nondefault_model_downloaded", parameters: nil)
}
}
Objective-C
__weak typeof(self) weakSelf = self;
[NSNotificationCenter.defaultCenter
addObserverForName:FIRModelDownloadDidSucceedNotification
object:nil
queue:nil
usingBlock:^(NSNotification *_Nonnull note) {
if (weakSelf == nil | note.userInfo == nil) {
return;
}
FIRRemoteModel *model = note.userInfo[FIRModelDownloadUserInfoKeyRemoteModel];
if ([model.name isEqualToString:remoteModelName] &&
rcValue.source == FIRRemoteConfigSourceRemote) {
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
[FIRAnalytics logEventWithName:@"nondefault_model_downloaded" parameters:nil];
}
}];
上述程式碼會記錄自訂 Analytics 事件,您稍後會將這個事件做為實驗的
2. 決定目標指標
下一步是決定如何評估模型成效,並確保應用程式會收集必要的資料,以便根據該指標測試不同版本的模型成效。
A/B Testing 內建多項指標,包括收益、每日參與度和使用者留存率。這些指標通常有助於測試不同的使用者體驗流程或微調參數,但可能不適合評估模型和用途。在這種情況下,您可以改為針對自訂 Analytics 事件進行最佳化。
以假設的植物圖片搜尋結果功能為例,假設您向使用者顯示搜尋結果時,是依據模型對每個結果的信心程度排序。如要瞭解模型的準確度,可以查看使用者開啟第一個搜尋結果的頻率。
如要測試哪種模型最能達成「盡量爭取頂端結果點擊次數」的目標,您可以在使用者輕觸結果清單中的第一個項目時,記錄自訂事件。
Swift
Analytics.logEvent("first_result_opened", parameters: nil)
Objective-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
最終要測試的指標取決於應用程式使用模型的方式。
此時,您就可以將應用程式部署到 App Store。應用程式會繼續使用原始模型,但您加入的 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,並更新隨附模型 (如有)。不過,使用者已採用最新模型,因此您可以在方便時 (例如下次更新功能時),將這項更新推送至已發布的應用程式。