Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Test A / B due versioni di un modello

Dopo aver addestrato un nuovo modello personalizzato o un modello AutoML Vision Edge, puoi utilizzare il test A / B per vedere le prestazioni del nuovo modello in condizioni reali, rispetto al modello che già utilizzi. Dopo aver confermato che il tuo nuovo modello è un miglioramento, puoi facilmente distribuire il nuovo modello a tutti i tuoi utenti, senza richiedere un aggiornamento dell'app.

Questa pagina mostra come condurre un test A / B che valuta due versioni di un modello che alimenta un'ipotetica funzione di ricerca visiva dell'impianto. Questa funzione utilizza un modello di etichettatura di immagini personalizzato per aiutare gli utenti a identificare le specie vegetali dalle immagini di esse.

Supponiamo di aver appena pubblicato un nuovo modello di etichettatura dell'impianto, plant_labeler_v2 e di voler eseguire un esperimento che lo confronti con il modello corrente, denominato plant_labeler_v1 . I passaggi seguenti mostrano come impostare l'esperimento, eseguirlo e agire sui risultati.

1. Rendi il tuo modello configurabile da remoto

Il primo passaggio per il test A / B dei tuoi modelli è modificare la tua app per usare un parametro Remote Config per determinare quale modello usa. Inizialmente, imposterai il valore predefinito di questo parametro come modello che la tua app utilizza già, ma poiché il nome del modello è controllato da un parametro configurabile in remoto, puoi modificare e sperimentare modelli diversi senza dover inviare gli aggiornamenti dell'app al tuo utenti ogni volta.

Quindi, se hai pubblicato il tuo modello corrente con il nome plant_labeler_v1 , nel codice di inizializzazione dell'app imposteresti plant_labeler_v1 come valore predefinito del parametro plant_labeler_model , come nell'esempio seguente:

Swift

let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
    "plant_labeler_model": "plant_labeler_v1" as NSObject,
    // ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()

Obiettivo-C

FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig];
NSDictionary<NSString *, NSObject *> *defaults = @{
  @"plant_labeler_model" : (NSObject *)@"plant_labeler_v1",
  // ...
};
[remoteConfig setDefaults:defaults];
[remoteConfig fetchAndActivateWithCompletionHandler:nil];

Quindi, modifica il codice di configurazione del modello per caricare il modello specificato dal parametro plant_labeler_model :

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

Obiettivo-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

Ora che la tua app usa un parametro Remote Config per determinare quale modello caricare, puoi modificare il modello semplicemente pubblicando un nuovo modello e assegnandone il nome al parametro Remote Config. Questa capacità consente al test A / B di assegnare diversi modelli a diversi utenti allo scopo di confrontarli.

Prima di continuare, aggiungi anche la seguente aggiunta al codice di download del modello:

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)
    }
}

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

Il codice precedente registra un evento Analytics personalizzato che utilizzerai in seguito come esperimento evento di attivazione . Un evento di attivazione è un evento che l'utente deve attivare prima di essere considerato parte dell'esperimento. Ciò garantisce che gli utenti non verranno registrati nel test A / B finché il loro dispositivo non avrà terminato il download del modello ML personalizzato.

2. Determina una metrica dell'obiettivo

Il passaggio successivo è decidere come misurare il successo del modello e assicurarsi che l'app raccolga i dati necessari per testare il rendimento delle diverse versioni del modello in base a quella metrica.

Il test A / B ha diverse metriche integrate, tra cui entrate, coinvolgimento giornaliero e fidelizzazione degli utenti. Queste metriche sono spesso utili per testare diversi flussi UX o per ottimizzare i parametri, ma potrebbero non avere senso per valutare il modello e il caso d'uso. In questa situazione, puoi invece provare a ottimizzare per un evento Analytics personalizzato.

Usando l'ipotetica funzione di ricerca visiva dell'impianto come esempio, supponiamo di aver presentato i risultati della ricerca all'utente nell'ordine di fiducia del modello in ogni risultato. Un modo per farti un'idea dell'accuratezza del tuo modello sarebbe osservare la frequenza con cui gli utenti aprono il primo risultato di ricerca.

Per verificare quale modello ha raggiunto meglio l'obiettivo di massimizzare i clic sui risultati migliori, dovresti registrare un evento personalizzato ogni volta che un utente ha toccato il primo elemento nell'elenco dei risultati.

