پس از آموزش یک مدل سفارشی جدید، میتوانید A/B Testing استفاده کنید تا ببینید مدل جدید در شرایط دنیای واقعی، در مقایسه با مدلی که قبلاً استفاده میکنید، چقدر خوب عمل میکند. پس از تأیید اینکه مدل جدید شما بهبود یافته است، میتوانید به راحتی مدل جدید را بدون نیاز به بهروزرسانی برنامه، برای همه کاربران خود منتشر کنید.

این صفحه نشان میدهد که چگونه میتوانید یک تست A/B انجام دهید که دو نسخه از یک مدل را ارزیابی میکند که یک ویژگی جستجوی بصری فرضی گیاهان را پشتیبانی میکند. این ویژگی از یک مدل برچسبگذاری تصویر سفارشی برای کمک به کاربران در شناسایی گونههای گیاهی از تصاویر آنها استفاده میکند.
فرض کنید به تازگی یک مدل برچسبگذاری گیاه جدید، plant_labeler_v2 ، منتشر کردهاید و میخواهید آزمایشی اجرا کنید که آن را با مدل فعلی شما، به نام plant_labeler_v1 ، مقایسه کند. مراحل زیر نحوه تنظیم آزمایش، اجرای آن و انجام اقدامات لازم بر روی نتایج را نشان میدهد.
۱. مدل خود را از راه دور قابل پیکربندی کنید
اولین قدم برای تست 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/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/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 را ثبت میکند که بعداً به عنوان رویداد آزمایش خود از آن استفاده خواهید کرد.
۲. یک معیار هدف تعیین کنید
مرحله بعدی این است که تصمیم بگیرید چگونه موفقیت مدل خود را اندازهگیری خواهید کرد و مطمئن شوید که برنامه شما دادههای لازم را برای آزمایش میزان عملکرد نسخههای مختلف مدل بر اساس آن معیار جمعآوری میکند.
A/B Testing چندین معیار داخلی دارد، از جمله درآمد، تعامل روزانه و حفظ کاربر. این معیارها اغلب برای آزمایش جریانهای مختلف UX یا تنظیم دقیق پارامترها مفید هستند، اما ممکن است برای ارزیابی مدل و مورد استفاده شما منطقی نباشند. در این شرایط، میتوانید به جای آن، بهینهسازی را برای یک رویداد تحلیلی سفارشی امتحان کنید.
با استفاده از ویژگی جستجوی بصری گیاهان فرضی به عنوان مثال، فرض کنید نتایج جستجو را به ترتیب اطمینان مدل به هر نتیجه به کاربر خود ارائه میدهید. یکی از راههایی که میتوانید از دقت مدل خود مطلع شوید، بررسی این است که کاربران چند بار اولین نتیجه جستجو را باز کردهاند.
برای آزمایش اینکه کدام مدل به بهترین شکل به هدف حداکثر کردن کلیکهای نتایج برتر دست مییابد، هر زمان که کاربر روی اولین مورد در لیست نتایج ضربه میزند، یک رویداد سفارشی را ثبت میکنید.
Kotlin
FirebaseAnalytics.getInstance(this).logEvent("first_result_opened", null)
Java
FirebaseAnalytics.getInstance(YourActivity.this).logEvent("first_result_opened", null);
معیاری که برای آن تست میکنید در نهایت به نحوه استفاده برنامه شما از مدل بستگی دارد.
در این مرحله، میتوانید برنامه خود را در فروشگاه Play مستقر کنید. برنامه شما همچنان از مدل اصلی شما استفاده خواهد کرد، اما کد Remote Config و Analytics که اضافه کردهاید به شما امکان میدهد مدلهای مختلف را فقط با استفاده از کنسول Firebase آزمایش کنید.
۳. یک A/B Testing اجرا کنید
حالا که اپلیکیشن شما در دست کاربران است و دادههای تحلیلی را جمعآوری میکند، یک آزمایش A/B Testing ایجاد کنید که تأثیر استفاده از مدل جدید شما به جای مدل فعلی را بررسی کند.
برای ایجاد آزمایش:
در صفحه رویدادهای کنسول Firebase ، تأیید کنید که رویدادهای مربوط به Analytics را ثبت میکنید: رویداد فعالسازی و معیار هدف.
برنامه شما باید هر رویداد را حداقل یک بار قبل از نمایش در کنسول Firebase ثبت کند.
در کنسول Firebase ، بخش A/B Testing را باز کنید.
ایجاد یک آزمایش جدید:
روی ایجاد آزمایش > Remote Config کلیک کنید.
در بخش هدفگذاری :
- برنامه خود را از لیست انتخاب کنید
- مشخص کنید که میخواهید چند نفر از کاربرانتان را در آزمایش بگنجانید
- رویداد فعالسازی که ثبت وقایع آن را شروع کردهاید (در این مثال، nondefault_model_downloaded ) را انتخاب کنید.
در بخش اهداف ، معیار هدفی را که در بخش قبل تعیین کردید (در این مثال، first_result_opened ) از فهرست معیارهای هدف انتخاب کنید و هر معیار اضافی که میخواهید ردیابی کنید، مانند درآمد خرید یا کاربران بدون خرابی را انتخاب کنید.
در بخش متغیرها ، دو متغیر تعریف کنید:
- گروه کنترل (به صورت خودکار ایجاد میشود)
- برچسبگذار گیاهی آزمایشی
برای گروه کنترل ، یک پارامتر
plant_labeler_modelایجاد کنید و آن را رویplant_labeler_v1تنظیم کنید. کاربرانی که به گروه کنترل اختصاص داده شدهاند از مدل قدیمی استفاده خواهند کرد. (پارامتر را روی(no change)تنظیم نکنید، زیرا در برنامه خود، در حال آزمایش استفاده از یک مقدار از راه دور هستید.)برای نوع Experimental plant labeler ، پارامتر
plant_labeler_modelرا رویplant_labeler_v2تنظیم کنید (با فرض اینکه مدل جدید خود را با این نام منتشر کردهاید). کاربرانی که به این نوع اختصاص داده شدهاند، از مدل جدید استفاده خواهند کرد.

