Catch up on highlights from Firebase at Google I/O 2023. Learn more

A/B एक मॉडल के दो संस्करणों का परीक्षण करता है

एक नए कस्टम मॉडल या ऑटोएमएल विज़न एज मॉडल को प्रशिक्षित करने के बाद, आप यह देखने के लिए ए/बी परीक्षण का उपयोग कर सकते हैं कि नया मॉडल वास्तविक दुनिया की परिस्थितियों में आपके द्वारा पहले से उपयोग किए जाने वाले मॉडल की तुलना में कितना अच्छा प्रदर्शन करता है। यह पुष्टि करने के बाद कि आपका नया मॉडल एक सुधार है, आप ऐप अपडेट की आवश्यकता के बिना अपने सभी उपयोगकर्ताओं के लिए नए मॉडल को आसानी से रोल आउट कर सकते हैं।

यह पृष्ठ दिखाता है कि आप एक ए/बी परीक्षण कैसे कर सकते हैं जो एक मॉडल के दो संस्करणों का मूल्यांकन करता है जो एक काल्पनिक दृश्य संयंत्र खोज सुविधा को शक्ति देता है। यह सुविधा कस्टम इमेज लेबलिंग मॉडल का उपयोग करती है ताकि उपयोगकर्ताओं को उनकी छवियों से पौधों की प्रजातियों की पहचान करने में मदद मिल सके।

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

1. अपने मॉडल को दूरस्थ रूप से कॉन्फ़िगर करने योग्य बनाएं

अपने मॉडलों का ए/बी परीक्षण करने के लिए पहला कदम यह है कि यह निर्धारित करने के लिए कि यह किस मॉडल का उपयोग करता है, यह निर्धारित करने के लिए रिमोट कॉन्फिग पैरामीटर का उपयोग करने के लिए अपने ऐप को संशोधित करना है। प्रारंभ में, आप इस पैरामीटर का डिफ़ॉल्ट मान उस मॉडल के रूप में सेट करेंगे जिसे आपका ऐप पहले से उपयोग करता है, लेकिन चूंकि मॉडल का नाम दूरस्थ रूप से कॉन्फ़िगर करने योग्य पैरामीटर द्वारा नियंत्रित होता है, इसलिए आप ऐप अपडेट को पुश किए बिना विभिन्न मॉडलों के साथ बदल सकते हैं और प्रयोग कर सकते हैं। उपयोगकर्ता हर बार।

इसलिए, यदि आपने अपना वर्तमान मॉडल 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

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

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

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 ईवेंट लॉग करता है जिसे आप बाद में अपने प्रयोग के रूप में उपयोग करेंगे सक्रियण घटना . सक्रियण ईवेंट एक ऐसा ईवेंट है जिसे उपयोगकर्ता को प्रयोग का हिस्सा माने जाने से पहले ट्रिगर करना चाहिए। यह सुनिश्चित करता है कि उपयोगकर्ताओं को आपके ए/बी परीक्षण में तब तक रिकॉर्ड नहीं किया जाएगा जब तक कि उनका उपकरण उनके कस्टम एमएल मॉडल को डाउनलोड करना समाप्त नहीं कर देता।

2. एक लक्ष्य मीट्रिक निर्धारित करें

अगला चरण यह तय करना है कि आप अपने मॉडल की सफलता को कैसे मापेंगे, और यह सुनिश्चित करने के लिए कि आपका ऐप यह परीक्षण करने के लिए आवश्यक डेटा एकत्र कर रहा है कि मॉडल के विभिन्न संस्करण उस मीट्रिक के अनुसार कितना अच्छा प्रदर्शन करते हैं।

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

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

यह जांचने के लिए कि किस मॉडल ने शीर्ष परिणाम क्लिकों को अधिकतम करने का लक्ष्य प्राप्त किया है, जब भी कोई उपयोगकर्ता परिणाम सूची में पहले आइटम को टैप करता है तो आप एक कस्टम ईवेंट लॉग करेंगे।

Kotlin+KTX

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

Java

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

आप जिस मीट्रिक का परीक्षण करते हैं, वह अंततः इस बात पर निर्भर करता है कि आपका ऐप आपके मॉडल का उपयोग कैसे करता है।

इस बिंदु पर, आप अपने ऐप को Play Store पर तैनात कर सकते हैं। आपका ऐप आपके मूल मॉडल का उपयोग करना जारी रखेगा, लेकिन आपके द्वारा जोड़ा गया रिमोट कॉन्फिगरेशन और एनालिटिक्स कोड आपको केवल फायरबेस कंसोल का उपयोग करके विभिन्न मॉडलों के साथ प्रयोग करने देगा।

3. A/B परीक्षण प्रयोग चलाएँ

अब जबकि आपका ऐप आपके उपयोगकर्ताओं के हाथों में है और एनालिटिक्स डेटा एकत्र कर रहा है, एक ए/बी परीक्षण प्रयोग बनाएं जो वर्तमान मॉडल के बजाय आपके नए मॉडल के उपयोग के प्रभाव का परीक्षण करता है।

प्रयोग बनाने के लिए:

  1. Firebase कंसोल के ईवेंट पृष्ठ पर, सत्यापित करें कि आप प्रासंगिक Analytics ईवेंट लॉग कर रहे हैं: सक्रियण ईवेंट और लक्ष्य मीट्रिक।

    आपके ऐप को प्रत्येक ईवेंट को Firebase कंसोल में प्रदर्शित होने से पहले कम से कम एक बार लॉग इन करना होगा।

  2. फायरबेस कंसोल में, ए/बी टेस्टिंग सेक्शन खोलें।

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

    1. प्रयोग बनाएं > रिमोट कॉन्फिग पर क्लिक करें।

    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 परीक्षण एक नेता घोषित न कर दे। यदि प्रयोग एक नेता का निर्धारण नहीं कर सकता है, तो आपको प्रयोग को अधिक उपयोगकर्ताओं तक विस्तारित करने की आवश्यकता हो सकती है।

4. सभी उपयोगकर्ताओं के लिए विजेता संस्करण को रोल आउट करें

ए / बी परीक्षा परिणाम कार्ड

A/B टेस्टिंग द्वारा एक लीडर घोषित करने के लिए पर्याप्त जानकारी एकत्र करने के बाद—इस मामले में, वह संस्करण जिसने शीर्ष खोज परिणाम क्लिकों को अधिकतम किया है—आप यह तय कर सकते हैं कि आपके सभी उपयोगकर्ताओं के लिए विजेता संस्करण (या अन्य प्रकार) को रोल आउट करना है या नहीं।

Firebase कंसोल के A/B परीक्षण अनुभाग में, पूर्ण किए गए प्रयोग का विवरण दृश्य खोलें। इस दृश्य से, आप देख सकते हैं कि आपके लक्ष्य मीट्रिक और आपके द्वारा चयनित किसी भी द्वितीयक मीट्रिक के अनुसार प्रत्येक प्रकार का प्रदर्शन कैसा रहा. इस जानकारी के साथ, आप यह तय कर सकते हैं कि अग्रणी संस्करण या किसी अन्य संस्करण को रोल आउट करना है या नहीं।

सभी उपयोगकर्ताओं के लिए एक प्रकार को रोल आउट करने के लिए, प्रयोग के विवरण पृष्ठ पर > वैरिएंट को रोल आउट करें पर क्लिक करें। एक बार जब आप ऐसा कर लेते हैं, तो सभी उपयोगकर्ताओं के लिए plant_labeler_model पैरामीटर का मान plant_labeler_v2 हो जाएगा।

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