Nachdem Sie ein neues benutzerdefiniertes Modell oder AutoML Vision Edge-Modell trainiert haben, können Sie mithilfe von A/B-Tests sehen, wie gut das neue Modell unter realen Bedingungen im Vergleich zu dem Modell funktioniert, das Sie bereits verwenden. Nachdem Sie bestätigt haben, dass Ihr neues Modell eine Verbesserung darstellt, können Sie das neue Modell ganz einfach für alle Ihre Benutzer bereitstellen, ohne dass ein App-Update erforderlich ist.
![](https://storage.googleapis.com/spec-host-backup/mio-collections%2Fassets%2F1MJW_FfTQUByefvZdSCFsExAds1orNYj9%2Fexperience-communicate-results-confidence-order.png)
Auf dieser Seite wird gezeigt, wie Sie einen A/B-Test durchführen können, der zwei Versionen eines Modells bewertet, das eine hypothetische visuelle Pflanzensuchfunktion unterstützt. Diese Funktion verwendet ein benutzerdefiniertes Bildbeschriftungsmodell, um Benutzern dabei zu helfen, Pflanzenarten anhand von Bildern zu identifizieren.
Angenommen, Sie haben gerade ein neues Pflanzenkennzeichnungsmodell namens plant_labeler_v2
veröffentlicht und möchten ein Experiment durchführen, das es mit Ihrem aktuellen Modell namens plant_labeler_v1
vergleicht. Die folgenden Schritte zeigen, wie Sie das Experiment einrichten, ausführen und auf die Ergebnisse reagieren.
1. Machen Sie Ihr Modell aus der Ferne konfigurierbar
Der erste Schritt zum A/B-Testen Ihrer Modelle besteht darin, Ihre App so zu ändern, dass sie einen Remote-Config-Parameter verwendet, um zu bestimmen, welches Modell sie verwendet. Zunächst legen Sie den Standardwert dieses Parameters auf das Modell fest, das Ihre App bereits verwendet. Da der Modellname jedoch durch einen fernkonfigurierbaren Parameter gesteuert wird, können Sie verschiedene Modelle ändern und damit experimentieren, ohne App-Updates auf Ihre App übertragen zu müssen Benutzer jedes Mal.
Wenn Sie also Ihr aktuelles Modell unter dem Namen plant_labeler_v1
veröffentlicht haben, würden Sie in Ihrem App-Initialisierungscode plant_labeler_v1
als Standardwert des Parameters plant_labeler_model
festlegen, wie im folgenden Beispiel:
Kotlin+KTX
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 Ihren Modell-Setup-Code, um das durch den Parameter plant_labeler_model
angegebene Modell zu laden:
Kotlin+KTX
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/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/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/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 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 A/B-Tests verschiedenen Benutzern verschiedene Modelle zuordnen, um sie zu vergleichen.
Bevor Sie fortfahren, fügen Sie Ihrem Modell-Downloadcode außerdem Folgendes hinzu:
Kotlin+KTX
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);
}
}
});
Der obige Code protokolliert ein benutzerdefiniertes Analytics-Ereignis, das Sie später für Ihr Experiment verwenden werden
2. Bestimmen Sie eine Zielmetrik
Der nächste Schritt besteht darin, zu entscheiden, wie Sie den Erfolg Ihres Modells messen möchten, und sicherzustellen, dass Ihre App die erforderlichen Daten sammelt, um zu testen, wie gut verschiedene Versionen des Modells gemäß dieser Metrik funktionieren.
A/B-Tests verfügen über mehrere integrierte Metriken, darunter Umsatz, tägliches Engagement und Benutzerbindung. Diese Metriken sind häufig zum Testen verschiedener UX-Abläufe oder zur Feinabstimmung von Parametern nützlich, für die Bewertung Ihres Modells und Anwendungsfalls jedoch möglicherweise nicht sinnvoll. In dieser Situation können Sie stattdessen versuchen, eine Optimierung für ein benutzerdefiniertes Analytics-Ereignis durchzuführen.
Nehmen wir als Beispiel die hypothetische visuelle Pflanzensuchfunktion: Angenommen, Sie präsentieren Ihrem Benutzer Suchergebnisse in der Reihenfolge der Vertrauenswürdigkeit des Modells in jedes Ergebnis. Eine Möglichkeit, sich ein Bild von der Genauigkeit Ihres Modells zu machen, besteht darin, sich anzusehen, wie oft Benutzer das erste Suchergebnis geöffnet haben.
Um zu testen, welches Modell das Ziel der Maximierung der Top-Ergebnisklicks am besten erreicht, würden Sie jedes Mal ein benutzerdefiniertes Ereignis protokollieren, wenn ein Benutzer auf das erste Element in der Ergebnisliste tippt.
Kotlin+KTX
FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)
Java
FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);
Welche Metrik Sie testen, hängt letztendlich davon ab, wie Ihre App Ihr Modell verwendet.
An diesem Punkt können Sie Ihre App im Play Store bereitstellen. Ihre App verwendet weiterhin Ihr ursprüngliches Modell, aber mit dem von Ihnen hinzugefügten Remote Config and Analytics-Code können Sie mit verschiedenen Modellen experimentieren, indem Sie nur die Firebase-Konsole verwenden.
3. Führen Sie ein A/B-Testexperiment durch
Da sich Ihre App nun in den Händen Ihrer Benutzer befindet und Analysedaten sammelt, erstellen Sie ein A/B-Testexperiment, das die Wirkung der Verwendung Ihres neuen Modells anstelle des aktuellen Modells testet.
So erstellen Sie das Experiment:
Überprüfen Sie auf der Seite „Ereignisse“ der Firebase-Konsole, dass Sie die relevanten Analytics-Ereignisse protokollieren: das Aktivierungsereignis und die Zielmetrik.
Ihre App muss jedes Ereignis mindestens einmal protokollieren, bevor es in der Firebase-Konsole angezeigt wird.
Öffnen Sie in der Firebase-Konsole den Abschnitt „A/B-Tests“ .
Erstellen Sie ein neues Experiment:
Klicken Sie auf Experiment erstellen > Remote-Konfiguration .
Im Abschnitt „Targeting“ :
- Wählen Sie Ihre App aus der Liste aus
- Geben Sie an, wie viele Ihrer Benutzer Sie in das Experiment einbeziehen möchten
- Wählen Sie das Aktivierungsereignis aus, das Sie mit der Protokollierung begonnen haben (in diesem Beispiel nondefault_model_downloaded ).
Wählen Sie im Abschnitt „Ziele“ die Zielmetrik aus, die Sie im vorherigen Abschnitt festgelegt haben (in diesem Beispiel first_result_opened ), aus der Liste der Zielmetriken und wählen Sie alle zusätzlichen Metriken aus, die Sie verfolgen möchten, z. B. Kauferlöse oder absturzfreie Benutzer.
Definieren Sie im Abschnitt Varianten zwei Varianten:
- Kontrollgruppe (automatisch erstellt)
- Experimenteller Pflanzenetikettierer
Erstellen Sie für die Kontrollgruppe einen
plant_labeler_model
Parameter und legen Sie ihn aufplant_labeler_v1
fest. Benutzer, die der Kontrollgruppe zugewiesen sind, verwenden das alte Modell. (Setzen Sie den Parameter nicht auf(no change)
, da Sie in Ihrer App testen, ob Sie einen Remote-Wert verwenden.)Legen Sie für die Variante „Experimental Plant Labeler“ den Parameter
plant_labeler_model
aufplant_labeler_v2
fest (vorausgesetzt, Sie haben Ihr neues Modell unter diesem Namen veröffentlicht). Benutzer, die dieser Variante zugewiesen sind, verwenden das neue Modell.
Starten Sie das Experiment und lassen Sie es mehrere Tage oder länger laufen, bis A/B-Tests einen Spitzenreiter ermittelt. Wenn das Experiment keinen Spitzenreiter ermitteln kann, müssen Sie das Experiment möglicherweise auf weitere Benutzer ausweiten .
4. Stellen Sie allen Benutzern die Gewinnervariante zur Verfügung
![A/B-Testergebniskarte](https://firebase.google.cn/static/docs/ml/images/ml-abtest-leader.png?authuser=6&hl=de)
Nachdem A/B-Tests genügend Informationen gesammelt haben, um einen Spitzenreiter zu erklären – in diesem Fall die Variante, die die meisten Klicks in den Top-Suchergebnissen erzielt hat – können Sie entscheiden, ob Sie die Gewinnervariante (oder eine andere Variante) allen Ihren Benutzern zur Verfügung stellen möchten.
Öffnen Sie im Abschnitt „A/B-Tests“ der Firebase-Konsole die Detailansicht des abgeschlossenen Experiments. In dieser Ansicht können Sie sehen, wie jede Variante gemäß Ihrer Zielmetrik und allen von Ihnen ausgewählten sekundären Metriken abgeschnitten hat. Anhand dieser Informationen können Sie entscheiden, ob Sie die führende Variante oder eine andere Variante ausrollen möchten.
Um eine Variante für alle Benutzer bereitzustellen, klicken Sie auf der Detailseite des Experiments auf more_vert > „Variante bereitstellen“ . Sobald Sie dies tun, lautet der Wert des Parameters plant_labeler_model
für alle Benutzer 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 Benutzer verwenden jedoch bereits das neueste Modell, sodass Sie dieses Update jederzeit als Teil der veröffentlichten App übertragen können, beispielsweise wenn Sie das nächste Mal ein Funktionsupdate durchführen.