Uncategorized

למה חלוקה אקראית לא תמיד מספיקה – ואיך קיופד משפר ניסויי אי\בי טסט

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

אבל כל מי שהריץ ניסויים במוצרים בהם ליוזרים יש היסטוריית שימוש ארוכה במוצר (אפליקציות, משחקים, SaaS) מכיר את הבעיה הבאה: כשמסתכלים על התקופה שלפני תחילת הטסט, מגלים לא פעם שקיימים פערים משמעותיים בדאטה בתקופת ״הלפני״ בין קבוצת הביקורת וקבוצת הטיפול. בהינתן הנחה סופר-סבירה שיש מתאם חזק בין עבר לעתיד – התעלמות מהפער הזה היא פשוט אובדן דאטה.


בואו נוריד את זה לקרקע

ניקח מדגם של 100,000 יוזרים ממשחק (ששמו ישמר במערכת)
על כל יוזר אספתי:

  • הכנסות שבועיים אחורה – תקופת ״הלפני״
  • הכנסות שבועיים קדימה – תחילת “הטסט

בסופו של דבר יש לנו טבלה פשוטה עם מאה אלף שורות ושלוש עמודות :
user_id, revenue_before, revenue_after

השלב הראשון והקל:
בדיקת מתאם פירסון בין התקופה שלפני לתקופה שאחרי. התוצאה הלא מפתיעה- מתאם גבוה של  0.72


עכשיו נוכיח שיש בעיה

נבצע סימולציה של 10,000 “טסטים” באופן כזה שכל ״טסט״ היא למעשה חלוקה אקראית חדשה של המדגם לקבוצת ביקורת וקבוצת טיפול. מכיוון שלא נבצע שום שינוי בפועל בין הקבוצות מדובר ב A/A טסט:

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

התוצאה:

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

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


אז מה עושים?

יש פתרונות משני צדי המתרס:

  • BI – מנסה לפתור את הבעייה באמצעות התערבות בדאטה –רנדומיזציה חכמה מראש שמוודאת שתיווצר חלוקה “מאוזנות”.
  • BA – התאמת הניתוח הסטטיסטי כך שייקח בחשבון את תקופת הלפני.

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


אז מה זה בעצם CUPED ?

CUPED (Controlled Experiments Using Pre-Experiment Data) היא שיטה סטטיסטית שמטרתה לצמצם שונות בניסויי A/B באמצעות מידע מלפני תחילת הניסוי.

הרעיון פשוט:
אם אנחנו יודעים שיוזרים שהתנהגו בצורה מסוימת לפני הטסט נוטים להתנהג בצורה דומה גם במהלכו – למה לא לנצל את המידע הזה?

במקום להשוות ישירות בין ההכנסה הממוצעת של קבוצת הטסט והביקורת CUPED ״מנקה” מהמדידה את החלק שניתן להסביר על-ידי ההתנהגות ההיסטורית של היוזרים.
נתאים לשתי הקבוצות adjustment המבוסס על הביצועים של היוזרים בניסוי לפני הטסט, לאחריו נשווה בצורה רגילה (למשל Z-test) בין הקבוצות על מדד מתוקן עם פחות רעש. בסופו של דבר CUPED לא משנה את האפקט – רק משפר את היכולת שלנו לראות אותו

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


מה הסיכוי לקבל תוצאה מובהקת בלי אפקט?

נריץ שוב 10,000 A/A טסטים וננתח אותם עם ובלי  CUPED .

התוצאה:

בשני המקרים כ-5% מהטסטים יוצאים מובהקים – שזה בדיוק מה שאנחנו מצפים לראות במצב שאין אפקט אמיתי.

מסקנה:
CUPED  לא משפר (או גורע) מזיהוי טעויות מסוג ראשון- קביעה שגויה שהאפקט מובהק.


ומה קורה כשיש אפקט אמיתי?

