Firebase is back at Google I/O on May 10! Register now

การทดสอบ A/B สองเวอร์ชันของโมเดล

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

หลังจากที่คุณฝึกโมเดลแบบกำหนดเองใหม่หรือโมเดล 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 ในโค้ดการเริ่มต้นแอป ดังในตัวอย่างต่อไปนี้:

Kotlin+KTX

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+KTX

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/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/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/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 สามารถกำหนดแบบจำลองต่างๆ ให้กับผู้ใช้ที่แตกต่างกันเพื่อวัตถุประสงค์ในการเปรียบเทียบ

ก่อนที่คุณจะดำเนินการต่อ ให้เพิ่มสิ่งต่อไปนี้ในรหัสดาวน์โหลดแบบจำลองของคุณ:

Kotlin+KTX

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

2. กำหนดตัวชี้วัดเป้าหมาย

ขั้นตอนต่อไปคือการตัดสินใจว่าคุณจะวัดความสำเร็จของโมเดลของคุณอย่างไร และเพื่อให้แน่ใจว่าแอปของคุณกำลังรวบรวมข้อมูลที่จำเป็นเพื่อทดสอบว่าเวอร์ชันต่างๆ ของโมเดลทำงานได้ดีเพียงใดตามเมตริกนั้น

การทดสอบ A/B มีเมตริกในตัวหลายตัว รวมถึงรายได้ การมีส่วนร่วมรายวัน และการรักษาผู้ใช้ เมตริกเหล่านี้มักมีประโยชน์สำหรับการทดสอบโฟลว์ UX หรือพารามิเตอร์การปรับแต่งต่างๆ แต่อาจไม่สมเหตุสมผลสำหรับการประเมินโมเดลและกรณีการใช้งานของคุณ ในสถานการณ์นี้ คุณสามารถลองเพิ่มประสิทธิภาพสำหรับเหตุการณ์ Analytics ที่กำหนดเองแทนได้

การใช้คุณลักษณะการค้นหาภาพโดยสมมุติฐานเป็นตัวอย่าง สมมติว่าคุณนำเสนอผลการค้นหาต่อผู้ใช้ของคุณตามลำดับความเชื่อมั่นของแบบจำลองในแต่ละผลลัพธ์ วิธีหนึ่งที่คุณจะได้ทราบถึงความแม่นยำของแบบจำลองของคุณก็คือการดูจากความถี่ที่ผู้ใช้เปิดผลการค้นหาแรก

ในการทดสอบว่าโมเดลใดบรรลุเป้าหมายในการเพิ่มจำนวนการคลิกผลลัพธ์สูงสุด คุณจะต้องบันทึกเหตุการณ์ที่กำหนดเองทุกครั้งที่ผู้ใช้แตะรายการแรกในรายการผลลัพธ์

Kotlin+KTX

FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)

Java

FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);

เมตริกที่คุณทดสอบในท้ายที่สุดจะขึ้นอยู่กับวิธีที่แอปใช้โมเดลของคุณ

ณ จุดนี้ คุณสามารถทำให้แอปของคุณใช้งานได้ใน Play Store แอปของคุณจะยังคงใช้โมเดลดั้งเดิมของคุณ แต่โค้ดการกำหนดค่าระยะไกลและโค้ด Analytics ที่คุณเพิ่มเข้าไปจะช่วยให้คุณทดสอบกับโมเดลต่างๆ โดยใช้คอนโซล Firebase เท่านั้น

3. เรียกใช้การทดสอบ A/B Testing

เมื่อแอปของคุณอยู่ในมือของผู้ใช้และกำลังรวบรวมข้อมูลการวิเคราะห์ ให้สร้างการทดสอบการทดสอบ A/B ที่ทดสอบผลกระทบของการใช้โมเดลใหม่ของคุณแทนโมเดลปัจจุบัน

