ویرگول
ورودثبت نام
رضا کشاورز
رضا کشاورزرضا کشاورزم. یک تحلیلگر داده که مغزش همیشه درحال تحلیل جهان پیرامونشه. از تحلیل داده و هوش مصنوعی می نویسم اینجا.
رضا کشاورز
رضا کشاورز
خواندن ۱۰ دقیقه·۲ ماه پیش

الفبای A/B testing

این‌روزها دیگه تقریبا همه از اهمیت تصمیم‌گیری داده-محور با خبرن. کسب و کارها تلاش می‌کنن از داده‌ای که توسط محصولشون تولید می‌شه استفاده کنن تا فرایندهاشون رو بهینه‌ و سود دهیشون رو بیشتر کنن.

توی کسب و کارهای آنلاین، یه دغدغه همیشگی اینه که چطور محصول یا خدمات رو بهینه کنیم. مخصوصا وقتی که قراره با آدم‌ها تعامل داشته باشیم،‌ یه چالش اینه که نمی‌دونیم واکنششون نسبت به کارها و ایده‌های ما چطور می‌تونه باشه. توی این مطلب می خوایم ببینیم که چطور می‌شه ایده هامون رو به صورت داده-محور ارزیابی کنیم.

مثلا توی یکتانت یه دغدغه هست: از بین آدم‌هایی که وارد صفحه اصلی وبسایت یکتانت می‌شن، درصد بالاییشون ثبت نام نمی‌کنن. عده‌ای بعد از یه نگاه به کلیت صفحه، می‌رن و دیگه برنمی‌گردن. درصورتی که اگر ثبت نام کنن، مشاوران یکتانت می تونن باهاشون ارتباط بگیرن و بهشون توی رسیدن به هدفشون کمک کنن. این در نهایت هم مشتری رو خوشحال‌تر می‌کنه، هم یکتانت رو.

برای حل این مسئله، یه ایده مطرح شد: بیایم بریم سراغ رنگ شناسی. آیا اگر رنگ دکمه ثبت نام بالای صفحه رو تغییر بدیم به یه رنگ موثرتر، مثلا سبز مغز پسته ای، می‌تونیم تعداد بیشتری از مراجعان سایت رو ترغیب به ثبت نام کنیم؟ از اونجایی که نمی‌شه این ایده رو درجا رد یا تایید کرد، باید یه راهی پیدا کنیم که راه حل‌مون رو آزمایش کنیم. برای این کار،‌ اولین چیزی که به ذهنمون می‌رسه اینه که بریم این تغییر رو اعمال کنیم و یه مدتی بذاریم دکمه ثبت نام سایتمون سبز باشه. بعد مقایسه کنیم ببینیم این تغییر تاثیر مطلوبی داشته یا نه. مشکل اصلی این راه حل اینه که اگر هم نتیجه بهتر بشه، نمی‌تونیم ادعا کنیم این تغییر متاثر از تغییر ماست و عوامل جانبی روی موضوع تاثیر ندارن. شاید همزمان با تغییر ما، یه جای دیگه هم تغییری داده شده و بخاطر اونه که آدم‌های بیشتری دارن ثبت نام می کنن. مثلا ممکنه همزمان با ما، یه فیچر جدید مثل "لاگین با گوگل" به سیستم اضافه شده باشه که کار رو راحت‌تر می‌کنه و باعث میشه نرخ ثبت نام بره بالا.

اما راه بهتر چیه؟ برای اینکه تست ما مشکلات بالا رو نداشته باشه، یه روش ابداع شده به اسم A/B testing که به طور کلی فرایندش اینه:

  • اول تصمیم بگیریم چه تغییری رو می‌خوایم اعمال کنیم.

  • از بین همه کاربرهای وبسایتمون ۲ گروه رو به صورت تصادفی انتخاب کنیم.

  • به یه گروه، نسخه ای از سایت رو نشون بدیم که اون تغییر ما رو داره (نسخه جدید)، به اون یکی گروه‌، نسخه قبلی رو

  • در نهایت نسخه‌ها رو با هم مقایسه کنیم. اگر نسخه تغییر یافته، عملکرد بهتری از نسخه فعلی ما داشت،‌ می‌تونیم اون نسخه رو جایگزین کنیم.

در ادامه این مطلب قراره درباره هر کدوم از مراحل بالا یه سری نکته یاد بگیریم، از جمله اینکه:

  • چطوری مسئله رو به فرمتی بیان کنیم که بتونیم تستش کنیم.

  • چطوری گروه‌های تستمون رو انتخاب کنیم که مطمئن باشیم نماینده خوبی از کل جامعه هستن. (نمونه گیری)

  • چطوری نتیجه رو بررسی کنیم و ازش استنتاج کنیم.

