किसी मॉडल के दो वर्शन का A/B टेस्ट करना

नए कस्टम मॉडल या AutoML Vision Edge मॉडल को ट्रेनिंग देने के बाद, अगर आपको जानना है कि नया मॉडल असल हालातों में कैसा परफ़ॉर्म करता है, तो A/B Testing. . आपके नए मॉडल की पुष्टि होने के बाद बेहतर होगा, आप नए मॉडल को अपने सभी उपयोगकर्ताओं के लिए आसानी से रोल आउट कर सकते हैं, इसके लिए, ऐप्लिकेशन को अपडेट करने की ज़रूरत भी नहीं होती.

इस पेज पर बताया गया है कि दो वर्शन का आकलन करने वाले A/B टेस्ट को कैसे किया जा सकता है की सुविधा मिलती है. यह सुविधा पौधों की प्रजातियों की पहचान करने में लोगों की मदद करने के लिए, कस्टम इमेज लेबलिंग मॉडल का इस्तेमाल किया जाता है कर सकते हैं.

मान लें कि आपने हाल ही में, प्लांट लेबलिंग का एक नया मॉडल पब्लिश किया है, plant_labeler_v2 और आप इसकी तुलना करने वाला एक प्रयोग चलाना चाहते हैं आपके मौजूदा मॉडल का नाम plant_labeler_v1 है. इसके लिए, नीचे दिया गया तरीका अपनाएं एक्सपेरिमेंट सेट अप करने, उसे चलाने, और नतीजों पर कार्रवाई करने का तरीका दिखाना.

1. अपने मॉडल को रिमोट तरीके से कॉन्फ़िगर किया जा सकता है

अपने मॉडल की A/B टेस्टिंग करने का पहला चरण है, अपने ऐप्लिकेशन में बदलाव करना Remote Config पैरामीटर की मदद से तय किया जाता है कि वह कौनसा मॉडल इस्तेमाल करेगा. शुरुआत में, आपको इस पैरामीटर की डिफ़ॉल्ट वैल्यू को आपके ऐप्लिकेशन के मॉडल के रूप में सेट करेगा पहले से ही इस्तेमाल कर रहा है, लेकिन क्योंकि मॉडल नाम को रिमोट तरीके से कंट्रोल किया जाता है कॉन्फ़िगर किया जा सकने वाला पैरामीटर, आप बदल सकते है और अलग-अलग मॉडल के साथ प्रयोग कर सकते है और उन्हें हर बार ऐप्लिकेशन के अपडेट भेजने की ज़रूरत न पड़े.

इसलिए, यदि आप अपना वर्तमान मॉडल plant_labeler_v1 को आप अपने ऐप्लिकेशन के शुरू करने वाले कोड में सेट करेंगे डिफ़ॉल्ट वैल्यू के तौर पर plant_labeler_v1 plant_labeler_model पैरामीटर, जैसा कि इस उदाहरण में दिखाया गया है:

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.
                  // ...
                }
            }
        });

इसके बाद, plant_labeler_model पैरामीटर:

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

अब आपका ऐप्लिकेशन, Remote Config पैरामीटर का इस्तेमाल करके यह तय करता है कि किस मॉडल को लोड होता है, तो आप केवल एक नया मॉडल प्रकाशित करके और Remote Config पैरामीटर का नाम डालें. इसकी मदद से, A/B Testing अलग-अलग मॉडल का इस्तेमाल करें.

जारी रखने से पहले, अपने मॉडल को डाउनलोड करने के साथ-साथ, यहां दिया गया तरीका भी डाउनलोड करें कोड:

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

ऊपर दिया गया कोड एक कस्टम Analytics इवेंट लॉग करता है, जिसका इस्तेमाल बाद में अपने एक्सपेरिमेंट को ऐक्टिवेशन इवेंट के बारे में जानकारी. ऐक्टिवेशन इवेंट, वह इवेंट होता है जो एक्सपेरिमेंट का हिस्सा बनने से पहले, उपयोगकर्ता को ट्रिगर करना होगा. यह पक्का करता है कि A/B टेस्ट में लोगों को तब तक रिकॉर्ड न किया जाए, जब तक कि उनके डिवाइस में ने अपने कस्टम एमएल मॉडल को डाउनलोड किया.