ในการสร้างการทดสอบ:

  1. ในหน้า เหตุการณ์ ของคอนโซล Firebase ให้ตรวจสอบว่าคุณกำลังบันทึกเหตุการณ์ Analytics ที่เกี่ยวข้อง: เหตุการณ์การเปิดใช้งานและเมตริกเป้าหมาย

    แอปของคุณต้องบันทึกแต่ละเหตุการณ์อย่างน้อยหนึ่งครั้งก่อนที่จะปรากฏในคอนโซล Firebase

  2. ในคอนโซล Firebase ให้เปิดส่วน การทดสอบ A/B

  3. สร้างการทดสอบใหม่:

    1. คลิก สร้างการทดสอบ > การ กำหนดค่าระยะไกล

    2. ในส่วน การกำหนดเป้าหมาย :

      • เลือกแอปของคุณจากรายการ
      • ระบุจำนวนผู้ใช้ที่คุณต้องการรวมไว้ในการทดสอบ
      • เลือกเหตุการณ์การเปิดใช้งานที่คุณเริ่มบันทึก (ในตัวอย่างนี้ nondefault_model_downloaded )
    3. ในส่วน เป้าหมาย ให้เลือกเมตริกเป้าหมายที่คุณกำหนดไว้ในส่วนก่อนหน้า (ในตัวอย่างนี้ first_result_opened ) จากรายการเมตริกเป้าหมาย และเลือกเมตริกเพิ่มเติมที่คุณต้องการติดตาม เช่น รายได้จากการซื้อหรือผู้ใช้ที่ไม่มีข้อขัดข้อง

    4. ในส่วน ตัว เลือกสินค้า ให้กำหนดสองตัวเลือก:

      • กลุ่มควบคุม (สร้างโดยอัตโนมัติ)
      • เครื่องติดฉลากพืชทดลอง

      สำหรับ กลุ่มควบคุม ให้สร้างพารามิเตอร์ plant_labeler_model และตั้งค่าเป็น plant_labeler_v1 ผู้ใช้ที่กำหนดให้กับกลุ่มควบคุมจะใช้รุ่นเก่า (อย่าตั้งค่าพารามิเตอร์เป็น (no change) เนื่องจากในแอปของคุณ คุณกำลังทดสอบว่าคุณกำลังใช้ค่าระยะไกล)

      สำหรับตัวแปร plant_labeler_model รุ่น ทดลอง ให้ตั้งค่าพารามิเตอร์ plant_labeler_model เป็น plant_labeler_v2 (สมมติว่าคุณเผยแพร่โมเดลใหม่ของคุณภายใต้ชื่อนั้น) ผู้ใช้ที่กำหนดให้กับตัวแปรนี้จะใช้โมเดลใหม่

    หน้าจอการกำหนดค่าการทดสอบ A/B

เริ่มการทดสอบและปล่อยให้ทำงานเป็นเวลาหลายวันหรือนานกว่านั้น จนกว่าการทดสอบ A/B จะประกาศผู้นำ หากการทดสอบไม่สามารถระบุผู้นำได้ คุณอาจต้อง ขยายการทดสอบไปยังผู้ใช้จำนวนมากขึ้น

4. เปิดตัวตัวแปรที่ชนะให้กับผู้ใช้ทุกคน

บัตรผลการทดสอบ A/B

หลังจากการทดสอบ A/B ได้รวบรวมข้อมูลเพียงพอที่จะประกาศผู้นำ ในกรณีนี้ ตัวแปรที่เพิ่มจำนวนคลิกของผลการค้นหาอันดับต้นๆ สูงสุด คุณสามารถตัดสินใจได้ว่าจะเปิดตัวรูปแบบที่ชนะ (หรือรูปแบบอื่น) ให้กับผู้ใช้ทั้งหมดของคุณ

ในส่วน การทดสอบ A/B ของ คอนโซล Firebase ให้เปิดมุมมองรายละเอียดของการทดสอบที่เสร็จสมบูรณ์ จากมุมมองนี้ คุณสามารถดูประสิทธิภาพของแต่ละตัวแปรตามเมตริกเป้าหมายและเมตริกรองที่คุณเลือก ด้วยข้อมูลนี้ คุณสามารถตัดสินใจได้ว่าจะเปิดตัวตัวเลือกสินค้าชั้นนำหรือรุ่นอื่น

ในการเปิดตัวรูปแบบต่างๆ ให้กับผู้ใช้ทั้งหมด ให้คลิก > เปิดตัวรูปแบบ ต่างๆ ในหน้ารายละเอียดของการทดสอบ เมื่อคุณทำเช่นนั้น ค่าของพารามิเตอร์ plant_labeler_model จะเป็น plant_labeler_v2 สำหรับผู้ใช้ทั้งหมด

ในการอัปเดตแอปในอนาคต คุณควรเปลี่ยนค่าเริ่มต้นของพารามิเตอร์ plant_labeler_model เป็น plant_labeler_v2 และอัปเดตโมเดลที่รวมกลุ่มหากคุณใช้ ผู้ใช้ของคุณใช้รุ่นล่าสุดอยู่แล้ว ดังนั้นคุณจึงสามารถผลักดันการอัปเดตนี้โดยเป็นส่วนหนึ่งของแอปที่เผยแพร่เมื่อใดก็ได้ตามสะดวก เช่น เมื่อคุณทำการอัปเดตคุณลักษณะในครั้งถัดไป