Catch up on everthing we announced at this year's Firebase Summit. Learn more

A/B 테스트 모델의 두 가지 버전

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

이 페이지에서는 가상의 시각적 식물 검색 기능을 지원하는 모델의 두 가지 버전을 평가하는 A/B 테스트를 수행하는 방법을 보여줍니다. 이 기능은 사용자 정의 이미지 라벨링 모델을 사용하여 사용자가 이미지에서 식물 종을 식별하는 데 도움을 줍니다.

당신은 단지 새로운 공장 표지 모델을 발표 가정, plant_labeler_v2 당신은 당신의 현재 모델, 이름과 비교 실험을 실행하려는 plant_labeler_v1 . 아래 단계는 실험을 설정하고 실행하고 결과에 대해 조치를 취하는 방법을 보여줍니다.

1. 모델을 원격으로 구성 가능하게 만들기

모델을 A/B 테스트하는 첫 번째 단계는 원격 구성 매개변수를 사용하여 사용하는 모델을 결정하도록 앱을 수정하는 것입니다. 처음에는 이 매개변수의 기본값을 앱에서 이미 사용하고 있는 모델로 설정하지만 모델 이름은 원격으로 구성 가능한 매개변수로 제어되기 때문에 앱 업데이트를 앱에 푸시하지 않고도 다른 모델을 변경하고 실험할 수 있습니다. 매번 사용자.

그래서, 당신은 이름에서 현재 모델을 게시 한 경우 plant_labeler_v1 , 당신 것, 앱 초기화 코드에서, 세트 plant_labeler_v1 의 기본 값으로 plant_labeler_model 다음의 예와 같이 매개 변수 :

빠른

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 이벤트를 기록합니다. 활성화 이벤트 . 활성화 이벤트는 사용자가 실험의 일부로 간주되기 전에 트리거해야 하는 이벤트입니다. 이렇게 하면 기기가 사용자 지정 ML 모델 다운로드를 완료할 때까지 사용자가 A/B 테스트에 기록되지 않습니다.

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 테스팅 실험을 만듭니다.

실험을 생성하려면:

  1. 이벤트 활성화 이벤트 및 목표 메트릭 다음 중포 기지 콘솔의 페이지, 당신은 관련 웹 로그 분석 이벤트를 로그인하는 확인합니다.

    앱은 Firebase 콘솔에 표시되기 전에 각 이벤트를 한 번 이상 기록해야 합니다.

  2. 중포 기지 콘솔에서, A / B 테스팅 부분을 연다.

  3. 새 실험 만들기:

    1. 원격> 구성을 실험 만들기를 클릭합니다.

    2. 타겟팅 섹션에서 :

      • 목록에서 앱 선택
      • 실험에 포함할 사용자 수 지정
      • 당신이 로깅 시작 활성화 이벤트를 선택합니다 (이 예에서는, nondefault_model_downloaded)
    3. 목표 '섹션에서 목표 메트릭 목록에서 (이 예에서는 first_result_opened) 이전 섹션에서 결정 메트릭 목표를 선택하고, 같은 구매 수익 또는 충돌이없는 사용자와 추적 할 추가 메트릭을 선택합니다.

    4. 에 Variants 섹션에서 두 가지 변종을 정의합니다 :

      • 제어 그룹(자동으로 생성됨)
      • 실험용 식물 라벨러

      대조군를 들어, 생성 plant_labeler_model 매개 변수와로 설정 plant_labeler_v1 . 제어 그룹에 할당된 사용자는 이전 모델을 사용합니다. (음주에 대한 매개 변수를 설정하지 (no change) 당신에게, 앱에 있기 때문에, 원격 값을 사용하고 있는지있는 거 테스트를.)

      실험 식물 블러 변형의 경우, 설정 plant_labeler_model 에 매개 변수를 plant_labeler_v2 (당신이 그 이름으로 새 모델을 발표 가정). 이 변형에 할당된 사용자는 새 모델을 사용합니다.

    A/B 테스트 구성 화면

실험을 시작하고 A/B 테스팅이 리더를 선언할 때까지 며칠 이상 실행합니다. 실험이 리더를 확인할 수없는 경우, 당신은해야 할 수도 있습니다 더 많은 사용자에게 실험을 확장 .

4. 모든 사용자에게 승리한 변형 출시

A/B 테스트 결과 카드

A/B Testing이 선두주자(이 경우 상위 검색 결과 클릭을 최대화한 변형)를 선언하기에 충분한 정보를 수집한 후 모든 사용자에게 우승한 변형(또는 다른 변형)을 출시할지 여부를 결정할 수 있습니다.

의는 A / B 테스트 섹션에서 중포 기지 콘솔 , 세부 사항은 완성 된 실험의 볼 엽니 다. 이 보기에서 목표 측정항목 및 선택한 보조 측정항목에 따라 각 변형의 실적을 확인할 수 있습니다. 이 정보를 사용하여 주요 변형 또는 다른 변형을 출시할지 여부를 결정할 수 있습니다.

모든 사용자에게 변형을 출시하려면 클릭 실험의 세부 정보 페이지에 변형에서> 롤. 이렇게되면, 값 plant_labeler_model 매개 변수가 될 것입니다 plant_labeler_v2 모든 사용자에 대해.

미래의 응용 프로그램 업데이트에서는 기본값으로 변경해야 plant_labeler_model 에 매개 변수를 plant_labeler_v2 당신이 하나를 사용하는 경우 번들로 모델을 업데이트합니다. 하지만 사용자는 이미 최신 모델을 사용하고 있으므로 다음에 기능 업데이트를 할 때와 같이 편리할 때마다 게시된 앱의 일부로 이 업데이트를 푸시할 수 있습니다.