Nachdem Sie ein neues benutzerdefiniertes Modell oder AutoML Vision Edge-Modell trainiert haben, können Sie mit A/B Testing sehen, wie gut das neue Modell im Vergleich zum bereits verwendeten Modell unter realen Bedingungen abschneidet. Nachdem Sie bestätigt haben, dass Ihr neues Modell eine Verbesserung darstellt, können Sie es ganz einfach für alle Nutzer einführen, ohne ein App-Update ausführen zu müssen.
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. Bei dieser Funktion wird ein benutzerdefiniertes Modell zum Beschriften von Bildern verwendet, um Nutzern zu helfen, Pflanzenarten anhand von Bildern zu identifizieren.
Angenommen, Sie haben gerade ein neues Modell für die Pflanzenkennzeichnung namens plant_labeler_v2
veröffentlicht und möchten einen Test durchführen, in dem es mit Ihrem aktuellen Modell namens plant_labeler_v1
verglichen wird. Im Folgenden erfahren Sie, wie Sie den Test einrichten, ausführen und die Ergebnisse umsetzen.
1. Modell aus der Ferne konfigurierbar machen
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. Zuerst legen Sie den Standardwert dieses Parameters auf das Modell fest, das bereits in Ihrer App verwendet wird. Da der Modellname jedoch über einen per Fernzugriff konfigurierbaren Parameter gesteuert wird, können Sie verschiedene Modelle ändern und ausprobieren, ohne dass Sie Ihre Nutzer jedes Mal mit App-Updates belästigen müssen.
Wenn Sie Ihr aktuelles Modell beispielsweise unter dem Namen plant_labeler_v1
veröffentlicht haben, legen Sie in Ihrem App-Initialisierungscode plant_labeler_v1
als Standardwert für den Parameter plant_labeler_model
fest, wie im folgenden Beispiel:
Kotlin
val remoteConfig = FirebaseRemoteConfig.getInstance()
val remoteConfigDefaults = HashMap<String, Any>()
remoteConfigDefaults["plant_labeler_model"] = "plant_labeler_v1"
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults))
remoteConfig.fetchAndActivate().addOnSuccessListener { success ->
if (success) {
// Okay to get remote values.
// ...
}
}
Java
final FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();
Map<String, Object> remoteConfigDefaults = new HashMap<>();
remoteConfigDefaults.put("plant_labeler_model", "plant_labeler_v1");
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults));
remoteConfig.fetchAndActivate().addOnSuccessListener(
new OnSuccessListener<Boolean>() {
@Override
public void onSuccess(Boolean success) {
if (success) {
// Okay to get remote values.
// ...
}
}
});
Ändern Sie dann den Code für die Modelleinrichtung so, dass das mit dem Parameter plant_labeler_model
angegebene Modell geladen wird:
Kotlin
val rcValue = remoteConfig.getValue("plant_labeler_model")
val remoteModelName = rcValue.asString()
// ...
val remoteModel = FirebaseRemoteModel.Builder(remoteModelName)
.enableModelUpdates(true)
.setInitialDownloadConditions(initialConditions)
.setUpdatesDownloadConditions(updateConditions)
.build()
FirebaseModelManager.getInstance().registerRemoteModel(remoteModel)
// Optionally configure a local model:
// https://firebase.google.com/docs/ml-kit/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml-kit/android/use-custom-models#configure_a_local_model
Java
FirebaseRemoteConfigValue rcValue = remoteConfig.getValue("plant_labeler_model");
String remoteModelName = rcValue.asString();
// ...
FirebaseRemoteModel remoteModel = new FirebaseRemoteModel.Builder(remoteModelName)
.enableModelUpdates(true)
.setInitialDownloadConditions(initialConditions)
.setUpdatesDownloadConditions(updateConditions)
.build();
FirebaseModelManager.getInstance().registerRemoteModel(remoteModel);
// Optionally configure a local model:
// https://firebase.google.com/docs/ml-kit/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml-kit/android/use-custom-models#configure_a_local_model
Da Ihre App jetzt den Parameter Remote Config verwendet, um zu bestimmen, welches Modell geladen werden soll, können Sie das Modell einfach ändern, indem Sie ein neues Modell veröffentlichen und dem Parameter Remote Config seinen Namen zuweisen. So kann A/B Testing verschiedenen Nutzern unterschiedliche Modelle zuweisen, um sie zu vergleichen.
Bevor Sie fortfahren, fügen Sie Ihrem Modelldownloadcode Folgendes hinzu:
Kotlin
FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
.addOnSuccessListener {
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
if (rcValue.source == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
FirebaseAnalytics.getInstance(this).logEvent("nondefault_model_downloaded", null)
}
}
Java
FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
if (rcValue.getSource() == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
FirebaseAnalytics.getInstance(YourActivity.this)
.logEvent("nondefault_model_downloaded", null);
}
}
});
Mit dem Code oben wird ein benutzerdefiniertes Analytics-Ereignis protokolliert, das Sie später als
2. Zielmesswert festlegen
Im nächsten Schritt müssen Sie entscheiden, wie Sie den Erfolg Ihres Modells messen möchten, und dafür sorgen, dass Ihre App die Daten erhebt, die erforderlich sind, um zu testen, wie gut verschiedene Versionen des Modells gemäß diesem Messwert abschneiden.
A/B Testing bietet mehrere vordefinierte 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 sie sind möglicherweise nicht sinnvoll, um Ihr Modell und Ihren Anwendungsfall zu bewerten. In diesem Fall können Sie 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, sich ein Bild von der Genauigkeit Ihres Modells zu machen, besteht darin, zu sehen, wie oft Nutzer das erste Suchergebnis geöffnet haben.
Wenn Sie testen möchten, mit welchem Modell die Anzahl der Klicks auf das Top-Suchergebnis am besten maximiert werden kann, protokollieren Sie ein benutzerdefiniertes Ereignis, wenn ein Nutzer auf das erste Element in der Ergebnisliste tippt.
Kotlin
FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)
Java
FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);
Welchen Messwert Sie testen, hängt letztendlich davon ab, wie Ihr Modell in Ihrer App verwendet wird.
Jetzt können Sie Ihre App im Play Store veröffentlichen. In Ihrer App wird weiterhin das ursprüngliche Modell verwendet. Mit dem von Ihnen hinzugefügten Remote Config- und Analytics-Code können Sie jedoch nur über die Firebase-Konsole mit verschiedenen Modellen experimentieren.
3. A/B Testing-Test ausführen
Jetzt, da Ihre App von Nutzern verwendet wird und Analysedaten erfasst werden, können Sie einen A/B Testing-Test erstellen, um die Auswirkungen der Verwendung Ihres neuen Modells anstelle des aktuellen Modells zu testen.
So erstellen Sie den Test:
-
Prüfen Sie auf der Seite Ereignisse der Firebase Console, ob Sie die relevanten Analytics-Ereignisse erfassen: das Aktivierungsereignis und den Zielmesswert.
Jedes Ereignis muss mindestens einmal in Ihrer App protokolliert werden, bevor es in der Firebase-Konsole angezeigt wird.
-
Öffnen Sie in der Firebase Console den Bereich A/B Testing.
-
So erstellen Sie einen neuen Test:
Klicken Sie auf Test erstellen > Remote Config.
-
Gehen Sie im Bereich Ausrichtung so vor:
- Wählen Sie die App aus der Liste aus.
- Geben Sie an, wie viele Nutzer Sie in den Test einbeziehen möchten.
- Wählen Sie das Aktivierungsereignis aus, das Sie protokolliert haben (in diesem Beispiel nondefault_model_downloaded).
-
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.
-
Definieren Sie im Abschnitt Varianten zwei Varianten:
- Kontrollgruppe (automatisch erstellt)
- Experimentelles Pflanzenlabel
Erstellen Sie für die Kontrollgruppe einen
plant_labeler_model
-Parameter und legen Sie ihn aufplant_labeler_v1
fest. 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, ob Sie einen Remote-Wert verwenden.Legen Sie für die Variante Experimental plant labeler (Experimenelles Pflanzenlabel) den Parameter
plant_labeler_model
aufplant_labeler_v2
fest, 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 lang laufen, bis A/B Testing eine Gewinnervariante ermittelt. Wenn im Test keine eindeutige Gewinnervariante ermittelt werden kann, müssen Sie den Test möglicherweise auf mehr Nutzer ausweiten.
4. Erfolgreiche Variante für alle Nutzer bereitstellen
Sobald A/B Testing genügend Informationen erfasst hat, um einen Gewinner zu ermitteln, in diesem Fall die Variante, mit der die Klicks auf die obersten Suchergebnisse maximiert wurden, können Sie entscheiden, ob Sie die Gewinnervariante (oder eine andere Variante) für alle Nutzer einführen möchten.
Öffnen Sie in der Firebase Console im Bereich A/B Testing die Detailansicht des abgeschlossenen Tests. In dieser Ansicht sehen Sie, wie sich die einzelnen Varianten im Hinblick auf den Zielmesswert und die ausgewählten sekundären Messwerte geschlagen haben. Anhand dieser Informationen können Sie entscheiden, ob Sie die führende Variante oder eine andere Variante einführen möchten.
Wenn Sie eine Variante für alle Nutzer einführen möchten, klicken Sie auf der Detailseite des Tests auf more_vert > Variante einführen. 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 gebundelte 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 veröffentlichen, z. B. wenn Sie das nächste Funktionsupdate vornehmen.