A/B-Tests für zwei Versionen eines Modells durchführen

Nachdem Sie ein neues benutzerdefiniertes Modell oder AutoML Vision Edge-Modell trainiert haben, können Sie A/B Testing, um zu sehen, wie gut das neue Modell unter realen Bedingungen funktioniert, im Vergleich zu dem Modell, das Sie bereits verwenden. Nachdem Sie bestätigt haben, dass Ihr neues Modell können Sie das neue Modell ganz einfach für alle Nutzer einführen, ohne dass ein App-Update erforderlich ist.

Auf dieser Seite wird gezeigt, wie Sie einen A/B-Test durchführen können, bei dem zwei Versionen eines Modells bewertet werden, das eine hypothetische visuelle Pflanzensuche ermöglicht. Diese Funktion nutzt ein benutzerdefiniertes Modell zur Bildbeschriftung, um Nutzenden dabei zu helfen, Pflanzenarten in Bilder von ihnen.

Angenommen, Sie haben gerade ein neues Modell zur Beschriftung von Pflanzen plant_labeler_v2 und Sie möchten einen Test durchführen, um die Daten zu vergleichen durch Ihr aktuelles Modell plant_labeler_v1. Gehen Sie dazu so vor: wie der Test eingerichtet und durchgeführt wird und wie er die Ergebnisse auswerten kann.

1. Modell remote konfigurieren

Der erste Schritt für A/B-Tests Ihrer Modelle besteht darin, Ihre App so zu ändern, dass ein Remote Config-Parameter verwendet wird, um zu bestimmen, welches Modell verwendet wird. Zunächst haben Sie legt den Standardwert dieses Parameters auf das Modell fest, das Ihre App bereits verwendet wird, aber da der Modellname von einem konfigurierbaren Parameter, mit dem Sie verschiedene Modelle ändern und mit ihnen experimentieren können. ohne jedes Mal App-Updates bereitstellen zu müssen.

Wenn Sie Ihr aktuelles Modell also unter dem Namen plant_labeler_v1 würden Sie im Initialisierungscode der App festlegen, plant_labeler_v1 als Standardwert des plant_labeler_model, wie im folgenden Beispiel:

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

Ändern Sie dann den Einrichtungscode für das Modell, um das von der plant_labeler_model-Parameter:

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/label-images-with-automl#configure-a-local-model-source
// 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/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model

Da Ihre App nun einen Remote Config-Parameter verwendet, um zu bestimmen, welches Modell laden können, können Sie das Modell ändern, indem Sie ein neues Modell veröffentlichen und seine in den Parameter Remote Config ein. So kann A/B Testing verschiedenen Nutzern unterschiedliche Modelle zuweisen, um sie zu vergleichen.

Bevor Sie fortfahren, fügen Sie Ihrem Modelldownloadcode Folgendes hinzu:

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

Mit dem Code oben wird ein benutzerdefiniertes Analytics-Ereignis protokolliert, das Sie später als Aktivierungsereignis des Tests. Ein Aktivierungsereignis ist ein Ereignis, Nutzer müssen auslösen, bevor sie als Testteil betrachtet werden. Dieses wird sichergestellt, dass Nutzer erst dann im A/B-Test aufgezeichnet werden, wenn ihr Gerät das benutzerdefinierte ML-Modell heruntergeladen haben.

2. Zielmesswert festlegen

Als Nächstes müssen Sie entscheiden, wie Sie den Erfolg Ihres Modells messen, und dafür zu sorgen, dass Ihre App die erforderlichen Daten erfasst, um zu testen, verschiedene Versionen des Modells gemäß diesem Messwert funktionieren.

A/B Testing bietet mehrere integrierte Messwerte, darunter „Umsatz“, „Täglich“ und Nutzerbindung. Diese Messwerte sind häufig für Tests nützlich, UX-Abläufe oder Feinabstimmungsparameter, aber sind für um Ihr Modell und Ihren Anwendungsfall zu bewerten. In diesem Fall können Sie stattdessen versuchen, die Kampagne für ein benutzerdefiniertes Analytics-Ereignis zu optimieren.

Angenommen, Sie präsentieren den Nutzern die Suchergebnisse in der Reihenfolge der Zuverlässigkeit des Modells für jedes Ergebnis. Eine Möglichkeit, die Genauigkeit Ihres Modells zu ermitteln, besteht darin, wie oft Nutzende das erste Suchergebnis geöffnet haben.

Um zu testen, mit welchem Modell die Anzahl der Klicks auf Top-Ergebnisse am besten erreicht wurde, wird jedes Mal ein benutzerdefiniertes Ereignis protokolliert, wenn ein Nutzer auf das erste Element im Ergebnis tippt. Liste.

Swift

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

Objective-C

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