2. लक्ष्य मेट्रिक तय करना

अगला चरण यह तय करना है कि आप अपने मॉडल की सफलता का आकलन कैसे करेंगे, और यह पक्का करने के लिए कि आपका ऐप्लिकेशन कितनी अच्छी तरह से टेस्ट करने के लिए ज़रूरी डेटा इकट्ठा कर रहा है मॉडल के अलग-अलग वर्शन उस मेट्रिक के हिसाब से परफ़ॉर्म करते हैं.

A/B Testing में कई मेट्रिक पहले से मौजूद होती हैं. इनमें हर दिन के रेवेन्यू की जानकारी शामिल होती है यूज़र ऐक्टिविटी, और उपयोगकर्ता को अपने साथ जोड़े रखने की दर के बारे में बताना. ये मेट्रिक अक्सर टेस्टिंग के लिए मददगार होती हैं अलग-अलग UX फ़्लो या बेहतर बनाने वाले पैरामीटर हैं, लेकिन ज़रूरी नहीं है कि आपके मॉडल और इस्तेमाल के उदाहरण का आकलन करना चाहिए. ऐसी स्थिति में, आपके पास इसे कस्टम Analytics इवेंट के लिए ऑप्टिमाइज़ करें.

उदाहरण के लिए, विज़ुअल प्लांट खोज सुविधा का इस्तेमाल करके, मान लें कि ने आपके उपयोगकर्ता को खोज के नतीजे उसी क्रम में दिखाए होंगे जिस क्रम में वे हर नतीजे के साथ. अपने मॉडल की सटीकता का अनुमान लगाने का एक तरीका यह होगा जिससे यह देखा जा सकता है कि उपयोगकर्ताओं ने पहला खोज नतीजा कितनी बार खोला.

यह पता लगाने के लिए कि किस मॉडल ने सबसे अच्छे नतीजे वाले क्लिक को बढ़ाने का लक्ष्य सबसे सही तरीके से हासिल किया है, जब कोई उपयोगकर्ता खोज के नतीजे में पहले आइटम पर टैप करेगा, तो कस्टम इवेंट को लॉग किया जाएगा सूची.

Kotlin+KTX

FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)

Java

FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);

जिस मेट्रिक के लिए आपके टेस्ट किए जाते हैं वह इस बात पर निर्भर करता है कि आपका ऐप्लिकेशन, मॉडल.

इस समय, अपने ऐप्लिकेशन को Play Store पर डिप्लॉय किया जा सकता है. आपका ऐप्लिकेशन आपके मूल मॉडल का उपयोग करना जारी रखेगा, लेकिन आपने जो Remote Config और Analytics कोड जोड़ा है, उसकी मदद से आप Firebase कंसोल का इस्तेमाल करके, अलग-अलग मॉडल के साथ काम करता है.

3. A/B Testing प्रयोग चलाएं

अब जब आपका ऐप्लिकेशन, उपयोगकर्ताओं की सूची में शामिल है आंकड़े इकट्ठा कर रहे हैं और एक A/B Testing प्रयोग बनाएं, जो आपके नए .

