새 커스텀 모델 또는 AutoML Vision Edge 모델을 학습시킨 후 A/B 테스팅을 사용하여 이미 사용 중인 모델과 비교하여 실제 조건에서 새 모델이 얼마나 잘 수행되는지 확인할 수 있습니다. 새 모델이 개선된 것임을 확인한 후에는 앱 업데이트 없이 모든 사용자에게 새 모델을 쉽게 롤아웃할 수 있습니다.

이 페이지에서는 가상의 시각적 식물 검색 기능을 지원하는 모델의 두 가지 버전을 평가하는 A/B 테스트를 수행하는 방법을 보여줍니다. 이 기능은 사용자 정의 이미지 라벨링 모델을 사용하여 사용자가 이미지에서 식물 종을 식별하는 데 도움을 줍니다.
방금 새 식물 레이블 지정 모델 plant_labeler_v2
를 게시하고 이를 현재 모델 plant_labeler_v1
과 비교하는 실험을 실행하려고 한다고 가정합니다. 아래 단계는 실험을 설정하고 실행하고 결과에 대해 조치를 취하는 방법을 보여줍니다.
1. 모델을 원격으로 구성할 수 있도록 설정
모델을 A/B 테스트하는 첫 번째 단계는 원격 구성 매개변수를 사용하여 사용하는 모델을 결정하도록 앱을 수정하는 것입니다. 처음에는 이 매개변수의 기본값을 앱에서 이미 사용하는 모델로 설정하지만 모델 이름은 원격으로 구성 가능한 매개변수에 의해 제어되기 때문에 앱 업데이트를 앱에 푸시하지 않고도 다른 모델을 변경하고 실험할 수 있습니다. 매번 사용자.
따라서 현재 모델을 plant_labeler_v1
이라는 이름으로 게시한 경우 앱 초기화 코드에서 다음 예와 같이 plant_labeler_model
plant_labeler_v1
변수의 기본값으로 설정합니다.
빠른
let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
"plant_labeler_model": "plant_labeler_v1" as NSObject,
// ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()
오브젝티브-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
매개변수로 지정된 모델을 로드합니다.
빠른
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/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/ios/use-custom-models#configure_a_local_model
오브젝티브-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/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 Testing에서 비교 목적으로 다른 사용자에게 다른 모델을 할당할 수 있습니다.
계속하기 전에 모델 다운로드 코드에 다음을 추가하십시오.
빠른
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)
}
}
오브젝티브-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 테스팅에는 수익, 일일 참여, 사용자 유지를 비롯한 몇 가지 기본 제공 측정항목이 있습니다. 이러한 측정항목은 다양한 UX 흐름을 테스트하거나 매개변수를 미세 조정하는 데 유용하지만 모델 및 사용 사례를 평가하는 데에는 적합하지 않을 수 있습니다. 이 상황에서는 대신 사용자 지정 Analytics 이벤트에 대해 최적화를 시도할 수 있습니다.
가상의 시각적 식물 검색 기능을 예로 사용하여 각 결과에 대한 모델의 신뢰도 순서로 검색 결과를 사용자에게 제공했다고 가정합니다. 모델의 정확성에 대한 아이디어를 얻을 수 있는 한 가지 방법은 사용자가 첫 번째 검색 결과를 얼마나 자주 열었는지 살펴보는 것입니다.
어떤 모델이 상위 결과 클릭수 최대화 목표를 가장 잘 달성했는지 테스트하기 위해 사용자가 결과 목록의 첫 번째 항목을 탭할 때마다 사용자 정의 이벤트를 기록합니다.
빠른
Analytics.logEvent("first_result_opened", parameters: nil)
오브젝티브-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
테스트하는 측정항목은 궁극적으로 앱에서 모델을 사용하는 방법에 따라 다릅니다.
이 시점에서 앱을 App Store에 배포할 수 있습니다. 앱은 계속해서 원래 모델을 사용하지만 추가한 원격 구성 및 분석 코드를 사용하면 Firebase 콘솔만 사용하여 다양한 모델을 실험할 수 있습니다.
3. A/B 테스팅 실험 실행
이제 앱이 사용자의 손에 있고 분석 데이터를 수집하고 있으므로 현재 모델 대신 새 모델을 사용할 때의 효과를 테스트하는 A/B 테스팅 실험을 만듭니다.
실험을 생성하려면:
Firebase 콘솔의 이벤트 페이지에서 관련 Analytics 이벤트(활성화 이벤트 및 목표 측정항목)를 기록하고 있는지 확인합니다.
앱은 Firebase 콘솔에 표시되기 전에 각 이벤트를 한 번 이상 기록해야 합니다.
Firebase 콘솔에서 A/B 테스팅 섹션을 엽니다.
새 실험 만들기:
실험 만들기 > 원격 구성을 클릭합니다.
타겟팅 섹션에서:
- 목록에서 앱 선택
- 실험에 포함할 사용자 수 지정
- 로깅을 시작한 활성화 이벤트를 선택합니다(이 예에서는 nondefault_model_downloaded ).
목표 섹션의 목표 메트릭 목록에서 이전 섹션에서 결정한 목표 메트릭(이 예에서는 first_result_opened )을 선택하고 구매 수익 또는 충돌 없는 사용자와 같이 추적하려는 추가 메트릭을 선택합니다.
변형 섹션에서 두 가지 변형을 정의합니다.
- 제어 그룹(자동으로 생성됨)
- 실험용 식물 라벨러
Control 그룹 의 경우
plant_labeler_model
매개변수를 생성하고 이를plant_labeler_v1
로 설정합니다. 제어 그룹에 할당된 사용자는 이전 모델을 사용합니다. (매개변수를(no change)
으로 설정하지 마십시오. 앱에서 원격 값을 사용하고 있는지 테스트하고 있기 때문입니다.)실험적 식물 라벨러 변형의 경우
plant_labeler_model
매개변수를plant_labeler_v2
로 설정합니다(해당 이름으로 새 모델을 게시했다고 가정). 이 변형에 할당된 사용자는 새 모델을 사용합니다.
실험을 시작하고 A/B 테스팅이 리더를 선언할 때까지 며칠 이상 실행합니다. 실험에서 리더를 결정할 수 없는 경우 더 많은 사용자에게 실험을 확장 해야 할 수 있습니다.
4. 모든 사용자에게 승리한 변형 출시