Welchen Messwert Sie testen, hängt letztendlich davon ab, wie Ihre App modellieren.

Jetzt können Sie Ihre App im App Store bereitstellen. Ihre App verwendet weiterhin Ihr ursprüngliches Modell, Sie können aber mit dem hinzugefügten Remote Config- und Analytics-Code experimentieren mit verschiedenen Modellen unter Verwendung der Firebase-Konsole.

3. A/B Testing-Test ausführen

Ihre App befindet sich nun im und sammelt Analysedaten. Erstellen Sie einen A/B Testing-Test, um die Auswirkungen der Verwendung Ihres neuen anstelle des aktuellen Modells.

So erstellen Sie den Test:

  1. Klicken Sie auf der Seite Veranstaltungen Seite der Firebase-Konsole überprüfen, ob Sie die relevanten Analytics-Ereignisse: Aktivierungsereignis und Messwert für Zielvorhaben

    Ihre App muss jedes Ereignis mindestens einmal protokollieren, bevor es im Firebase-Konsole.

  2. Öffnen Sie in der Firebase-Konsole den Abschnitt A/B Testing.

  3. Neuen Test erstellen:

    1. Klicken Sie auf Test erstellen > Remote Config

    2. Gehen Sie im Abschnitt Ausrichtung so vor:

      • Wählen Sie Ihre App aus der Liste aus
      • Geben Sie an, wie viele Nutzer Sie in die Experiment
      • Wählen Sie das Aktivierungsereignis aus, das Sie mit der Protokollierung begonnen haben (in diesem Beispiel nondefault_model_downloaded) zurück
    3. Wählen Sie im Bereich Zielvorhaben den Zielvorhabenmesswert aus der Liste der Zielvorhabenmesswerte aus, den Sie im vorherigen Abschnitt festgelegt haben (in diesem Beispiel first_result_opened). Wählen Sie außerdem alle zusätzlichen Messwerte aus, die Sie erfassen möchten, z. B. den Umsatz aus Käufen oder die Anzahl der Nutzer ohne Abstürze.

    4. Definieren Sie im Bereich Varianten zwei Varianten:

      • Kontrollgruppe (automatisch erstellt)
      • Experimenteller Labelersteller für Pflanzen

      Erstellen Sie für die Kontrollgruppe einen plant_labeler_model-Parameter und legen Sie ihn auf plant_labeler_v1. Nutzer, die der Kontrollgruppe zugewiesen sind das alte Modell verwendet. Setzen Sie den Parameter nicht auf (no change), da Sie in Ihrer App die Verwendung eines Remotewert.)

      Legen Sie für die Variante Experimentelles Labelersteller für Pflanzen Folgendes fest: plant_labeler_model-Parameter für plant_labeler_v2 (vorausgesetzt, Sie haben Ihr neues Modell veröffentlicht unter diesem Namen). Nutzer, die dieser Variante zugewiesen sind, verwenden das neue modellieren.

    Konfigurationsbildschirm für A/B-Tests

Starten Sie den Test und lassen Sie ihn mehrere Tage oder länger laufen, bis A/B Testing bezeichnet eine führende Variante. Wenn durch den Test keine beste Variante ermittelt werden kann, müssen Sie möglicherweise den Test auf weitere Nutzer ausweiten.

4. Erfolgreiche Variante für alle Nutzer einführen

Karte mit A/B-Testergebnissen

Nachdem A/B Testing genügend Informationen erfasst hat, um Folgendes zu deklarieren: beste Variante, in diesem Fall die Variante, die das beste Suchergebnis maximiert hat können Sie entscheiden, ob Sie die beste Variante (oder eine andere Variante) für alle Nutzer.

Öffnen Sie die Details in der Firebase-Konsole im Bereich A/B Testing. des abgeschlossenen Tests. In dieser Ansicht sehen Sie, wie sich die die entsprechend Ihrem Zielmesswert und etwaigen sekundären Messwerten, die Sie ausgewählt haben, ausgeführt wurde. Anhand dieser Informationen können Sie entscheiden, ob Sie die führende Variante oder eine andere Variante.

Wenn Sie eine Variante für alle Nutzer einführen möchten, klicken Sie auf > Variante für die auf der Detailseite des Tests. Danach ist der Wert des Parameters plant_labeler_model für alle Nutzer plant_labeler_v2.

Bei einem zukünftigen App-Update solltest du den Standardwert des plant_labeler_model auf plant_labeler_v2 und aktualisiert das gebündelte wenn Sie eines verwenden. Ihre Nutzer verwenden jedoch bereits das neueste Modell. Sie können dieses Update also jederzeit als Teil der veröffentlichten App veröffentlichen, z. B. wenn Sie das nächste Funktionsupdate vornehmen.