หลังจากที่คุณฝึกโมเดลแบบกำหนดเองใหม่หรือโมเดล AutoML Vision Edge คุณสามารถใช้การทดสอบ A/B เพื่อดูว่าโมเดลใหม่ทำงานได้ดีเพียงใดในสภาพจริง เมื่อเทียบกับโมเดลที่คุณใช้อยู่แล้ว หลังจากที่คุณยืนยันว่าโมเดลใหม่ของคุณมีการปรับปรุงแล้ว คุณสามารถเปิดตัวโมเดลใหม่นี้ให้กับผู้ใช้ทั้งหมดของคุณได้อย่างง่ายดายโดยไม่ต้องมีการอัปเดตแอป

หน้านี้แสดงวิธีที่คุณอาจดำเนินการทดสอบ A/B ซึ่งประเมินแบบจำลองสองเวอร์ชันที่ขับเคลื่อนคุณลักษณะการค้นหาโรงงานด้วยภาพโดยสมมุติฐาน คุณลักษณะนี้ใช้โมเดลการติดฉลากรูปภาพแบบกำหนดเองเพื่อช่วยให้ผู้ใช้ระบุชนิดพืชจากรูปภาพของพวกเขา
สมมติว่าคุณเพิ่งเผยแพร่โมเดลการติดฉลากโรงงานใหม่ 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()
วัตถุประสงค์-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
วัตถุประสงค์-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
ขณะนี้แอปของคุณใช้พารามิเตอร์การกำหนดค่าระยะไกลเพื่อกำหนดรูปแบบที่จะโหลด คุณสามารถเปลี่ยนรูปแบบได้โดยการเผยแพร่โมเดลใหม่และกำหนดชื่อให้กับพารามิเตอร์การกำหนดค่าระยะไกล ความสามารถนี้ช่วยให้การทดสอบ 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)
}
}
วัตถุประสงค์-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)
วัตถุประสงค์-C
[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];
เมตริกที่คุณทดสอบในท้ายที่สุดจะขึ้นอยู่กับวิธีที่แอปใช้โมเดลของคุณ
ณ จุดนี้ คุณสามารถปรับใช้แอปของคุณกับ App Store แอปของคุณจะยังคงใช้โมเดลดั้งเดิมของคุณ แต่โค้ดการกำหนดค่าระยะไกลและโค้ด Analytics ที่คุณเพิ่มเข้าไปจะช่วยให้คุณทดสอบกับโมเดลต่างๆ โดยใช้คอนโซล Firebase เท่านั้น
3. เรียกใช้การทดสอบ A/B Testing
เมื่อแอปของคุณอยู่ในมือของผู้ใช้และกำลังรวบรวมข้อมูลการวิเคราะห์ ให้สร้างการทดสอบการทดสอบ A/B ที่ทดสอบผลกระทบของการใช้โมเดลใหม่ของคุณแทนโมเดลปัจจุบัน
ในการสร้างการทดสอบ:
ในหน้า เหตุการณ์ ของคอนโซล Firebase ให้ตรวจสอบว่าคุณกำลังบันทึกเหตุการณ์ Analytics ที่เกี่ยวข้อง: เหตุการณ์การเปิดใช้งานและเมตริกเป้าหมาย
แอปของคุณต้องบันทึกแต่ละเหตุการณ์อย่างน้อยหนึ่งครั้งก่อนที่จะปรากฏในคอนโซล Firebase
ในคอนโซล Firebase ให้เปิดส่วน การทดสอบ A/B
สร้างการทดสอบใหม่:
คลิก สร้างการทดสอบ > การ กำหนดค่าระยะไกล
ในส่วน การกำหนดเป้าหมาย :
- เลือกแอปของคุณจากรายการ
- ระบุจำนวนผู้ใช้ที่คุณต้องการรวมไว้ในการทดสอบ
- เลือกเหตุการณ์การเปิดใช้งานที่คุณเริ่มบันทึก (ในตัวอย่างนี้ nondefault_model_downloaded )
ในส่วน เป้าหมาย ให้เลือกเมตริกเป้าหมายที่คุณกำหนดไว้ในส่วนก่อนหน้า (ในตัวอย่างนี้ first_result_opened ) จากรายการเมตริกเป้าหมาย และเลือกเมตริกเพิ่มเติมที่คุณต้องการติดตาม เช่น รายได้จากการซื้อหรือผู้ใช้ที่ไม่มีข้อขัดข้อง
ในส่วน ตัว เลือกสินค้า ให้กำหนดสองตัวเลือก:
- กลุ่มควบคุม (สร้างโดยอัตโนมัติ)
- เครื่องติดฉลากพืชทดลอง
สำหรับ กลุ่มควบคุม ให้สร้างพารามิเตอร์
plant_labeler_model
และตั้งค่าเป็นplant_labeler_v1
ผู้ใช้ที่กำหนดให้กับกลุ่มควบคุมจะใช้รุ่นเก่า (อย่าตั้งค่าพารามิเตอร์เป็น(no change)
เนื่องจากในแอปของคุณ คุณกำลังทดสอบว่าคุณกำลังใช้ค่าระยะไกล)สำหรับตัวแปร plant_labeler_model รุ่น ทดลอง ให้ตั้งค่าพารามิเตอร์
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
และอัปเดตโมเดลที่รวมกลุ่มหากคุณใช้ ผู้ใช้ของคุณใช้รุ่นล่าสุดอยู่แล้ว ดังนั้นคุณจึงสามารถผลักดันการอัปเดตนี้โดยเป็นส่วนหนึ่งของแอปที่เผยแพร่เมื่อใดก็ได้ตามสะดวก เช่น เมื่อคุณทำการอัปเดตคุณลักษณะในครั้งถัดไป