หลังจากฝึกโมเดลที่กำหนดเองใหม่แล้ว คุณจะใช้ 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/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 ที่คุณเพิ่มจะช่วยให้คุณทดสอบ โมเดลต่างๆ ได้โดยใช้เฉพาะคอนโซล Firebase
3. ทำการทดสอบ A/B Testing
ตอนนี้แอปอยู่ในมือของผู้ใช้และกำลังรวบรวมข้อมูลวิเคราะห์แล้ว ให้สร้าง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 และอัปเดตโมเดลที่รวมไว้หากคุณใช้ อย่างไรก็ตาม ผู้ใช้ของคุณใช้โมเดลล่าสุดอยู่แล้ว ดังนั้น
คุณจึงสามารถพุชการอัปเดตนี้เป็นส่วนหนึ่งของแอปที่เผยแพร่ได้ทุกเมื่อที่สะดวก
เช่น เมื่อคุณทำการอัปเดตฟีเจอร์ครั้งถัดไป