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

नया कस्टम मॉडल ट्रेन करने के बाद, 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

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

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/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/use-custom-models#configure_a_local_model

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

आगे बढ़ने से पहले, मॉडल डाउनलोड करने के कोड में यह जानकारी भी जोड़ें:

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

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

2. कोई लक्ष्य मेट्रिक तय करें

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

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

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

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

Kotlin

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 एक्सपेरिमेंट चलाएं

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

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

  1. इवेंट पेज पर, पुष्टि करें कि आपने Firebase कंसोल के काम के Analytics इवेंट लॉग किए हैं: ऐक्टिवेशन इवेंट और लक्ष्य मेट्रिक.

    Firebase कंसोल में दिखने से पहले, आपके ऐप्लिकेशन को हर इवेंट को कम से कम एक बार लॉग करना होगा.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 किसी वैरिएंट को लीडर के तौर पर तय करने के लिए ज़रूरी जानकारी इकट्ठा कर लेता है, तब यह तय किया जा सकता है कि जीतने वाले वैरिएंट (या किसी अन्य वैरिएंट) को सभी उपयोगकर्ताओं के लिए रोल आउट करना है या नहीं. इस मामले में, वह वैरिएंट लीडर होगा जिससे सबसे ऊपर दिखने वाले खोज नतीजों पर क्लिक की संख्या ज़्यादा हुई है.

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

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

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