آزمایش را شروع کنید و بگذارید چند روز یا بیشتر ادامه یابد، تا زمانی که A/B Testing یک رهبر را اعلام کند. اگر آزمایش نتواند یک رهبر را تعیین کند، ممکن است لازم باشد آزمایش را به کاربران بیشتری گسترش دهید .
۴. نوع برنده را برای همه کاربران منتشر کنید

پس از اینکه A/B Testing اطلاعات کافی برای اعلام یک گزینه پیشرو - در این مورد، گزینهای که بیشترین کلیک را در نتایج جستجو داشته است - جمعآوری کرد، میتوانید تصمیم بگیرید که آیا گزینه برنده (یا گزینه دیگری) را برای همه کاربران خود منتشر کنید یا خیر.
در بخش A/B Testing کنسول Firebase ، نمای جزئیات آزمایش تکمیلشده را باز کنید. از این نما، میتوانید ببینید که هر نوع آزمایش با توجه به معیار هدف شما و هر معیار ثانویهای که انتخاب کردهاید، چگونه عمل کرده است. با این اطلاعات، میتوانید تصمیم بگیرید که آیا نوع پیشرو را منتشر کنید یا نوع دیگری را.
برای انتشار یک نسخه برای همه کاربران، در صفحه جزئیات آزمایش روی more_vert > انتشار نسخه کلیک کنید. پس از انجام این کار، مقدار پارامتر plant_labeler_model برای همه کاربران plant_labeler_v2 خواهد بود.
در بهروزرسانیهای بعدی برنامه، باید مقدار پیشفرض پارامتر plant_labeler_model را به plant_labeler_v2 تغییر دهید و در صورت استفاده از مدل همراه، آن را بهروزرسانی کنید. با این حال، کاربران شما در حال حاضر از آخرین مدل استفاده میکنند، بنابراین میتوانید این بهروزرسانی را به عنوان بخشی از برنامه منتشر شده، هر زمان که مناسب باشد، مانند زمانی که بهروزرسانی بعدی یک ویژگی را انجام میدهید، اعمال کنید.