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 הפרמטר, כמו בדוגמא הבאה:

קוטלין+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.
      // ...
    }
}

ג'אווה

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

קוטלין+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

ג'אווה

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

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

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

קוטלין+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)
        }
    }

ג'אווה

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 מותאם אישית.

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

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

קוטלין+KTX

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

ג'אווה

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

המדד שאתה בודק בסופו של דבר תלוי באופן שבו האפליקציה שלך משתמשת במודל שלך.

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