اینها دغدغه‌هایی هستن که توی A/B test های مختلف به شکل های مختلف مطرح میشن و باید یه گوشه چشم بهشون داشته باشیم.

قدم اول: تکلیف خودمونو مشخص کنیم

وقتی می‌خوایم ایده تغییر رنگ دکمه ثبت نام رو تست کنیم‌، اولین سوال اینه: بهتر بودن یعنی چی؟ در چه صورتی می‌تونیم بگیم که رنگ سبز نتیجه بهتری می‌ده. اینجا باید برگردیم به اول صحبتمون: چرا تصمیم گرفتیم رنگ دکمه رو تغییر بدیم؟ چون می‌خواستیم آدم‌های بیشتری ترغیب به ثبت نام بشن. پس الان باید دو گروه رو از این لحاظ مقایسه کنیم. یه معیار مناسب می‌تونه نرخ تبدیل باشه. توی هر گروه، چند درصد از آدم‌هایی که وارد صفحه اصلی شدن، ثبت نام کردن؟ این معیاریه که باید اندازه گیری کنیم.

قدم دوم: گروه الف و ب

حالا باید تعدادی آدم رو انتخاب کنیم برای تست. نمی خوایم‌تست رو روی تمام مخاطبین سایتمون انجام بدیم. ترجیحمون اینه که تست رو روی درصد کمی از مخاطبا اجرا کنیم. دو گروه رو کاملا تصادفی از بین همه مخاطبامون انتخاب می کنیم. این دو گروه باید از هر لحاظ مثل هم باشن و هیچکس هم نباید توی هر دو گروه باشه. رعایت این شرط‌ها برای اینکه استنتاج از تست قابل اتکا باشه‌،‌ ضروریه.

دغدغه ای که اینجا مطرحه اینه که چند نفر باید توی هر گروه باشن؟ آیا اصلا مهمه که چه تعداد آدم میفتن توی گروه‌های تست و کنترل ما؟

بله. تعداد اینجا مهمه. حقیقت اینه که هرچی جامعه‌ای که داریم روش تست می‌کنیم بزرگتر باشه نتیجه تست ما قابل اتکاتر میشه. ولی با این فرمون نمی‌شه پیش رفت. رویکرد بهتر اینه که سوال رو برعکس کنیم: حداقل چند نفر باید توی هر گروه داشته باشیم تا کیفیت تستمون خوب باشه؟

برای پیدا کردن این عدد مطلوب،‌ لازمه که چند تا پارامتر مختلف رو بدونیم.

  • نرخ تبدیل فعلی ما:‌ این عدد رو با یه حساب کوچولو می‌تونیم تخمین بزنیم.

  • حداقل میزان تغییر قابل اندازه‌گیری و با معنی برای ما: اگر نرخ ثبت نام تغییر کرد، تا چه اندازه از تبدیل رو می‌تونیم اندازه بگیریم و بگیم این تغییر محسوس و معناداره؟ ۱ درصد؟ ۰.۱ درصد؟‌ ۰.۰۰۱ درصد؟‌

  • حداکثر خطای قابل قبول: چه احتمالی از خطای نتیجه گیری رو قابل قبول می‌دونیم.

با استفاده از این سه موردی که ذکر شد،‌ و یه فرمول ساده، میشه حداقل اندازه نمونه رو به دست آورد. اگر کنجکاوید که یه دو دو تا چهارتا بکنید برای خودتون،‌ می‌تونید از این ماشین حساب استفاده کنید: ماشین حساب برای محاسبه اندازه گروه‌های تست

قدم سوم: اجرای آزمایش

حالا وقتشه که بریم سراغ اصل قضیه. تا اینجا ما دو گروه تصادفی از کاربرهامون رو انتخاب کردیم. به یکی از این دو گروه، قراره نسخه تغییر یافته سایتمون رو نشون بدیم. به این گروه میگیم گروه تست (Experiment Group). حالا اون یکی گروه برای چیه؟ به اون میگیم گروه کنترل (Control Group). هدف از انتخاب گروه کنترل اینه که بتونیم نتیجه حاصل از تغییر رو با نسخه فعلی مقایسه کنیم. نکته دیگه اینه که این گروه نباید در معرض تغییرات دیگه‌ای که ممکنه توی محصول داده بشه، قرار بگیرن.

