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

Prueba A / B dos versiones de un modelo

Después de entrenar un nuevo modelo personalizado o un modelo de AutoML Vision Edge, puede usar las pruebas A / B para ver qué tan bien se desempeña el nuevo modelo en condiciones del mundo real, en comparación con el modelo que ya usa. Después de confirmar que su nuevo modelo es una mejora, puede implementar fácilmente el nuevo modelo para todos sus usuarios, sin requerir una actualización de la aplicación.

Esta página muestra cómo puede realizar una prueba A / B que evalúe dos versiones de un modelo que potencia una función de búsqueda visual de plantas hipotética. Esta función utiliza un modelo de etiquetado de imágenes personalizado para ayudar a los usuarios a identificar especies de plantas a partir de imágenes de ellas.

Supongamos que acaba de publicar un nuevo modelo de etiquetado planta, plant_labeler_v2 y desea ejecutar un experimento que compara con el modelo actual, llamado plant_labeler_v1 . Los pasos siguientes muestran cómo configurar el experimento, ejecutarlo y tomar medidas sobre los resultados.

1.Haga que su modelo sea configurable de forma remota

El primer paso para probar A / B tus modelos es modificar tu app para usar un parámetro de Remote Config a fin de determinar qué modelo usa. Inicialmente, establecerá el valor predeterminado de este parámetro para que sea el modelo que ya usa su aplicación, pero debido a que el nombre del modelo está controlado por un parámetro configurable de forma remota, puede cambiar y experimentar con diferentes modelos sin tener que enviar actualizaciones de la aplicación a su usuarios cada vez.

Por lo tanto, si usted publicó su modelo actual bajo el nombre plant_labeler_v1 , lo haría, en el código de inicialización de aplicación, juego plant_labeler_v1 como el valor por defecto de la plant_labeler_model parámetro, como en el ejemplo siguiente:

Rápido

let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
    "plant_labeler_model": "plant_labeler_v1" as NSObject,
    // ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()

C objetivo

FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig];
NSDictionary<NSString *, NSObject *> *defaults = @{
  @"plant_labeler_model" : (NSObject *)@"plant_labeler_v1",
  // ...
};
[remoteConfig setDefaults:defaults];
[remoteConfig fetchAndActivateWithCompletionHandler:nil];

A continuación, cambiar su código de configuración de modelo para cargar el modelo especificado por la plant_labeler_model parámetro:

Rápido

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 objetivo

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

Ahora que tu aplicación usa un parámetro de Remote Config para determinar qué modelo cargar, puedes cambiar el modelo simplemente publicando un modelo nuevo y asignando su nombre al parámetro Remote Config. Esta capacidad permite que A / B Testing asigne diferentes modelos a diferentes usuarios con el fin de compararlos.

Antes de continuar, realice también la siguiente adición al código de descarga de su modelo:

Rápido

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 objetivo

__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];
              }
            }];

El código anterior registra un evento de Analytics personalizado que utilizará más adelante como prueba evento de activación . Un evento de activación es un evento que el usuario debe desencadenar antes de que se considere parte del experimento. Esto asegura que los usuarios no serán registrados en su prueba A / B hasta que su dispositivo haya terminado de descargar su modelo de ML personalizado.

2. Determine una métrica de objetivo

El siguiente paso es decidir cómo medirá el éxito de su modelo y asegurarse de que su aplicación recopile los datos necesarios para probar qué tan bien funcionan las diferentes versiones del modelo de acuerdo con esa métrica.

Las pruebas A / B tienen varias métricas integradas, que incluyen ingresos, participación diaria y retención de usuarios. Estas métricas a menudo son útiles para probar diferentes flujos de UX o parámetros de ajuste fino, pero pueden no tener sentido para evaluar su modelo y caso de uso. En esta situación, puede intentar optimizar para un evento de Analytics personalizado.

Utilizando la función de búsqueda de plantas visual hipotética como ejemplo, suponga que presenta los resultados de la búsqueda a su usuario en el orden de confianza del modelo en cada resultado. Una forma de tener una idea de la precisión de su modelo sería observar la frecuencia con la que los usuarios abrieron el primer resultado de búsqueda.