Swift

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

Obiettivo-C

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

La metrica per cui esegui il test dipende in ultima analisi da come l'app utilizza il tuo modello.

A questo punto, puoi distribuire la tua app nell'App Store. La tua app continuerà a utilizzare il tuo modello originale, ma il codice Remote Config e Analytics che hai aggiunto ti consentirà di sperimentare modelli diversi utilizzando solo la console Firebase.

3. Eseguire un esperimento di test A / B

Ora che la tua app è nelle mani dei tuoi utenti e sta raccogliendo dati di analisi, crea un esperimento di test A / B che verifichi l'effetto dell'utilizzo del tuo nuovo modello invece del modello corrente.

Per creare l'esperimento:

  1. Nella pagina Eventi della console Firebase, verifica che stai registrando gli eventi di Analytics pertinenti: l'evento di attivazione e la metrica dell'obiettivo.

    La tua app deve registrare ogni evento almeno una volta prima che venga visualizzato nella console Firebase.

  2. Nella console Firebase, apri la sezione A / B Testing .

  3. Crea un nuovo esperimento:

    1. Fai clic su Crea esperimento> Configurazione remota .

    2. Nella sezione Targeting :

      • Scegli la tua app dall'elenco
      • Specifica quanti dei tuoi utenti desideri includere nell'esperimento
      • Seleziona l'evento di attivazione che hai iniziato a registrare (in questo esempio, nondefault_model_downloaded )
    3. Nella sezione Obiettivi , scegli la metrica dell'obiettivo che hai determinato nella sezione precedente (in questo esempio, first_result_opened ) dall'elenco delle metriche degli obiettivi e seleziona eventuali metriche aggiuntive che desideri monitorare, come entrate di acquisto o utenti senza arresti anomali .

    4. Nella sezione Varianti , definire due varianti:

      • Gruppo di controllo (creato automaticamente)
      • Etichettatrice sperimentale per impianti

      Per il gruppo Controllo , creare un parametro plant_labeler_model e impostarlo su plant_labeler_v1 . Gli utenti assegnati al gruppo di controllo useranno il vecchio modello. (Non impostare il parametro su (no change) , poiché nella tua app stai testando che stai utilizzando un valore remoto.)

      Per la variante Experimental plant plant_labeler_model , imposta il parametro plant_labeler_v2 su plant_labeler_v2 (supponendo che tu abbia pubblicato il tuo nuovo modello con quel nome). Gli utenti assegnati a questa variante utilizzeranno il nuovo modello.

    Schermata di configurazione del test A / B

Avvia l'esperimento e lascialo funzionare per diversi giorni o più, fino a quando l'A / B Testing dichiara un leader. Se l'esperimento non è in grado di determinare un leader, potrebbe essere necessario espandere l'esperimento a più utenti .

4. Distribuisci la variante vincente a tutti gli utenti

Scheda dei risultati del test A / B

Dopo che il test A / B ha raccolto informazioni sufficienti per dichiarare un leader, in questo caso, la variante che ha massimizzato i migliori clic sui risultati di ricerca, puoi decidere se distribuire la variante vincente (o un'altra variante) a tutti i tuoi utenti.

Nella sezione Test A / B della console Firebase , apri la visualizzazione dei dettagli dell'esperimento completato. Da questa visualizzazione, puoi vedere il rendimento di ciascuna variante in base alla metrica dell'obiettivo e alle metriche secondarie selezionate. Con queste informazioni, puoi decidere se implementare la variante principale o un'altra variante.

Per distribuire una variante a tutti gli utenti, fai clic su > variante nella pagina dei dettagli dell'esperimento. Dopo averlo fatto, il valore del parametro plant_labeler_model sarà plant_labeler_v2 per tutti gli utenti.

In un aggiornamento futuro app, è necessario modificare il valore predefinito del plant_labeler_model parametro da plant_labeler_v2 e aggiornare il modello in dotazione se si utilizza uno. I tuoi utenti stanno già utilizzando il modello più recente, quindi puoi eseguire il push di questo aggiornamento come parte dell'app pubblicata ogni volta che è conveniente, ad esempio quando esegui un aggiornamento delle funzionalità.