Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

तीव्र

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

उद्देश्य सी

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

फिर, मॉडल के आधार पर निर्दिष्ट लोड करने के लिए अपने मॉडल सेटअप कोड बदलने plant_labeler_model पैरामीटर:

तीव्र

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

उद्देश्य सी

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

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

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

तीव्र

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

उद्देश्य सी

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

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

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

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

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

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

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

तीव्र

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

उद्देश्य सी

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

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

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

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

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

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

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

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

  2. Firebase कंसोल में, A / B परीक्षण अनुभाग खोलें।

  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 टेस्टिंग द्वारा लीडर घोषित करने के लिए पर्याप्त जानकारी एकत्र करने के बाद—इस मामले में, शीर्ष खोज परिणाम क्लिक को अधिकतम करने वाला संस्करण—आप यह तय कर सकते हैं कि आपके सभी उपयोगकर्ताओं के लिए विजेता संस्करण (या अन्य प्रकार) को रोल आउट करना है या नहीं।

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

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

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