एक्सपेरिमेंट बनाने के लिए:

  1. इवेंट में तो Firebase कंसोल का पेज खोलें, सत्यापित करें कि आप प्रासंगिक Analytics इवेंट: ऐक्टिवेशन इवेंट और लक्ष्य से जुड़ी मेट्रिक.

    आपके ऐप्लिकेशन को हर इवेंट को कम से कम एक बार लॉग करना होगा. इसके बाद ही, वह इवेंट में दिखेगा Firebase कंसोल.

  2. Firebase कंसोल में, A/B Testing सेक्शन खोलें.

  3. नया प्रयोग बनाएं:

    1. प्रयोग बनाएं > Remote Config.

    2. टारगेटिंग सेक्शन में:

      • सूची में से अपना ऐप्लिकेशन चुनें
      • बताएं कि आप कितने उपयोगकर्ताओं को एक्सपेरिमेंट
      • उस ऐक्टिवेशन इवेंट को चुनें जिसे आपने लॉग करना शुरू किया था (इस उदाहरण में, nondefault_model_downloaded) को
    3. लक्ष्य सेक्शन में, वह लक्ष्य मेट्रिक चुनें जिसे आपने तय किया था पिछला सेक्शन (इस उदाहरण में, first_result_opened) लक्ष्य मेट्रिक की सूची से चुनें. साथ ही, अपने हिसाब से अन्य मेट्रिक चुनें ट्रैक करना चाहते हैं, जैसे कि खरीदारी से मिलने वाला रेवेन्यू या ऐसे उपयोगकर्ता जिनके ऐप्लिकेशन बंद नहीं हुए.

    4. वैरिएंट सेक्शन में, दो वैरिएंट तय करें:

      • कंट्रोल ग्रुप (अपने-आप बनाया गया)
      • एक्सपेरिमेंटल प्लांट लेबलर

      कंट्रोल ग्रुप के लिए, plant_labeler_model पैरामीटर जोड़कर इसे इस पर सेट करें plant_labeler_v1. कंट्रोल ग्रुप में असाइन किए गए उपयोगकर्ता पुराने मॉडल का इस्तेमाल करेगा. (पैरामीटर को (no change) पर सेट न करें, क्योंकि अपने ऐप्लिकेशन में इस बात की जांच की जा रही है कि रिमोट वैल्यू.)

      एक्सपेरिमेंटल प्लांट लेबलर वैरिएंट के लिए, plant_labeler_model पैरामीटर के लिए plant_labeler_v2 (यह मानते हुए कि आपने अपना नया मॉडल प्रकाशित किया है डालें). इस वैरिएंट को असाइन किए गए उपयोगकर्ता, नए वैरिएंट का इस्तेमाल करेंगे मॉडल.

    A/B टेस्ट की कॉन्फ़िगरेशन स्क्रीन

प्रयोग शुरू करें और इसे कई दिनों या उससे ज़्यादा समय तक चलने दें A/B Testing ने लीडर का एलान किया. अगर एक्सपेरिमेंट से लीडर तय नहीं किया जा सकता, तो आपको शायद एक्सपेरिमेंट को ज़्यादा से ज़्यादा लोगों तक पहुंचाएं.

4. सभी उपयोगकर्ताओं को, सबसे अच्छी परफ़ॉर्मेंस वाले वैरिएंट को रोल आउट करें

A/B टेस्ट के नतीजे का कार्ड

जब A/B Testing लीडर—इस मामले में, वह वैरिएंट जिसकी वजह से सबसे ऊपर वाले खोज नतीजे दिखते हैं क्लिक—यह फ़ैसला लिया जा सकता है कि सबसे अच्छी परफ़ॉर्मेंस वाले वैरिएंट को रोल आउट करना है या किसी और सभी उपयोगकर्ताओं को

Firebase कंसोल के A/B Testing सेक्शन में, जानकारी खोलें पूरे हो चुके प्रयोग का व्यू. इस व्यू से, यह देखा जा सकता है कि हर वैरिएंट परफ़ॉर्मेंस टारगेट की मेट्रिक और आपकी चुनी गई किसी भी सेकंडरी मेट्रिक के हिसाब से की जाती है. इस जानकारी के साथ, यह तय किया जा सकता है कि सबसे बेहतर वैरिएंट को रोल आउट करना है या कोई दूसरा वैरिएंट.

सभी उपयोगकर्ताओं को कोई वैरिएंट रोल आउट करने के लिए, उस पर क्लिक करें > वैरिएंट को इस पर रोल आउट करें प्रयोग की ज़्यादा जानकारी वाला पेज. ऐसा करने के बाद, plant_labeler_model पैरामीटर plant_labeler_v2 होगा सभी उपयोगकर्ताओं के लिए.

आने वाले समय में ऐप्लिकेशन के अपडेट में, आपको plant_labeler_model पैरामीटर को plant_labeler_v2 पर सेट करें और बंडल किए गए आइटम को अपडेट करें मॉडल का उपयोग करें. हालांकि, आपके उपयोगकर्ता पहले से ही नवीनतम मॉडल का उपयोग कर रहे हैं, इसलिए अपनी सुविधा के मुताबिक, इस अपडेट को पब्लिश किए गए ऐप्लिकेशन के हिस्से के तौर पर पब्लिश किया जा सकता है. जैसे, अगली बार कोई सुविधा अपडेट करने पर.