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 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 beschrieben, wie Sie einen A/B-Test durchführen können, bei dem zwei Versionen ausgewertet werden. eines Modells, das eine hypothetische visuelle Pflanzensuchfunktion unterstützt. 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 für die Verwendung eines Parameter Remote Config, 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:
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 den Code für die Modelleinrichtung so, dass das mit dem Parameter plant_labeler_model
angegebene Modell geladen wird:
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 laden können, können Sie das Modell ändern, indem Sie ein neues Modell veröffentlichen und seine in den Parameter Remote Config ein. Mit dieser Funktion kann A/B Testing den verschiedenen Nutzenden zum Zweck des Vergleichs verschiedene Modelle zuweisen.
Bevor Sie fortfahren, nehmen Sie außerdem folgende Ergänzung zum Download des Modells vor Code:
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);
}
}
});
Mit dem Code oben wird ein benutzerdefiniertes Analytics-Ereignis protokolliert, das Sie später als
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, für ein benutzerdefiniertes Analytics-Ereignis 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.
Wenn Sie testen möchten, mit welchem Modell die Klicks auf die obersten Ergebnisse am besten maximiert werden, protokollieren Sie ein benutzerdefiniertes Ereignis, wenn ein Nutzer 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);
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 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:
-
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.
-
Öffnen Sie in der Firebase-Konsole den Abschnitt A/B Testing.
-
Neuen Test erstellen:
Klicken Sie auf Test erstellen > Remote Config
-
Im Bereich Targeting:
- Wählen Sie die 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
-
Wählen Sie im Bereich Zielvorhaben den Zielvorhabenmesswert aus, den Sie festgelegt haben. vorherigen Abschnitt (in diesem Beispiel first_result_opened) in der Liste der Zielmesswerte und wählen Sie zusätzliche Messwerte aus, z. B. den Umsatz durch Käufe oder Nutzer ohne Abstürze.
-
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 aufplant_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ürplant_labeler_v2
(vorausgesetzt, Sie haben Ihr neues Modell veröffentlicht unter diesem Namen). 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 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
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 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.
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 erhöht sich der Wert des
plant_labeler_model
-Parameter wird plant_labeler_v2
für alle Nutzenden.
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.