Catch up on everthing we announced at this year's Firebase Summit. Learn more

בדיקת A / B שתי גרסאות של דגם

לאחר שתאמן דגם מותאם אישית חדש או דגם AutoML Vision Edge, תוכל להשתמש בבדיקות A/B כדי לראות עד כמה הדגם החדש מתפקד בתנאים בעולם האמיתי, בהשוואה לדגם שאתה כבר משתמש בו. לאחר שתאשר שהדגם החדש שלך הוא שיפור, תוכל לגלגל את הדגם החדש בקלות לכל המשתמשים שלך, מבלי לדרוש עדכון אפליקציה.

דף זה מראה כיצד תוכל לבצע בדיקת A/B המעריכה שתי גרסאות של מודל המניע תכונה חיפושים של צמח חזותי היפותטי. תכונה זו משתמשת במודל תיוג תמונות מותאם אישית כדי לסייע למשתמשים לזהות מיני צמחים מתמונותיהם.

תניח שאתה פשוט פרסם מודל תיוג מפעל חדש, plant_labeler_v2 ואתה רוצה להריץ ניסוי המשווה אותה עם המודל הנוכחי שלך, בשם plant_labeler_v1 . השלבים שלהלן מראים כיצד להגדיר את הניסוי, להריצו ולפעול על התוצאות.

1. הפוך את הדגם שלך להגדרה מרחוק

השלב הראשון לבדיקת A/B בדגמים שלך הוא לשנות את האפליקציה שלך כדי להשתמש בפרמטר Config Remote כדי לקבוע באיזה דגם היא משתמשת. בתחילה, תגדיר את ערך ברירת המחדל של פרמטר זה להיות המודל שהאפליקציה שלך כבר משתמשת בו, אך מכיוון ששם המודל נשלט על ידי פרמטר הניתן להגדרה מרחוק, תוכל לשנות ולהתנסות במודלים שונים מבלי שתצטרך לדחוף עדכוני אפליקציות שלך משתמשים בכל פעם.

לכן, אם אתם שפורסמתם המודל הנוכחי שלך תחת השם 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()

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 הפרמטר:

מָהִיר

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

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/android/label-images-with-automl#configure-a-local-model-source
// https://firebase.google.com/docs/ml/android/use-custom-models#configure_a_local_model

כעת, כשהאפליקציה שלך משתמשת בפרמטר Config Remote כדי לקבוע איזה דגם יש לטעון, תוכל לשנות את המודל רק על ידי פרסום דגם חדש והקצאת שמו לפרמטר Config Remote. יכולת זו מאפשרת ל- A/B Testing להקצות דגמים שונים למשתמשים שונים לצורך השוואתם.

לפני שתמשיך, בצע גם את התוספת הבאה לקוד הורדת הדגם שלך:

מָהִיר

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 שתשתמש בו בהמשך כניסוי הניסוי שלך אירוע הפעלה . אירוע הפעלה הוא אירוע שהמשתמש חייב להפעיל לפני שהם נחשבים כחלק מהניסוי. זה מבטיח שמשתמשים לא יירשמו בבדיקת A/B שלך עד שהמכשיר שלהם יסיים להוריד את דגם ה- ML המותאם להם.

2. קבע מדד יעד

השלב הבא הוא להחליט כיצד תמדוד את הצלחת הדגם שלך, ולוודא שהאפליקציה שלך אוספת את הנתונים הדרושים כדי לבדוק עד כמה הביצועים של הגרסאות השונות על פי המדד הזה.

בדיקת A/B כוללת מספר מדדים מובנים, כולל הכנסה, מעורבות יומית ושימור משתמשים. מדדים אלה מועילים לעתים קרובות לבדיקת זרימות UX שונות או פרמטרים לכוונון עדין, אך ייתכן שהם לא הגיוניים להערכת המודל והשימוש במקרה שלך. במצב זה תוכל לנסות לבצע אופטימיזציה לאירוע Analytics מותאם אישית.

השתמש בתכונת החיפוש הצמחי החזותי היפותטי כדוגמה, נניח שהצגת למשתמש שלך תוצאות חיפוש לפי סדר הביטחון של המודל בכל תוצאה. אחת הדרכים שבהן תוכל לקבל מושג לגבי הדיוק של המודל שלך היא להסתכל על התדירות שבה משתמשים פתחו את תוצאת החיפוש הראשונה.

כדי לבדוק איזה דגם השיג בצורה הטובה ביותר את המטרה של מקסימום קליקים על התוצאות הטובות ביותר, היית רושם אירוע מותאם אישית בכל פעם שמשתמש הקש על הפריט הראשון ברשימת התוצאות.

מָהִיר

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

Objective-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. לחץ על צור ניסוי> Remote Config.

    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 Testing יצהיר כמוביל. אם הניסוי לא יכול לקבוע מנהיג, ייתכן שתצטרך להרחיב את הניסוי למשתמשים יותר .

4. הפק את הגרסה המנצחת לכל המשתמשים

כרטיס תוצאת בדיקת A/B

לאחר שבדיקת A/B אספה מספיק מידע בכדי להכריז על מנהיג - במקרה זה, הגרסה שהגדילה את מספר הקליקים המובילים לתוצאות החיפוש - תוכל להחליט אם להוציא את הגרסה הזוכה (או גרסה אחרת) לכל המשתמשים שלך.

במקטע בדיקת A / B של קונסולת Firebase , לפתוח את תצוגת הפרטים של הניסוי הושלם. מתצוגה זו, תוכל לראות כיצד כל וריאנט ביצע בהתאם לערך היעד שלך ולכל מדד משני שבחרת. בעזרת מידע זה, תוכל להחליט אם להפעיל את הגרסה המובילה או גרסה אחרת.

לרדד גרסה לכל המשתמשים, לחץ > מרדדים וריאנט בדף פרטי של הניסוי. לאחר שתעשה זאת, הערך של plant_labeler_model הפרמטר יהיה plant_labeler_v2 עבור כל המשתמשים.

בעדכון אפליקציה בעתיד, אתה צריך לשנות את ערך ברירת המחדל של plant_labeler_model פרמטר plant_labeler_v2 ולעדכן את המודל ארוז אם אתה משתמש אחד. עם זאת, המשתמשים שלך כבר משתמשים בדגם העדכני ביותר, כך שתוכל לדחוף את העדכון הזה כחלק מהאפליקציה שפורסמה מתי שנוח לך, כמו למשל בפעם הבאה שתבצע עדכון תכונה.