หลังจากฝึกโมเดลใหม่ที่กำหนดเองหรือโมเดล 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
ดังตัวอย่างต่อไปนี้
Kotlin
val remoteConfig = FirebaseRemoteConfig.getInstance()
val remoteConfigDefaults = HashMap<String, Any>()
remoteConfigDefaults["plant_labeler_model"] = "plant_labeler_v1"
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults))
remoteConfig.fetchAndActivate().addOnSuccessListener { success ->
if (success) {
// Okay to get remote values.
// ...
}
}
Java
final FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.getInstance();
Map<String, Object> remoteConfigDefaults = new HashMap<>();
remoteConfigDefaults.put("plant_labeler_model", "plant_labeler_v1");
Tasks.await(remoteConfig.setDefaultsAsync(remoteConfigDefaults));
remoteConfig.fetchAndActivate().addOnSuccessListener(
new OnSuccessListener<Boolean>() {
@Override
public void onSuccess(Boolean success) {
if (success) {
// Okay to get remote values.
// ...
}
}
});
จากนั้นเปลี่ยนโค้ดการตั้งค่าโมเดลเพื่อโหลดโมเดลที่ระบุโดยพารามิเตอร์ plant_labeler_model
ดังนี้
Kotlin
val rcValue = remoteConfig.getValue("plant_labeler_model")
val remoteModelName = rcValue.asString()
// ...
val remoteModel = FirebaseRemoteModel.Builder(remoteModelName)
.enableModelUpdates(true)
.setInitialDownloadConditions(initialConditions)
.setUpdatesDownloadConditions(updateConditions)
.build()
FirebaseModelManager.getInstance().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
Java
FirebaseRemoteConfigValue rcValue = remoteConfig.getValue("plant_labeler_model");
String remoteModelName = rcValue.asString();
// ...
FirebaseRemoteModel remoteModel = new FirebaseRemoteModel.Builder(remoteModelName)
.enableModelUpdates(true)
.setInitialDownloadConditions(initialConditions)
.setUpdatesDownloadConditions(updateConditions)
.build();
FirebaseModelManager.getInstance().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
เมื่อแอปใช้พารามิเตอร์ Remote Config เพื่อระบุโมเดลที่จะโหลดแล้ว คุณจะเปลี่ยนโมเดลได้ง่ายๆ เพียงเผยแพร่โมเดลใหม่และกำหนดชื่อให้กับพารามิเตอร์ Remote Config ความสามารถนี้ช่วยให้ A/B Testing กำหนดรูปแบบที่แตกต่างกันให้กับผู้ใช้แต่ละรายเพื่อเปรียบเทียบได้
ก่อนดำเนินการต่อ ให้เพิ่มข้อมูลต่อไปนี้ลงในโค้ดการดาวน์โหลดโมเดลด้วย
Kotlin
FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
.addOnSuccessListener {
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
if (rcValue.source == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
FirebaseAnalytics.getInstance(this).logEvent("nondefault_model_downloaded", null)
}
}
Java
FirebaseModelManager.getInstance().downloadRemoteModelIfNeeded(remoteModel)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// If the model downloaded was specified by a remote parameter, log an
// event, which will be our experiment's activation event.
if (rcValue.getSource() == FirebaseRemoteConfig.VALUE_SOURCE_REMOTE) {
FirebaseAnalytics.getInstance(YourActivity.this)
.logEvent("nondefault_model_downloaded", null);
}
}
});
โค้ดด้านบนจะบันทึกเหตุการณ์ Analytics ที่กําหนดเองซึ่งคุณจะใช้เป็น
2. กำหนดเมตริกเป้าหมาย
ขั้นตอนถัดไปคือเลือกวิธีวัดความสําเร็จของโมเดล และตรวจสอบว่าแอปรวบรวมข้อมูลที่จําเป็นเพื่อทดสอบประสิทธิภาพของโมเดลเวอร์ชันต่างๆ ตามเมตริกนั้นได้ดีเพียงใด
A/B Testing มีเมตริกในตัวหลายรายการ ได้แก่ รายได้ การมีส่วนร่วมรายวัน และการคงผู้ใช้ไว้ เมตริกเหล่านี้มักมีประโยชน์สำหรับการทดสอบขั้นตอน UX ที่แตกต่างกันหรือการปรับแต่งพารามิเตอร์ แต่อาจไม่เหมาะสําหรับการประเมินโมเดลและกรณีการใช้งาน ในกรณีนี้ ให้ลองเพิ่มประสิทธิภาพสําหรับเหตุการณ์ Analytics ที่กําหนดเองแทน
โดยใช้ฟีเจอร์การค้นหาพืชด้วยภาพสมมติเป็นตัวอย่าง สมมติว่าคุณแสดงผลการค้นหาต่อผู้ใช้ตามลำดับความเชื่อมั่นของโมเดลในผลการค้นหาแต่ละรายการ วิธีหนึ่งในการดูความแม่นยำของโมเดลคือการดูความถี่ที่ผู้ใช้เปิดผลการค้นหาแรก
หากต้องการทดสอบว่ารูปแบบใดบรรลุเป้าหมายในการเพิ่มการคลิกผลการค้นหาสูงสุดได้ดีที่สุด คุณจะต้องบันทึกเหตุการณ์ที่กําหนดเองทุกครั้งที่ผู้ใช้แตะรายการแรกในรายการผลการค้นหา
Kotlin
FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)
Java
FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);
เมตริกที่คุณทดสอบจะขึ้นอยู่กับวิธีที่แอปใช้โมเดลของคุณ
เมื่อถึงขั้นตอนนี้ คุณจะเผยแพร่แอปไปยัง Play Store ได้ แอปของคุณจะใช้รูปแบบเดิมต่อไป แต่โค้ด Remote Config และ Analytics ที่คุณเพิ่มจะช่วยให้คุณทดสอบรูปแบบต่างๆ ได้โดยใช้คอนโซล Firebase เท่านั้น
3. ทำการทดสอบ A/B Testing
เมื่อแอปอยู่ในมือของผู้ใช้และรวบรวมข้อมูลวิเคราะห์แล้ว ให้สร้างA/B Testingการทดสอบที่ทดสอบผลของการใช้รูปแบบใหม่แทนรูปแบบปัจจุบัน
วิธีสร้างการทดสอบ
-
ในหน้าเหตุการณ์ของคอนโซล Firebase ให้ยืนยันว่าคุณกําลังบันทึกเหตุการณ์ Analytics ที่เกี่ยวข้อง ได้แก่ เหตุการณ์การเปิดใช้งานและเมตริกเป้าหมาย
แอปของคุณต้องบันทึกเหตุการณ์แต่ละรายการอย่างน้อย 1 ครั้งก่อนจึงจะปรากฏในคอนโซล Firebase
-
เปิดส่วน A/B Testing ในคอนโซล Firebase
-
สร้างการทดสอบใหม่
คลิกสร้างการทดสอบ > 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
และอัปเดตโมเดลที่รวมไว้หากคุณใช้ อย่างไรก็ตาม ผู้ใช้ของคุณใช้โมเดลล่าสุดอยู่แล้ว คุณจึงสามารถพุชการอัปเดตนี้เป็นส่วนหนึ่งของแอปที่เผยแพร่ได้ทุกเมื่อที่สะดวก เช่น เมื่อทำการอัปเดตฟีเจอร์ครั้งถัดไป