وقتی که تست رو شروع کردیم و یه گروه در معرض نسخه جدید و اون یکی گروه در معرض نسخه قبلی قرار گرفتن، یه سوال پیش میاد: تا کی صبر کنیم؟ یک ساعت؟ یک روز یا یک ماه؟ در قدم اول باید اونقدری صبر کنیم تا به اون اندازه حداقلی که قبل از تست محاسبه کردیم، برسیم. علاوه بر این،‌ باید تستمون رو اونقدر طولانی اجرا کنیم تا عاملهای مقطعی نتونن روی نتیجه تاثیر بذارن. مثلا آیا می‌تونیم تست رو از ساعت ۱ تا ۴ صبح اجرا کنیم و بعد بپریم سراغ نتیجه گیری؟ نه. مشکل اینکار اینه که آدم‌هایی که ساعت ۱ تا ۴ صبح فعالیت آنلاین دارن، نماینده خوبی از جامعه نیستن، چون همه جامعه توی این ساعت بیدار نیست و ما می‌خوایم تستمون رو روی نماینده‌ی مناسبی از کل مخاطبامون داشته باشیم، نه فقط یه گروه خاص. با این اوصاف بهتره که تستمون یه مدت معقولی اجرا بشه. حتی باید حواسمون به روزهای خاص هم باشه. روزهای تعطیل مثلا :)

قدم چهارم: تحلیل نتایج

خب حالا می‌ریم و مقایسه می‌کنیم و می بینیم که نرخ تبدیلی که حرفشو زدیم،‌ برای گروه تست ما، که دکمه سبز رنگ رو دیده بودن، از گروه کنترلمون، ۳ درصد بیشتره. می‌تونیم بگیم که رنگ سبز بهتره؟ نه. درواقع هنوز نه. یک مورد دیگه هست که باید بررسی بشه.قضیه اینه که ما نمی‌دونیم این عملکرد بهتر گروه تست بخاطر بهتر بودن رنگ سبزه، یا این که صرفا شانسیه. از کجا معلوم اگر تست رو تکرار کنیم، باز هم همین نتیجه تکرار بشه؟ اینجا دو کار می‌شه کرد:‌ راه اول اینه که تست رو چند بار دیگه تکرار کنیم و ببینیم آیا همین نتیجه حاصل می‌شه دوباره. این راه شاید ساده و جذاب باشه،‌ ولی خیلی مواقع شدنی نیست. دلایل اصلیش هم یکی هزینه تسته و یکی بحث زمان. راه حل دوم اما گزینه بهتریه. می‌ریم سراغ علم جذاب آمار. اینجا باید بررسی کنیم که این تفاوت مشاهده شده از نظر آماری چقدر معنی دار و قابل اتکاست. برای اینکار یه مفهوم آماری هست به اسم p-value.

به طور خلاصه، p-value به ما می‌گه که این تفاوتی که بین دو گروه داریم می‌بینیم،‌ چقدر ممکنه متاثر از شانس باشه. باید مقدار p-value رو با استفاده از دیتای حاصله از تستمون محاسبه کنیم. هرچقدر که این مقدار کوچکتر باشه، نتیجه تست قابل اتکاتره. مقدار ۰.۰۵ یا کمتر از اون رو می‌شه مقدار قابل قبولی دونست. اگر p-value از ۰.۰۵ کمتر باشه، می‌تونیم نتیجه بگیریم که تفاوتی که بین دو گروه دیدیم، از نظر آماری معنادار حساب می‌شه. حالا این ۰.۰۵ یعنی چی؟ یعنی حتی اگر کاری که کردیم بی تاثیر بوده باشه واقعا، ۵ درصد احتمال داره که بازم این تفاوت رو مشاهده کنیم. ساده‌ترش اینه که ۵ درصد احتمال داره که این نتیجه ای که توی تست دیدیم،‌ متاثر از شانس بوده باشه، و نه حاصل اون کاری که ما کردیم. حالا چرا هی مقدار ۵ صدم رو دارم تکرار‌می کنم؟‌ این یه آستانه مورد توافقه بین متخصصای آمار و آدم‌هایی که از A/B testing استفاده می کنن. اگر مقدار p-value بالاتر از ۰.۰۵ باشه،‌ نمیشه به اون تفاوتی که بین دو گروه مشاهده شده تکیه کرد. اگر بخوایم محتاطانه‌تر عمل کنیم می تونیم مقدار p-value رو کمتر در نظر بگیریم. مثلا ۰.۰۱ یه مقدار سختگیرانه حساب میشه. یه اثر جانبی کمتر کردن p-value مورد قبول،‌ اینه که مجبورمون می کنه اندازه نمونه مون رو ببریم بالاتر. اگر دوست دارید از این مفهوم بیشتر بدونید، آخر این مطلب یه خبر خوب براتون داریم :)

دیگه کجاها می‌شه از A/B testing استفاده کرد؟

