หลังจากฝึกโมเดลที่กำหนดเองใหม่หรือโมเดล AutoML Vision Edge แล้ว คุณสามารถใช้การทดสอบ A/B เพื่อดูว่าโมเดลใหม่ทำงานได้ดีเพียงใดในสภาพจริง โดยเทียบกับโมเดลที่คุณใช้อยู่แล้ว หลังตรวจสอบแล้วว่าโมเดลใหม่เป็นการปรับปรุงแล้ว คุณก็สามารถเปิดตัวโมเดลใหม่กับผู้ใช้ทั้งหมดได้ง่ายๆ โดยไม่ต้องอัปเดตแอป
หน้านี้แสดงวิธีทำการทดสอบ A/B ซึ่งประเมินโมเดล 2 เวอร์ชันซึ่งขับเคลื่อนฟีเจอร์การค้นหาพืชสมมติ ฟีเจอร์นี้ใช้โมเดลการติดป้ายกำกับรูปภาพที่กำหนดเองเพื่อช่วยให้ผู้ใช้ระบุชนิดพืชจากรูปภาพของตนได้
สมมติว่าคุณเพิ่งเผยแพร่โมเดลการติดป้ายกำกับพืชใหม่ plant_labeler_v2
และต้องการทำการทดสอบที่เปรียบเทียบกับโมเดลปัจจุบันชื่อว่า plant_labeler_v1
ขั้นตอนด้านล่างนี้แสดงวิธีตั้งค่า เรียกใช้ และดำเนินการกับผลลัพธ์
1. ทำให้โมเดลของคุณกำหนดค่าจากระยะไกลได้
ขั้นตอนแรกของการทดสอบ A/B กับโมเดลของคุณคือ แก้ไขแอปให้ใช้พารามิเตอร์การกำหนดค่าระยะไกลเพื่อกำหนดโมเดลที่จะใช้ ในขั้นต้น ให้คุณกำหนดค่าเริ่มต้นของพารามิเตอร์น��้เป็นโมเดลที่แอปใช้อยู่แล้ว แต่เน��่อ����าก��ื่อโมเดลควบคุมโดยพารามิเตอร์ที่กำหนดค่าได้จากระยะไกล คุณจึงเปลี่ยนแปลงและทดสอบกับโมเดลต่างๆ ได้โดยไม่ต้องส่งการอัปเดตแอปให้ผู้ใช้ทุกครั้ง
ดังนั้น หากคุณเผยแพร่โมเดลปัจจุบันโดยใช้ชื่อ 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-kit/ios/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml-kit/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-kit/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml-kit/android/use-custom-models#configure_a_local_model
ตอนนี้แอปของคุณใช้พารามิเตอร์การกำหนดค่าระยะไกลในการระบุโมเดลที่จะโหลดแล้ว คุณเปลี่ยนโมเดลได้ด้วยการเผยแพร่โมเดลใหม่และตั้งชื่อโมเดลให้กับพารามิเตอร์การกำหนดค่าระยะไกล ความสามารถนี้ช่วยให้การทดสอบ A/B กำหนดรูปแบบที่แตกต่าง��ันให้กับผู้ใช้ที่แตกต่างกันเพื่อจุดประสงค์ในการเปรียบเทียบ
ก่อนดำเนินการต่อ ใ��้ทำการเพิ่มโค้ดดาวน์โหลดโมเดลต่อไปนี้
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 มีเมตริกในตัวมากมาย เช่น รายได้ การมีส่วนร่วมรายวัน และการคงผู้ใช้ไว้ เมตริกเหล่านี้มักมีประโยชน์���ำหรับการทดสอบขั้นตอน UX ที่แตกต่างกันหรือพารามิเตอร์การปรับแต่ง แต่อาจไม่เหมาะแก่การประเมินโมเดลและกรณีการใช้งาน ในกรณีนี้ คุณอาจลองเพิ่มประสิทธิภาพสำหรับเหตุการณ์ Analytics ที่กำหนดเองแทน
ตัวอย่างการใช้ฟีเจอร์การค้นหาพืชที่ปรากฏสมมติขึ้นมา สมมติคุณนำเสนอผลการค้นหาแก่ผู้ใช้ตามลำดับความเชื่อมั่นของโมเดลในผลลัพธ์แต่ละรายการ วิธีหนึ่งที่คุณจะรู้ถึงความแม่นยำของโมเดลคือการดูความถี่ที่ผู้ใช้เปิดผลการค้นหาแรก
หากต้องการทดสอบว่าโมเดลใดบรรลุเป้าหมายในการเพิ่มจำนวนคลิกของผลลัพธ์อันดับต้นๆ ได้ดีที่สุด คุณจะต้องบันทึกเหตุการณ์ที่กำหนดเองเมื่อผู้ใช้แตะรายการแรกในผลลัพธ์
Swift
Analytics.logEvent("first_result_opened", parameters: nil)
Objective-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
สุดท้ายแล้ว เมตริกที่คุณทดสอบจะขึ้นอยู่กับวิธีที่แอปใช้โมเดลของคุณ
ในขั้นตอนนี้ คุณสามารถทำให้แอปใช้งานได้ใน App Store เลย แอปจะยังคงใช้โมเดลเดิมต่อไป แต่โค้ดการกำหนดค่าระยะไกลและโค้ด Analytics ที่คุณเพิ่มจะให้คุณทดสอบกับโมเดลต่างๆ ได้โดยใช้เฉพาะคอนโซล Firebase
3. ทำการทดสอบ A/B Testing
เมื่อแอปของคุณอยู่ในมือของผู้ใช้และกำลังรวบรวมข้อมูลการวิเคราะห์แล้ว ให้คุณสร้างการทดสอบ A/B Testing ที่จะทดสอบผลจากการใช้รูปแบบใหม่ของคุณแทนรูปแบบปัจจุบัน
วิธีสร้างการทดสอบ
-
ในหน้าเหตุการณ์ของคอนโซล Firebase ให้ยืนยันว่าคุณกําลังบันทึกเหตุการณ์ Analytics ที่เกี่ยวข้อง ซึ่งได้แก่ เหตุการณ์การเปิดใช้งานและเมตริกเป้าหมาย
แอปของคุณต้องบันทึกเหตุการณ์แต่ละรายการอย่างน้อย 1 ครั้งก่อนที่จะปรากฏในคอนโซล Firebase
-
ในคอนโซล Firebase ให้เปิดส่วนการทดสอบ A/B
-
สร้างการทดสอบใหม่
คลิกสร้างการทดสอบ > การกำหนดค่าระยะไกล
-
ในส่วนการกำหนดเป้าหมาย ให้ทำดังนี้
- เลือกแอปจากรายการ
- ระบุจำนวนผู้ใช้ที่คุณต้องการรวมไว้ในการทดสอบ
- เลือกเหตุการณ์การเปิดใช้งานที่คุณเริ่มบันทึก (ในตัวอย่างนี้คือ nondefault_model_downloaded)
-
ในส่วนเป้าหมาย ให้เลือกเมตริกเป้าหมายที่ระบุไว้ในส่วนก่อนหน้า (ในตัวอย่างนี้คือ first_result_opened) จากรายการเมตริกเป้าหมาย แล้วเลือกเมตริกเพิ่มเติมที่ต้องการติดตาม เช่น รายได้จากการซื้อหรือผู้ใช้ที่ไม่พบข้อขัดข้อง
-
ในส่วนตัวแปร ให้กำหนดตัวแปร 2 รายการดังนี้
- กลุ่มควบคุม (สร้างโดยอัตโนมัติ)
- ผู้ติดป้ายกำกับโรงงานทดลอง
สำหรับกลุ่มควบคุม ให้สร้างพารามิเตอร์
plant_labeler_model
และตั้งค่าเป็นplant_labeler_v1
ผู้ใช้ที่กำหนดให้กับกลุ่มควบคุมจะใช้โมเดลเก่า (อย่าตั้งพารามิเตอร์เป็น(no change)
เนื่องจากในแอปคุณกำลังทดสอบว่าใช้ค่าระยะไกลอยู่)สำหรับตัวแปรผู้ติดป้ายกำกับพืชทดลอง ให้ตั้งค่าพารามิเตอร์
plant_labeler_model
เป็นplant_labeler_v2
(สมมติว่าคุณเผยแพร่โมเดลใหม่ภายใต้ชื่อนั้น) ผู้ใช้ที่กําหนดให้กับตัวแปรนี้จะใช้โมเดลใหม่
เริ่มการทดสอบและปล่อยให้ทำงานเป็นเวลาหลายวันหรือนานกว่านั้นจนกว่า การทดสอบ A/B จะประกาศตัวแปรที่ดีที่สุด หากการทดสอบไม่สามารถระบุตัวแปรสูงสุดได้ คุณอาจต้อง ขยายการทดสอบให้ครอบคลุมผู้ใช้จำนวนมากขึ้น
4. เริ่มใช้ตัวแปรที่ชนะกับผู้ใช้ทุกคน
หลังจากการทดสอบ A/B ได้รวบรวมข้อมูลเพียงพอที่จะประกาศผู้นำแล้ว ในกรณีนี้ ตัวแปรที่เพิ่มจำนวนคลิกผลการค้นหาสูงสุดให้ได้สูงสุด คุณจะตัดสินใจได้ว่าจะเปิดตัวตัวแปรที่ชนะ (หรือตัวแปรอื่น) กับผู้ใช้ทั้งหมดหรือไม่
ในส่วนการทดสอบ A/B ของคอนโซล Firebase ให้เปิดมุมมองรายละเอียดของการทดสอบที่เสร็จสมบูรณ์แล้ว จากมุมมองนี้ คุณสามารถดูประสิทธิภาพของแต่ละตัวแปรตามเมตริกเป้าหมายและเมตริกรองที่คุณเลือก ข้อมูลนี้จะช่วยให้คุณตัดสินใจได้ว่าจะเปิดตัวตัวแปรที่ดีที่สุดหรือตัวแปรอื่น
หากต้องการเปิดตัวตัวแปรกับผู้ใช้ทุกคน ให้คลิก more_vert > เปิดตัวตัวแปรในหน้ารายละเอียดของการทดสอบ หลังจากดำเนินการแล้ว ค่าพารามิเตอร์ plant_labeler_model
ของผู้ใช้ทุกรายจะเป็น plant_labeler_v2
ในการอัปเดตแอปในอนาคต คุณควรเปลี่ยนค่าเริ่มต้นของพารามิเตอร์ plant_labeler_model
เป็น plant_labeler_v2
และอัปเดตโมเดลแบบกลุ่มหากใช้ แต่ผู้ใช้ก็ใช้เวอร์ชันล่าสุดอยู่แล้ว คุณจึงส่งการอัปเดตนี้ให้เป็นส่วนหนึ่งของแอปที่เผยแพร่ได้ทุกเมื่อที่สะดวก เช่น เวลาที่คุณอัปเดตฟีเจอร์ครั้งถัดไป