Para probar qué modelo logró mejor el objetivo de maximizar los clics en los mejores resultados, registraría un evento personalizado cada vez que un usuario toque el primer elemento de la lista de resultados.

Rápido

Analytics.logEvent("first_result_opened", parameters: nil)

C objetivo

[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];

La métrica que pruebe depende en última instancia de cómo su aplicación use su modelo.

En este punto, puede implementar su aplicación en la App Store. Tu aplicación seguirá usando tu modelo original, pero el código de Remote Config y Analytics que agregaste te permitirá experimentar con diferentes modelos usando solo Firebase console.

3. Ejecute un experimento de prueba A / B

Ahora que su aplicación está en manos de sus usuarios y está recopilando datos analíticos, cree un experimento de prueba A / B que pruebe el efecto de usar su nuevo modelo en lugar del modelo actual.

Para crear el experimento:

  1. Por Eventos página de la consola Firebase, compruebe si lo está registrando los acontecimientos relevantes Analytics: el evento de activación y métricas objetivo.

    Tu aplicación debe registrar cada evento al menos una vez antes de que aparezca en Firebase console.

  2. En la consola Firebase, abra la sección de pruebas A / B.

  3. Cree un nuevo experimento:

    1. Haga clic en Crear experimento> Configuración remota.

    2. En la sección Orientación:

      • Elija su aplicación de la lista
      • Especifique cuántos de sus usuarios desea incluir en el experimento.
      • Seleccione el evento de activación que empieza a registrar (en este ejemplo, nondefault_model_downloaded)
    3. En la sección de Objetivos, seleccione el objetivo métrica que determinó en el apartado anterior (en este ejemplo, first_result_opened) de la lista de métricas de objetivos, y seleccione los parámetros adicionales que desee realizar un seguimiento de los ingresos, tales como compra o usuarios sin choque.

    4. En la sección de variantes, definir dos variantes:

      • Grupo de control (creado automáticamente)
      • Etiquetadora de plantas experimentales

      Para el grupo de control, crear un plant_labeler_model parámetro y configurarlo para plant_labeler_v1 . Los usuarios asignados al grupo de control utilizarán el modelo anterior. (No ajuste el parámetro a (no change) , ya que en su aplicación, que está probando que está utilizando un valor de distancia).

      Para la variante planta etiquetadora experimental, establezca la plant_labeler_model parámetro para plant_labeler_v2 (suponiendo que publicó su nuevo modelo bajo ese nombre). Los usuarios asignados a esta variante utilizarán el nuevo modelo.

    Pantalla de configuración de prueba A / B

Inicie el experimento y déjelo funcionar durante varios días o más, hasta que A / B Testing declare un líder. Si el experimento no puede determinar un líder, puede que tenga que ampliar el experimento a más usuarios .

4. Implemente la variante ganadora para todos los usuarios.

Tarjeta de resultado de la prueba A / B

Una vez que A / B Testing haya recopilado suficiente información para declarar un líder, en este caso, la variante que maximizó los clics en los resultados de búsqueda principales, puede decidir si implementar la variante ganadora (u otra variante) para todos sus usuarios.

En la sección de Pruebas A / B de la consola Firebase , abra la vista de detalles del experimento completado. Desde esta vista, puede ver el rendimiento de cada variante según la métrica de su objetivo y las métricas secundarias que seleccionó. Con esta información, puede decidir si implementa la variante principal u otra variante.

Para distribuir una variante a todos los usuarios, haga clic en > Rollo de la variante en la página de detalles del experimento. Una vez hecho esto, el valor de la plant_labeler_model parámetro será plant_labeler_v2 para todos los usuarios.

En una futura actualización de la aplicación, se debe cambiar el valor predeterminado de la plant_labeler_model parámetro para plant_labeler_v2 y actualizar el modelo incluido si se utiliza uno. Sin embargo, sus usuarios ya están usando el último modelo, por lo que puede enviar esta actualización como parte de la aplicación publicada siempre que sea conveniente, como la próxima vez que realice una actualización de funciones.