جاهایی که می‌شه از A/B testing استفاده کرد خیلی وسیع و متنوعن. اینجا می‌تونم چند تا مثال ساده بزنم:

  • وقتی که می‌خوایم یه کمپین تبلیغات کلیکی داشته باشیم، ولی نمی‌دونیم چه تیتری می‌تونه نرخ کلیک بهتری برای ما بیاره.

  • وقتی که می‌خوایم صفحه فرودی (Landing page) که برای کمپین تبلیغاتیمون استفاده می‌کنیم رو بهتر کنیم تا نتیجه بهتری بگیریم.

  • وقتی که می خوایم استفاده از محصولمون رو برای کاربرها ساده‌تر کنیم تا تجربه کاربری بهتری داشته باشن.

  • وقتی برای سایتمون یه سیستم پیشنهاد دهنده جدید توسعه دادیم و می‌خوایم ببینیم پیشنهادهای این سیستم جدید از نسخه قبلی بهتر هست یا نه.

کجا نباید از A/B testing استفاده کرد؟

به طور کلی، A/B testing جاهایی کاربرد داره که می‌خوایم نتیجه یه تغییر جزئی رو بررسی کنیم. وقتی که می‌خوایم تغییرات عمده بدیم به محصول، یا با دو پدیده کلا متفاوت مواجهیم، این تست نتیجه خوبی به ما نمی‌تونه بده. مثلا یه تغییر کوچیک توی رابط کاربری رو می‌شه با A/B testing سنجید، اما وقتی کل محصول رو از اول طراحی کردیم،‌ نمی‌تونیم برای مقایسه، سراغ A/B testing بریم. دلیل این قضیه اینه که یه تغییر بزرگ، خیلی وقتها در عمل مجموعه ای از تغییرات کوچیکه. و خب توی این موقعیت نمی تونیم تشخیص بدیم بهبودی که مشاهده می‌شه، بخاطر کدوم یکی از اینهاست.

یه نکته دیگه درباره تغییرات بزرگ هست که خیلی باید حواسمون بهش باشه. آدم‌ها خیلی وقتها درمقابل تغییر گارد دارن. وقتی که مثلا می‌آیم و کل سایتمون رو از اول طراحی می‌کنیم، ممکنه واقعا بهتر شده باشه همه چیز و تجربه بهتری برای کاربرها بسازه، ولی چون در روزهای اول آدم‌ها همچنان عادت دارن به نسخه قبلی، ممکنه نتایجی که مشاهده می‌کنیم در روزهای اول چندان مطلوب نباشه.

در باب اهمیت اصولی انجام دادن A/B testing

ابزاری مثل A/B testing می‌تونه به تصمیم گیرنده ها کمک های زیادی بکنه و تا حد زیادی از عدم قطعیتی که تصمیم‌گیرنده‌ها باهاش مواجهن، کم کنه. اما در طرف مقابل، مثل هر پدیده دیگه‌ای در این دنیا، A/B testing هم اگر درست و اصولی انجام نشه، می‌تونه باعث تصمیم‌گیری غلط و در نهایت به خطر انداختن کسب و کار بشه.

برای انجام یه تست خوب، نیاز به تخصص های مختلفی داریم. از یک طرف توی طراحی تست خیلی مهمه که نظر آدمی با تجربه بیزنسی رو بپرسیم، از طرف دیگه، موقع تحلیل تست هم لازمه که حتما با یه تحلیلگر داده مشورت کنیم. بدون در نظر گرفتن هر یک از دو سر این طیف، تست ما غیر قابل اتکا میشه.

سخن آخر

توی این مطلب سعی شد که یه معرفی ساده و خودمونی از A/B testing و کاربردهاش ارائه بشه. در هر کدوم از قسمتهایی که حرفش رو زدیم،‌ می‌شه خیلی عمیق‌تر شد. برای طراحی تست باید نکاتی رو رعایت کنیم که کیفیتش بالا بره. موقع اجرای تست باید حواسمون به یه سری موارد باشه. از همه مهمتر، برای تحلیل تست باید از دنیای آمار هم کمک بگیریم و نیاز به علمش داریم. و خب این بهونه منه که یه مطلب دیگه هم درباره A/B testing داشته باشیم، فقط این دفعه عمیق‌تر. اگر برای شما هم جذابیت داره، توی کامنت‌ها بهم بگید.

برای اینکه مطالب بعدی از دستتون در نره، کافیه که اینجا من رو دنبال کنید. برای اینکار می تونید از دکمه "دنبال کردن" پایین این پست استفاده کنید.

درباره نویسنده

من رضا کشاورزم، تحلیل‌گر ارشد داده در یکتانت. برای ارتباط بیشتر با من می تونید به آدرس rezakm[@]proton[dot]me ایمیل بدید یا اینکه از لینکدینم استفاده کنید:‌ رضا کشاورز معتمدی.


تستتجربه کاربریعلم دادهتحلیل دادهپایتون
۰
۰
رضا کشاورز
رضا کشاورز
رضا کشاورزم. یک تحلیلگر داده که مغزش همیشه درحال تحلیل جهان پیرامونشه. از تحلیل داده و هوش مصنوعی می نویسم اینجا.
شاید از این پست‌ها خوشتان بیاید