Google 致力于为黑人社区推动种族平等。查看具体举措
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

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 ดังตัวอย่างต่อไปนี้:

รวดเร็ว

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 :

รวดเร็ว

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

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

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

รวดเร็ว

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

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

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

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

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

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

รวดเร็ว

Analytics.logEvent("first_result_opened", parameters: nil)

วัตถุประสงค์ -C

[FIRAnalytics logEventWithName:@"first_result_opened" parameters:nil];

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

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

3. ทำการทดสอบ A / B

ตอนนี้แอปของคุณอยู่ในมือผู้ใช้และกำลังรวบรวมข้อมูลการวิเคราะห์สร้างการทดสอบ 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) เนื่องจากในแอปของคุณคุณกำลังทดสอบว่าคุณกำลังใช้ค่าระยะไกล)

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