נוסיף אפקט מתוסרט:
נריץ שוב פעם עשר אלף טסטים רק שהפעם נגדיל את הכנסות קבוצת הטסט באופן אחיד ב-7%.

כאן התוצאות מדברות בעד עצמן:
השימוש ב-CUPED מעלה באופן דרמטי את הסיכוי לקבל תוצאה מובהקת – ונכונה.
למען הסר ספק, תוצאה נספרה כמובהקת רק אם הP-Value היה נמוך מ0.05 והאפליפט היה חיובי.


ומה אם היינו משתמשים גם ברדנדומיזציה חכמה בשלב התכנון כדי לוודא שהקבוצות מאוזנות?

כמו קודם, נריץ טסטים עם אפליפט של 7%, אבל הפעם נשאיר רק טסטים שבהם הקבוצות שנוצרו “מאוזנות” – כלומר, הפער בתקופת “הלפני” בין קבוצת הטסט והקונטרול אינו חורג מ־±2%.

כדי להגיע ל־10,000 טסטים מאוזנים, נדרשו להריץ בפועל כמעט 25,000 איטרציות.

והתוצאות?
לא נראית השפעה חיובית משמעותית לשימוש ברנדומיזציה חכמה ומאוזנת יותר.

כאן חשוב להיות זהירים:
סימולציה היא דרך מצוינת “להרגיש בידיים” סטטיסטיקה, אבל היא אינה הוכחה סטטיסטית כשלעצמה.
בנוסף, הרנדומיזציה החכמה שבה השתמשתי כאן עדיין בסיסית. במערכות ניסויים מתקדמות יותר, הרנדומיזציה לא רק מאזנת את תקופת “הלפני”, אלא גם מאזנת את האוכלוסייה לפי (geo, device, payer / non-payer). ייתכן שבמערכת כזו היינו רואים תוצאה שונה.

ועדיין, בשלב הזה אני מרגיש נוח להגיד:
מבין שתי הדרכים להתמודד עם הבעיה שהועלתה בפוסט – התחשבות בתקופת “הלפני” בניתוח הסטטיסטי היא Must Have, ושימוש בכלי BI כדי לאזן את הדאטה הוא Nice to Have.


ומה לגבי תכנון ניסוי?

כמובן שתמיד מומלץ לבצע תכנון ניסוי מוקדם, להבין איזה אפליפט (MDE) רוצים לזהות, באיזו מובהקות (α) ומה הסבירות לזהות אפליפט כזה (power).

בדוגמה שלי-

  •  בניתוח “רגיל״ נצטרך 122 אלף יוזרים בכל קבוצה כדי לזהות אפליפט מובהק של 7% ב-80% מהמקרים.
  • אם נשתמש ב-CUPED נצטרך 59 אלף יוזרים ״בלבד״.

אותו ניסוי, אותו דאטה – חצי מהגודל


מחשבה טורדנית לסיום

תמיד מדהים אותי שגם עם טסט קפדני ושיטות מתקדמות, עדיין יהיו לא מעט מקרים שבהם לא נזהה אפקט שקיים בפועל (ועוד 7 אחוז אפליפט!). זה משהו שכאנליסטים אנחנו צריכים לשאת איתנו בראש, במיוחד כשאנחנו מתיימרים להסיק סיבתיות מניתוחים פשוטים יותר של “לפני-אחרי״ או ניתוח טרנדים.

על זה – בפוסטים הבאים.


פינת הפרגון:

את ההיכרות עם CUPED שלא לומר ההטמעה שלו בכל הדשבורדים והליווי המקצועי אני חייב למלך האי בי טסט הבלתי מעורער והמנכל של חברת Bell הלא הוא אלון קורם. אם אתם לא בטוחים שאתם עושים אי בי טסט כמו שצריך, אתם כנראה באמת לא עושים אי בי טסט כמו שצריך.
ממליץ עליו בחום (ולחלוטין לא ממומן, אם היה ספק).

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *