नए कस्टम मॉडल को ट्रेन करने के बाद, A/B Testing का इस्तेमाल करके यह देखा जा सकता है कि असल दुनिया की स्थितियों में, नया मॉडल कैसा परफ़ॉर्म करता है. इसकी तुलना, पहले से इस्तेमाल किए जा रहे मॉडल से की जाती है. यह पुष्टि करने के बाद कि आपका नया मॉडल बेहतर है, उसे अपने सभी उपयोगकर्ताओं के लिए आसानी से रोल आउट किया जा सकता है. इसके लिए, ऐप्लिकेशन को अपडेट करने की ज़रूरत नहीं होती.
इस पेज पर, A/B टेस्ट करने का तरीका बताया गया है. इस टेस्ट में, किसी मॉडल के दो वर्शन का आकलन किया जाता है. यह मॉडल, काल्पनिक तौर पर पौधों की खोज करने की सुविधा को बेहतर बनाता है. यह सुविधा, इमेज लेबलिंग के कस्टम मॉडल का इस्तेमाल करती है. इससे लोगों को पौधों की इमेज से उनकी प्रजातियों की पहचान करने में मदद मिलती है.
मान लें कि आपने अभी-अभी एक नया प्लांट लेबलिंग मॉडल, plant_labeler_v2 पब्लिश किया है. अब आपको एक ऐसा एक्सपेरिमेंट करना है जिसमें इसकी तुलना, plant_labeler_v1 नाम वाले अपने मौजूदा मॉडल से की जा सके. एक्सपेरिमेंट को सेट अप करने, उसे चलाने, और नतीजों के आधार पर कार्रवाई करने का तरीका यहां बताया गया है.
1. अपने मॉडल को रिमोट से कॉन्फ़िगर करने की सुविधा चालू करना
अपने मॉडल की A/B टेस्टिंग करने के लिए, सबसे पहले अपने ऐप्लिकेशन में बदलाव करें. इसके लिए, Remote Config पैरामीटर का इस्तेमाल करें, ताकि यह तय किया जा सके कि ऐप्लिकेशन कौनसा मॉडल इस्तेमाल करेगा. शुरुआत में, आपको इस पैरामीटर की डिफ़ॉल्ट वैल्यू को उस मॉडल पर सेट करना होगा जिसका इस्तेमाल आपका ऐप्लिकेशन पहले से ही करता है. हालांकि, मॉडल के नाम को रिमोटली कॉन्फ़िगर किए जा सकने वाले पैरामीटर से कंट्रोल किया जाता है. इसलिए, आपको हर बार अपने उपयोगकर्ताओं को ऐप्लिकेशन के अपडेट पुश करने की ज़रूरत नहीं होगी. इसके बजाय, अलग-अलग मॉडल को बदला जा सकता है और उन पर एक्सपेरिमेंट किया जा सकता है.
इसलिए, अगर आपने अपने मौजूदा मॉडल को plant_labeler_v1 नाम से पब्लिश किया है, तो आपको अपने ऐप्लिकेशन के इनिशियलाइज़ेशन कोड में, plant_labeler_v1 पैरामीटर की डिफ़ॉल्ट वैल्यू के तौर पर plant_labeler_v1 को सेट करना होगा. ऐसा नीचे दिए गए उदाहरण की तरह करें:plant_labeler_model
Swift
let remoteConfig = RemoteConfig.remoteConfig()
let defaults = [
"plant_labeler_model": "plant_labeler_v1" as NSObject,
// ...
]
remoteConfig.setDefaults(defaults)
remoteConfig.fetchAndActivate()
Objective-C
FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig];
NSDictionary<NSString *, NSObject *> *defaults = @{
@"plant_labeler_model" : (NSObject *)@"plant_labeler_v1",
// ...
};
[remoteConfig setDefaults:defaults];
[remoteConfig fetchAndActivateWithCompletionHandler:nil];
इसके बाद, मॉडल सेटअप कोड में बदलाव करके, 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/use-custom-models#configure_a_local_model
Objective-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/use-custom-models#configure_a_local_model
अब आपका ऐप्लिकेशन, Remote Config पैरामीटर का इस्तेमाल करके यह तय करता है कि कौनसे मॉडल को लोड करना है. इसलिए, सिर्फ़ एक नया मॉडल पब्लिश करके और उसका नाम Remote Config पैरामीटर को असाइन करके, मॉडल को बदला जा सकता है. इस सुविधा की मदद से, A/B Testing अलग-अलग उपयोगकर्ताओं को अलग-अलग मॉडल असाइन कर सकता है, ताकि उनकी तुलना की जा सके.
आगे बढ़ने से पहले, मॉडल डाउनलोड करने के कोड में यह भी जोड़ें:
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)
}
}
Objective-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];
}
}];
ऊपर दिया गया कोड, Analytics के कस्टम इवेंट को लॉग करता है. इसका इस्तेमाल बाद में, एक्सपेरिमेंट के
2. लक्ष्य मेट्रिक तय करना
अगला चरण यह तय करना है कि अपने मॉडल की परफ़ॉर्मेंस का आकलन कैसे किया जाएगा. साथ ही, यह पक्का करना है कि आपका ऐप्लिकेशन, ज़रूरी डेटा इकट्ठा कर रहा हो. इससे यह टेस्ट किया जा सकेगा कि मॉडल के अलग-अलग वर्शन, उस मेट्रिक के हिसाब से कितनी अच्छी परफ़ॉर्म करते हैं.
A/B Testing में कई बिल्ट-इन मेट्रिक होती हैं. इनमें रेवेन्यू, रोज़ाना का जुड़ाव, और उपयोगकर्ता को अपने साथ जोड़े रखना शामिल है. ये मेट्रिक, अक्सर अलग-अलग UX फ़्लो की टेस्टिंग या पैरामीटर को बेहतर बनाने के लिए काम आती हैं. हालांकि, हो सकता है कि ये मेट्रिक आपके मॉडल और इस्तेमाल के उदाहरण का आकलन करने के लिए सही न हों. इस स्थिति में, Analytics के कस्टम इवेंट के लिए ऑप्टिमाइज़ करने की कोशिश की जा सकती है.
उदाहरण के लिए, मान लें कि आपने काल्पनिक विज़ुअल प्लांट सर्च सुविधा का इस्तेमाल किया. इसमें आपने उपयोगकर्ता को खोज के नतीजे इस क्रम में दिखाए कि मॉडल को हर नतीजे पर कितना भरोसा है. अपने मॉडल की सटीकता का पता लगाने के लिए, यह देखा जा सकता है कि उपयोगकर्ताओं ने खोज के पहले नतीजे को कितनी बार खोला.
यह जांच करने के लिए कि किस मॉडल ने सबसे ज़्यादा क्लिक पाने का लक्ष्य सबसे बेहतर तरीके से हासिल किया, आपको हर बार एक कस्टम इवेंट लॉग करना होगा, जब कोई उपयोगकर्ता नतीजों की सूची में पहले आइटम पर टैप करता है.
Swift
Analytics.logEvent("first_result_opened", parameters: nil)
Objective-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
आपको जिस मेट्रिक के लिए टेस्ट करना है वह इस बात पर निर्भर करती है कि आपका ऐप्लिकेशन आपके मॉडल का इस्तेमाल कैसे करता है.
इस चरण में, अपने ऐप्लिकेशन को App Store पर डिप्लॉय किया जा सकता है. आपका ऐप्लिकेशन, आपके ओरिजनल मॉडल का इस्तेमाल करता रहेगा. हालांकि, जोड़े गए Remote Config और Analytics कोड की मदद से, सिर्फ़ Remote Config कंसोल का इस्तेमाल करके अलग-अलग मॉडल के साथ एक्सपेरिमेंट किया जा सकेगा.Firebase
3. A/B Testing एक्सपेरिमेंट चलाना
अब आपका ऐप्लिकेशन उपयोगकर्ताओं के पास है और वह आंकड़ों का डेटा इकट्ठा कर रहा है. इसलिए, एक A/B Testing एक्सपेरिमेंट बनाएं. इससे यह पता चलेगा कि मौजूदा मॉडल के बजाय, नए मॉडल का इस्तेमाल करने से क्या असर पड़ता है.
एक्सपेरिमेंट बनाने के लिए:
-
Firebase कंसोल के इवेंट पेज पर जाकर, पुष्टि करें कि आपने काम के Analytics इवेंट लॉग किए हैं: ऐक्टिवेशन इवेंट और लक्ष्य मेट्रिक.
Firebase कंसोल में दिखने से पहले, आपके ऐप्लिकेशन को हर इवेंट को कम से कम एक बार लॉग करना होगा.
-
Firebase कंसोल में, A/B Testing सेक्शन खोलें.
-
नया एक्सपेरिमेंट बनाने के लिए:
एक्सपेरिमेंट बनाएं > Remote Config पर क्लिक करें.
-
टारगेटिंग सेक्शन में जाकर:
- सूची में से अपना ऐप्लिकेशन चुनें
- यह तय करें कि आपको कितने उपयोगकर्ताओं को एक्सपेरिमेंट में शामिल करना है
- वह ऐक्टिवेशन इवेंट चुनें जिसे आपने लॉग करना शुरू किया था. इस उदाहरण में, nondefault_model_downloaded इवेंट को चुना गया है
-
लक्ष्य सेक्शन में, लक्ष्य मेट्रिक की सूची से वह मेट्रिक चुनें जिसे आपने पिछले सेक्शन में तय किया था. इस उदाहरण में, first_result_opened को चुना गया है. इसके बाद, वे अतिरिक्त मेट्रिक चुनें जिन्हें आपको ट्रैक करना है. जैसे, खरीदारी से मिलने वाला रेवेन्यू या बिना क्रैश वाले उपयोगकर्ता.
-
वैरिएंट सेक्शन में, दो वैरिएंट तय करें:
- कंट्रोल ग्रुप (अपने-आप बनाया गया)
- एक्सपेरिमेंट के तौर पर उपलब्ध, पौधों की पहचान करने वाला लेबल
कंट्रोल ग्रुप के लिए,
plant_labeler_modelपैरामीटर बनाएं और इसेplant_labeler_v1पर सेट करें. कंट्रोल ग्रुप में शामिल उपयोगकर्ताओं को पुराना मॉडल इस्तेमाल करने का विकल्प मिलेगा. (पैरामीटर को(no change)पर सेट न करें, क्योंकि आपके ऐप्लिकेशन में यह टेस्ट किया जा रहा है कि रिमोट वैल्यू का इस्तेमाल किया जा रहा है या नहीं.)एक्सपेरिमेंट के तौर पर उपलब्ध प्लांट लेबलर वैरिएंट के लिए,
plant_labeler_modelपैरामीटर कोplant_labeler_v2पर सेट करें. मान लें कि आपने अपने नए मॉडल को इसी नाम से पब्लिश किया है. इस वैरिएंट को असाइन किए गए उपयोगकर्ता, नए मॉडल का इस्तेमाल करेंगे.
एक्सपेरिमेंट शुरू करें और इसे कई दिनों तक चलने दें. ऐसा तब तक करें, जब तक A/B Testing किसी एक को लीडर के तौर पर नहीं चुन लेता. अगर एक्सपेरिमेंट से यह पता नहीं चलता कि कौनसी सेटिंग सबसे अच्छा परफ़ॉर्म कर रही है, तो आपको एक्सपेरिमेंट को ज़्यादा उपयोगकर्ताओं के लिए उपलब्ध कराना पड़ सकता है.
4. सबसे अच्छा परफ़ॉर्म करने वाले वैरिएंट को सभी उपयोगकर्ताओं के लिए रोल आउट करना
A/B Testing के पास जब यह तय करने के लिए ज़रूरी जानकारी इकट्ठा हो जाती है कि कौनसी रणनीति सबसे अच्छा परफ़ॉर्म कर रही है, तब आपके पास यह तय करने का विकल्प होता है कि आपको सबसे अच्छा परफ़ॉर्म करने वाली रणनीति (या कोई अन्य रणनीति) को सभी उपयोगकर्ताओं के लिए लागू करना है या नहीं. इस मामले में, सबसे अच्छा परफ़ॉर्म करने वाली रणनीति वह है जिसने खोज के सबसे ऊपर दिखने वाले नतीजों पर ज़्यादा क्लिक पाए हैं.
Firebase कंसोल के A/B Testing सेक्शन में जाकर, पूरे हो चुके एक्सपेरिमेंट की ज़्यादा जानकारी वाला व्यू खोलें. इस व्यू में, यह देखा जा सकता है कि आपके लक्ष्य की मेट्रिक और चुनी गई किसी भी सेकंडरी मेट्रिक के हिसाब से, हर वैरिएंट की परफ़ॉर्मेंस कैसी रही. इस जानकारी की मदद से, यह तय किया जा सकता है कि लीडिंग वैरिएंट या किसी दूसरे वैरिएंट को रोल आउट करना है या नहीं.
किसी वैरिएंट को सभी उपयोगकर्ताओं के लिए रोल आउट करने के लिए, एक्सपेरिमेंट की ज़्यादा जानकारी वाले पेज पर more_vert > वैरिएंट रोल आउट करें पर क्लिक करें. ऐसा करने पर, सभी उपयोगकर्ताओं के लिए plant_labeler_model पैरामीटर की वैल्यू plant_labeler_v2 हो जाएगी.
ऐप्लिकेशन के आने वाले अपडेट में, आपको plant_labeler_model पैरामीटर की डिफ़ॉल्ट वैल्यू को plant_labeler_v2 में बदलना होगा. साथ ही, अगर बंडल किए गए मॉडल का इस्तेमाल किया जाता है, तो उसे अपडेट करना होगा. हालांकि, आपके उपयोगकर्ता पहले से ही नए मॉडल का इस्तेमाल कर रहे हैं. इसलिए, जब आपको ठीक लगे, तब इस अपडेट को पब्लिश किए गए ऐप्लिकेशन के हिस्से के तौर पर पुश किया जा सकता है. जैसे, जब आपको अगली बार किसी सुविधा को अपडेट करना हो.