หลังจากฝึกโมเดลที่กำหนดเองใหม่หรือโมเดล AutoML Vision Edge แล้ว คุณจะใช้ A/B Testingเพื่อดูว่าโมเดลใหม่ทำงานได้ดีเพียงใดในสภาพการใช้งานจริง เมื่อเทียบกับรุ่นที่คุณใช้งานอยู่ หลังจากคุณยืนยันว่ารูปแบบใหม่ของคุณคือ คุณสามารถเปิดตัวโมเดลใหม่ กับผู้ใช้ทั้งหมดได้อย่างง่ายดาย โดยไม่ต้องอัปเดตแอป
หน้านี้แสดงวิธีทำการทดสอบ A/B ที่มีการประเมิน 2 เวอร์ชัน ของโมเดลที่ขับเคลื่อนฟีเจอร์การค้นหาต้นไม้สมมติ ฟีเจอร์นี้ ใช้โมเดลการติดป้ายกำกับรูปภาพที่กำหนดเองเพื่อช่วยให้ผู้ใช้ระบุชนิดพืชจาก รูปภาพเหล่านั้น
สมมติว่าคุณเพิ่งเผยแพร่โมเดลการติดป้ายกำกับพืชใหม่
plant_labeler_v2
และคุณต้องการเรียกใช้การทดสอบที่เปรียบเทียบข้อมูลดังกล่าว
กับโมเดลปัจจุบันของคุณ ชื่อ plant_labeler_v1
ขั้นตอนด้านล่างนี้
แสดงวิธีการตั้งค่า เรียกใช้ และดำเนินการกับผลลัพธ์
1. ทำให้โมเดลของคุณกำหนดค่าจากระยะไกลได้
ขั้นตอนแรกของการทดสอบ A/B กับโมเดลของคุณคือ แก้ไขแอปให้ใช้ Remote Config เพื่อระบุว่าใช้โมเดลใด ในตอนแรก คุณ จะตั้งค่าเริ่มต้นของพารามิเตอร์นี้เป็นโมเดลที่แอปของคุณ ใช้อยู่แล้ว แต่เนื่องจากชื่อโมเดลถูกควบคุมโดยการควบคุมระยะไกล พารามิเตอร์ที่กำหนดค่าได้ คุณสามารถเปลี่ยนแปลงและทดสอบกับรูปแบบต่างๆ โดยไม่ต้องส่งการอัปเดตแอปให้ผู้ใช้ทุกครั้ง
ดังนั้น หากคุณเผยแพร่โมเดลปัจจุบันโดยใช้ชื่อ
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/label-images-with-automl#configure-a-local-model-source
// 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/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 มอบหมาย รูปแบบที่ต่างกันกับผู้ใช้ที่แตกต่างกันเพื่อจุดประสงค์ในการเปรียบเทียบ
ก่อนดำเนินการต่อ ให้ทำการดาวน์โหลดโมเดลต่อไปนี้เพิ่มเติม รหัส:
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 ที่คุณเพิ่มจะให้คุณทดสอบ ที่มีรุ่นต่างๆ โดยใช้เฉพาะคอนโซล Firebase
3. ทำการทดสอบ A/B Testing
เมื่อแอปของคุณอยู่ในส่วนของผู้ใช้ และเก็บรวบรวมข้อมูล Analytics อยู่ สร้างการทดสอบ A/B Testing ที่จะทดสอบผลจากการใช้ แทนรูปแบบปัจจุบัน
วิธีสร้างการทดสอบ
-
ในหน้าเหตุการณ์ ของคอนโซล Firebase เพื่อยืนยันว่าคุณกำลังบันทึกข้อมูล เหตุการณ์ใน Analytics: เหตุการณ์การเปิดใช้งานและเมตริกเป้าหมาย
แอปของคุณต้องบันทึกเหตุการณ์แต่ละเหตุการณ์อย่างน้อย 1 ครั้งก่อนที่จะปรากฏใน คอนโซล Firebase
-
ในคอนโซล Firebase ให้เปิดส่วน A/B Testing
-
สร้างการทดสอบใหม่
คลิกสร้างการทดสอบ > Remote Config
-
ในส่วนการกำหนดเป้าหมาย ให้ทำดังนี้
- เลือกแอปจากรายการ
- ระบุจำนวนผู้ใช้ที่คุณต้องการรวมไว้ในฟิลด์ การทดสอบ
- เลือกเหตุการณ์การเปิดใช้งานที่คุณเริ่มบันทึก (ในตัวอย่างนี้ nondefault_model_downloaded)
-
ในส่วนเป้าหมาย ให้เลือกเมตริกเป้าหมายที่ระบุไว้ใน ส่วนก่อนหน้า (ในตัวอย่างนี้คือ first_result_opened) จากรายการตัวชี้วัดเป้าหมาย และเลือกเมตริกอื่นๆ ที่คุณ ต้องการติดตาม เช่น รายได้จากการซื้อ หรือผู้ใช้ที่ไม่พบข้อขัดข้อง
-
ในส่วนตัวแปร ให้กำหนดตัวแปร 2 รายการดังนี้
- กลุ่มควบคุม (สร้างโดยอัตโนมัติ)
- ผู้ติดป้ายกำกับโรงงานทดลอง
สำหรับกลุ่มควบคุม ให้สร้าง
plant_labeler_model
และตั้งค่าเป็นplant_labeler_v1
ผู้ใช้ที่มอบหมายให้กับกลุ่มควบคุม จะใช้โมเดลเดิม (อย่าตั้งค่าพารามิเตอร์เป็น(no change)
เนื่องจากในแอปคุณกำลังทดสอบว่าคุณใช้ ค่าระยะไกล)สําหรับตัวแปรผู้ติดป้ายกํากับพืชรุ่นทดลอง ให้ตั้งค่า
plant_labeler_model
พารามิเตอร์ไปยังplant_labeler_v2
(สมมติว่าคุณได้เผยแพร่โมเดลใหม่แล้ว ภายใต้ชื่อนั้น) ผู้ใช้ที่กำหนดให้กับตัวแปรนี้จะใช้ โมเดล
เริ่มต้นการทดสอบและปล่อยให้มีการทำงานเป็นเวลาหลายวันหรือนานกว่านั้นจนกระทั่ง A/B Testing ประกาศตัวแปรที่ดีที่สุด หากการทดสอบไม่สามารถระบุตัวแปรที่ได้คะแนนนำ คุณอาจต้อง ขยายการทดสอบไปยังผู้ใช้จำนวนมากขึ้น
4. เริ่มใช้ตัวแปรที่ชนะกับผู้ใช้ทุกคน
หลังจาก A/B Testing รวบรวมข้อมูลได้มากพอที่จะประกาศ ตัวแปรที่ดีที่สุด ซึ่งในกรณีนี้คือตัวแปรที่ทำให้ผลการค้นหาอันดับบนสุดขยายตัวสูงสุด การคลิก — คุณสามารถตัดสินใจว่าจะเปิดตัวตัวแปรที่ชนะ (หรือตัวแปรอื่น) ) ให้แก่ผู้ใช้ทั้งหมด
ในส่วน A/B Testing ของคอนโซล Firebase ให้เปิดรายละเอียด ของการทดสอบที่เสร็จสมบูรณ์ จากมุมมองนี้ คุณจะเห็นวิธีที่แต่ละตัวแปร มีประสิทธิภาพตามเมตริกเป้าหมายและเมตริกรองที่คุณเลือก คุณสามารถใช้ข้อมูลนี้เพื่อตัดสินใจว่าจะเริ่มใช้ตัวแปรที่ดีที่สุดหรือ ตัวแปรอื่น
หากต้องการเปิดตัวตัวแปรกับผู้ใช้ทุกคน ให้คลิก
more_vert เริ่มใช้ตัวแปรใน
หน้ารายละเอียดของการทดสอบ เมื่ออัปโหลดแล้ว ค่าของ
พารามิเตอร์ plant_labeler_model
รายการจะเป็น plant_labeler_v2
สำหรับผู้ใช้ทุกคน
ในการอัปเดตแอปในอนาคต คุณควรเปลี่ยนค่าเริ่มต้นของ
plant_labeler_model
พารามิเตอร์เป็น plant_labeler_v2
และอัปเดตกลุ่ม
หากคุณใช้ ผู้ใช้ของคุณกำลังใช้เวอร์ชันล่าสุดอยู่แล้ว ดังนั้น
คุณก็ส่งการอัปเดตนี้
เป็นส่วนหนึ่งของแอปที่เผยแพร่ได้ทุกเมื่อที่สะดวก
เช่น เมื่อคุณทำการอัปเดตฟีเจอร์ครั้งถัดไป