A/B Testing이 선두주자(이 경우 상위 검색 결과 클릭을 최대화한 변형)를 선언하기에 충분한 정보를 수집한 후 모든 사용자에게 우승한 변형(또는 다른 변형)을 출시할지 여부를 결정할 수 있습니다.
Firebase 콘솔 의 A/B 테스팅 섹션에서 완료된 실험의 세부정보 보기를 엽니다. 이 보기에서 목표 측정항목 및 선택한 보조 측정항목에 따라 각 변형의 실적을 확인할 수 있습니다. 이 정보를 사용하여 주요 변형 또는 다른 변형을 출시할지 여부를 결정할 수 있습니다.
모든 사용자에게 변형을 출시하려면 실험 세부정보 페이지에서 more_vert > 변형 출시를 클릭하세요. 그렇게 하면 plant_labeler_model
매개변수의 값은 모든 사용자에 대해 plant_labeler_v2
가 됩니다.
향후 앱 업데이트에서는 plant_labeler_model
매개변수의 기본값을 plant_labeler_v2
로 변경하고 번들 모델을 사용하는 경우 업데이트해야 합니다. 하지만 사용자는 이미 최신 모델을 사용하고 있으므로 다음에 기능 업데이트를 할 때와 같이 편리할 때마다 게시된 앱의 일부로 이 업데이트를 푸시할 수 있습니다.