Nachdem Sie ein neues benutzerdefiniertes Modell trainiert haben, können Sie mit A/B Testing prüfen, wie gut das neue Modell unter realen Bedingungen abschneidet, verglichen mit dem Modell, das Sie bereits verwenden. Wenn Sie feststellen, dass das neue Modell eine Verbesserung darstellt, können Sie es ganz einfach für alle Nutzer bereitstellen, ohne dass eine App-Aktualisierung erforderlich ist.
Auf dieser Seite wird beschrieben, wie Sie einen A/B-Test durchführen können, um zwei Versionen eines Modells zu bewerten, das eine hypothetische visuelle Pflanzensuchfunktion unterstützt. Diese Funktion verwendet ein benutzerdefiniertes Modell zur Bildkennzeichnung, um Nutzern zu helfen, Pflanzenarten anhand von Bildern zu identifizieren.
Angenommen, Sie haben gerade ein neues Modell zur Pflanzenkennzeichnung (plant_labeler_v2) veröffentlicht und möchten einen Test durchführen, um es mit Ihrem aktuellen Modell (plant_labeler_v1) zu vergleichen. In den folgenden Schritten wird beschrieben, wie Sie den Test einrichten und ausführen und wie Sie auf die Ergebnisse reagieren.
1. Modell remote konfigurierbar machen
Im ersten Schritt für A/B-Tests Ihrer Modelle müssen Sie Ihre App so ändern, dass ein Remote Config Parameter verwendet wird, um zu bestimmen, welches Modell verwendet wird. Anfangs legen Sie den Standardwert dieses Parameters auf das Modell fest, das Ihre App bereits verwendet. Da der Modellname jedoch von einem remote konfigurierbaren Parameter gesteuert wird, können Sie verschiedene Modelle ändern und testen, ohne jedes Mal App-Updates für Ihre Nutzer bereitstellen zu müssen.
Wenn Sie Ihr aktuelles Modell unter dem Namen plant_labeler_v1 veröffentlicht haben, legen Sie in Ihrem App-Initialisierungscode plant_labeler_v1 als Standardwert des Parameters plant_labeler_model fest, 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 Code für die Modelleinrichtung, um das Modell zu laden, das durch den Parameter plant_labeler_model angegeben wird:
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
Da Ihre App jetzt einen Remote Config Parameter verwendet, um zu bestimmen, welches Modell geladen werden soll, können Sie das Modell ändern, indem Sie einfach ein neues Modell veröffentlichen und seinen Namen dem Remote Config Parameter zuweisen. Mit dieser Funktion können Sie mit A/B Testing verschiedenen Nutzern verschiedene Modelle zuweisen , um sie zu vergleichen.
Nehmen Sie außerdem die folgende Ergänzung an Ihrem Modell-Downloadcode vor, bevor Sie fortfahren:
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 obigen Code wird ein benutzerdefiniertes Analytics-Ereignis protokolliert, das Sie später als Ihr
Test-
2. Zielmesswert festlegen
Im nächsten Schritt müssen Sie festlegen, wie Sie den Erfolg Ihres Modells messen, und dafür sorgen, dass Ihre App die Daten erfasst, die erforderlich sind, um zu testen, wie gut verschiedene Versionen des Modells in Bezug auf diesen Messwert abschneiden.
A/B Testing enthält mehrere integrierte Messwerte, darunter Umsatz, tägliche Interaktionen und Nutzerbindung. Diese Messwerte sind oft nützlich, um verschiedene UX-Abläufe zu testen oder Parameter zu optimieren, aber möglicherweise nicht sinnvoll, um Ihr Modell und Ihren Anwendungsfall zu bewerten. In dieser Situation können Sie stattdessen versuchen, ein benutzerdefiniertes Analytics-Ereignis zu optimieren.
Angenommen, Sie haben die Suchergebnisse für die hypothetische visuelle Pflanzensuchfunktion in der Reihenfolge der Zuverlässigkeit des Modells für jedes Ergebnis präsentiert. Eine Möglichkeit, die Genauigkeit Ihres Modells zu ermitteln, besteht darin, zu prüfen, wie oft Nutzer das erste Suchergebnis geöffnet haben.
Um zu testen, welches Modell das Ziel, die Klicks auf das erste Ergebnis zu maximieren, am besten erreicht hat, protokollieren Sie ein benutzerdefiniertes Ereignis, wenn ein Nutzer auf das erste Element in der Ergebnisliste tippt.
Swift
Analytics.logEvent("first_result_opened", parameters: nil)
Objective-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
Der Messwert, den Sie testen, hängt letztendlich davon ab, wie Ihre App Ihr Modell verwendet.
An diesem Punkt können Sie Ihre App im App Store bereitstellen. Ihre App verwendet weiterhin Ihr ursprüngliches Modell, aber mit dem hinzugefügten Remote Config und Analytics-Code können Sie verschiedene Modelle nur mit der Firebase Konsole testen.
3. Experiment durchführenA/B Testing
Nachdem Ihre App für Ihre Nutzer verfügbar ist und Analysedaten erfasst, erstellen Sie ein A/B Testing Experiment, mit dem Sie die Auswirkungen der Verwendung Ihres neuen Modells anstelle des aktuellen Modells testen.
So erstellen Sie den Test:
-
Prüfen Sie auf der Seite „Ereignisse“ der Firebase Konsole, ob Sie die relevanten Analytics-Ereignisse protokollieren: das Aktivierungsereignis und den Zielmesswert.
Ihre App muss jedes Ereignis mindestens einmal protokollieren, bevor es in der Firebase Konsole angezeigt wird.
-
Öffnen Sie in der Firebase Konsole den A/B Testing Bereich.
-
Erstellen Sie einen neuen Test:
Klicken Sie auf Test erstellen > Remote Config.
-
Im Bereich Targeting:
- Wählen Sie Ihre App aus der Liste aus.
- Geben Sie an, wie viele Ihrer Nutzer in den Test einbezogen werden sollen.
- Wählen Sie das Aktivierungsereignis aus, das Sie protokollieren (in diesem Beispiel, nondefault_model_downloaded).
-
Wählen Sie im Bereich Zielvorhaben den Zielmesswert aus, den Sie im vorherigen Abschnitt festgelegt haben (in diesem Beispiel first_result_opened), und wählen Sie alle zusätzlichen Messwerte aus, die Sie erfassen möchten, z. B. Kaufumsatz oder Nutzer ohne Abstürze.
-
Definieren Sie im Bereich Varianten zwei Varianten:
- Kontrollgruppe (automatisch erstellt)
- Experimentelles Modell zur Pflanzenkennzeichnung
Erstellen Sie für die Kontrollgruppe einen
plant_labeler_modelParameter und legen Sie ihn aufplant_labeler_v1fest. Nutzer, die der Kontrollgruppe zugewiesen sind verwenden das alte Modell. Legen Sie den Parameter nicht auf(no change)fest, da Sie in Ihrer App testen, dass Sie einen Remote-Wert verwenden.Legen Sie für die Variante Experimentelles Modell zur Pflanzenkennzeichnung den
plant_labeler_modelParameter aufplant_labeler_v2fest (vorausgesetzt, Sie haben Ihr neues Modell unter diesem Namen veröffentlicht). Nutzer, die dieser Variante zugewiesen sind, verwenden das neue Modell.
Starten Sie den Test und lassen Sie ihn mehrere Tage oder länger laufen, bis A/B Testing ein Gewinner ermittelt wird. Wenn im Test kein Gewinner ermittelt werden kann, müssen Sie den Test möglicherweise auf mehr Nutzer ausweiten.
4. Gewinnende Variante für alle Nutzer bereitstellen
Nachdem A/B Testing genügend Informationen gesammelt hat, um einen Gewinner zu ermitteln – in diesem Fall die Variante, die die Klicks auf das erste Suchergebnis maximiert hat –, können Sie entscheiden, ob Sie die gewinnende Variante (oder eine andere Variante) für alle Nutzer bereitstellen möchten.
Öffnen Sie im Bereich A/B Testing der Firebase Konsole die Detailansicht des abgeschlossenen Tests. In dieser Ansicht sehen Sie, wie jede Variante in Bezug auf den Zielmesswert und alle ausgewählten sekundären Messwerte abgeschnitten hat. Anhand dieser Informationen können Sie entscheiden, ob Sie die führende Variante oder eine andere Variante bereitstellen möchten.
Wenn Sie eine Variante für alle Nutzer bereitstellen möchten, klicken Sie auf der Detailseite des Tests auf
more_vert > Variante bereitstellen. Danach ist der Wert des Parameters plant_labeler_model für alle Nutzer plant_labeler_v2.
Bei einem zukünftigen App-Update sollten Sie den Standardwert des Parameters plant_labeler_model in plant_labeler_v2 ändern und das gebündelte Modell aktualisieren, falls Sie eines verwenden. Ihre Nutzer verwenden jedoch bereits das neueste Modell. Sie können dieses Update also jederzeit als Teil der veröffentlichten App bereitstellen, z. B. wenn Sie das nächste Mal ein Feature-Update vornehmen.