למה ניסוי A/B צריך כל כך הרבה נתונים?
שיעור המרה הוא הערכה מתוך מדגם. אם מחלקים את המבקרים לשתי קבוצות זהות לחלוטין, בלי שום שינוי באתר, שתי הקבוצות יציגו שיעורי המרה שונים זה מזה רק בגלל מזל. ככל שיש פחות המרות, הפער האקראי הזה גדול יותר. ניסוי A/B צריך מספיק נתונים כדי שהשיפור שמחפשים יהיה גדול בבירור מהרעש הזה.
שני פרמטרים קובעים כמה זה "מספיק". רמת המובהקות (α) היא אחוז המקרים שבהם הניסוי יכריז על הבדל כשבאמת אין הבדל. מובהקות 95% פירושה שמקבלים 5% תוצאות חיוביות שגויות. העוצמה הסטטיסטית (1-β) היא אחוז המקרים שבהם הניסוי יזהה את האפקט המינימלי כשהוא באמת קיים. עוצמה 80% פירושה ש-20% מהשיפורים האמיתיים בגודל הזה יתפספסו. האפקט המינימלי שניתן לזיהוי (MDE) הוא השיפור הקטן ביותר שהניסוי יתפוס ברמת העוצמה הזו. חשוב להבדיל בין MDE יחסי לבין MDE מוחלט: שיפור יחסי של 10% בשיעור המרה של 3% הוא 0.3 נקודות אחוז בלבד, מ-3.0% ל-3.3%.
הקשר בין גודל האפקט לגודל המדגם הוא ריבועי. כדי לזהות אפקט קטן פי שניים צריך מדגם גדול פי ארבעה. זה הלב של הבעיה באתרים קטנים. בנוסף, מה שקובע הוא מספר ההמרות ולא מספר המבקרים. שיעור המרה נמוך דורש הרבה יותר מבקרים כדי להגיע לאותו מספר המרות.
איך מחשבים כמה מבקרים צריך לכל וריאציה?
יש נוסחה מדויקת לשתי פרופורציות, אבל לתכנון מספיק קירוב שפורסם על ידי הסטטיסטיקאי רוברט לר (Lehr) ב-1992 ושהפך לכלל אצבע מקובל בעולם הניסויים: n ≈ 16·s²/d² לכל קבוצה. המספר 16 נגזר מההנחות עצמן. למבחן דו-צדדי במובהקות 95% ובעוצמה 80% מחשבים 2·(1.96 + 0.84)², שזה 15.7, מעוגל ל-16. לר מדגיש שהקירוב תקף רק לצמד הערכים הזה. במובהקות 99%, למשל, המקדם עולה ל-23.5. בשיעורי המרה השונות s² שווה ל-p(1-p), כאשר p הוא שיעור ההמרה הבסיסי, לכן הנוסחה שאנחנו משתמשים בה היא n ≈ 16·p(1-p)/δ² לכל וריאציה, כאשר δ הוא ההבדל המוחלט שרוצים לזהות. אותה נוסחה מופיעה גם במאמר הקלאסי של אוון מילר על ניסויי A/B, שמקושר במקורות.
דוגמה מספרית מלאה
כל הנתונים כאן הם דוגמה לצורך ההדגמה, לא נתוני לקוח. ההנחות מפורשות כדי שתוכלו להחליף אותן בנתונים שלכם.
- שיעור ההמרה הבסיסי: p = 3%, כלומר 0.03.
- האפקט המינימלי לזיהוי: שיפור יחסי של 10%, כלומר δ = 0.03 × 0.10 = 0.003 במונחים מוחלטים.
- רמת מובהקות 95% במבחן דו-צדדי, עוצמה 80%. זה בדיוק הצמד שהמקדם 16 מתאים לו.
- שתי וריאציות, חלוקה שווה של התנועה, 50% לכל אחת.
- מחשבים את השונות p(1-p) = 0.03 × 0.97 = 0.0291 ואת ריבוע האפקט δ² = 0.003² = 0.000009.
- מחלקים: n ≈ 16 × 0.0291 / 0.000009 = 51,733 מבקרים לכל וריאציה. בשתי וריאציות יחד: כ-103,500 מבקרים.
הנוסחה המדויקת לשתי פרופורציות, זו שמיושמת במחשבון של אוון מילר עם ברירות המחדל שלו (מובהקות 5%, עוצמה 80%), נותנת לאותם נתונים 51,486 מבקרים לכל וריאציה. הקירוב סוטה בפחות מחצי אחוז, בהחלט מספיק לתכנון. הטבלה הבאה חוזרת על החישוב לשלושה גדלים של אפקט.
| MDE יחסי | δ מוחלט (נקודות אחוז) | n לכל וריאציה (קירוב) | n לכל וריאציה (נוסחה מדויקת) | המרות נדרשות לכל וריאציה |
|---|---|---|---|---|
| 10% | 0.30 | 51,733 | 51,486 | כ-1,550 |
| 20% | 0.60 | 12,933 | 13,050 | כ-390 |
| 30% | 0.90 | 5,748 | 5,878 | כ-170 |
העמודה האחרונה מסתירה תובנה שימושית. אם מכפילים את n בשיעור ההמרה מקבלים את מספר ההמרות הנדרש לכל וריאציה: 16·(1-p)/r², כאשר r הוא ה-MDE היחסי. שיעור ההמרה כמעט נעלם מהנוסחה. לזיהוי שיפור יחסי של 10% צריך כ-1,550 המרות לכל וריאציה, בין אם שיעור ההמרה הוא 3% או 0.5%. לכן השאלה הראשונה בתכנון ניסוי היא כמה המרות יש, לא כמה מבקרים. למי שרוצה לחשב את זה עם הנתונים שלו, אנחנו מעלים בקרוב מחשבון גודל מדגם לניסוי A/B שמבצע את החישוב הזה עם הנוסחה המדויקת.
כמה שבועות ייקח הניסוי לפי התנועה שלכם?
הטבלה ממשיכה את הדוגמה לשלוש רמות תנועה חודשית. ההנחות: כל המבקרים מגיעים לעמוד הנבדק ונכנסים לניסוי, התנועה מתחלקת שווה בין שתי וריאציות, חודש הוא 12/52 משנה, כלומר כ-4.33 שבועות. התוצאה מעוגלת כלפי מעלה לשבועות שלמים, כי ניסוי מריצים תמיד בשבועות מלאים.
| מבקרים בחודש | מבקרים בשבוע | המרות בחודש (3%) | שבועות לזיהוי 10% | שבועות לזיהוי 20% | שבועות לזיהוי 30% |
|---|---|---|---|---|---|
| 5,000 | 1,154 | 150 | 90 | 23 | 10 |
| 20,000 | 4,615 | 600 | 23 | 6 | 3 |
| 100,000 | 23,077 | 3,000 | 5 | 2 | 1 (ראו הערה) |
הערה לשורה האחרונה: גם כשהחישוב נותן פחות משבוע, התיעוד של Optimizely ממליץ להריץ לפחות מחזור עסקי מלא של שבעה ימים, כדי לכסות את כל ימי השבוע. אנחנו נוהגים להריץ שבועיים מלאים לפחות, כי שבוע אחד לא מראה אם האפקט יציב.
הקריאה של הטבלה ברורה. באתר עם 5,000 מבקרים בחודש ניסוי לזיהוי שיפור של 10% יימשך 90 שבועות, כמעט שנתיים. בתקופה כזו האתר, הקמפיינים והקהל משתנים, לכן התוצאה חסרת משמעות גם אם הניסוי יסתיים. באתר עם 20,000 מבקרים, 23 שבועות הם עדיין יותר מחצי שנה. רק באתר עם 100,000 מבקרים בחודש ניסוי קלאסי לזיהוי 10% מסתיים בזמן סביר. חשוב לזכור שהתנועה הרלוונטית היא התנועה לעמוד שבו השינוי נמצא, לא התנועה לאתר כולו. אתר עם 100,000 מבקרים בחודש שבודק שינוי בעמוד התשלום, שאליו מגיעים 5% מהמבקרים, נמצא בפועל בשורה הראשונה של הטבלה.
איך מחליטים אם לבדוק A/B או לא?
עץ ההחלטה הבא מתרגם את החישוב לכלל פשוט. השאלה הראשונה אינה כמה מבקרים יש, אלא כמה המרות צפויות בחלון ניסוי סביר, שאנחנו מגדירים כשישה שבועות, בשתי הוריאציות יחד ובמדד שרוצים להזיז. הספים נגזרים מהנוסחה: כ-3,100 המרות לזיהוי שיפור של 10%, כ-780 לזיהוי שיפור של 20%.
עץ החלטה
לבדוק A/B או לא
דוגמה: המרה 3%, מובהקות 95%, עוצמה 80%.
n ≈ 16·p(1-p)/δ². כ-3,100 המרות לזיהוי שיפור של 10%, כ-780 לזיהוי שיפור של 20%. סופרים רק מבקרים שמגיעים לאלמנט שנבדק, לא את כל האתר. בדוגמה: 5,000 מבקרים בחודש הם כ-210 המרות.בדוגמה שלנו, אתר עם 5,000 מבקרים בחודש צובר כ-210 המרות בשישה שבועות. הוא נמצא בענף השמאלי. אתר עם 20,000 מבקרים צובר כ-830 המרות, בדיוק על הגבול של הענף האמצעי. אתר עם 100,000 מבקרים צובר כ-4,150 המרות, לכן הניסוי הקלאסי אפשרי.
מה עושים כשאין מספיק נתונים?
מדד קרוב יותר לשינוי
זו החלופה הראשונה שבודקים, כי היא משאירה אותנו בעולם של ניסוי מבוקר. אם משנים את כותרת עמוד המוצר, המדד הקרוב ביותר הוא הוספה לעגלה מאותו עמוד, לא הרכישה שמתרחשת שלושה שלבים אחר כך. התיעוד של Optimizely לאתרים עם תנועה נמוכה מנסח את זה במפורש: מודדים את השינוי ישירות בעמוד שבו הניסוי רץ. אם לשלב האחרון אין מספיק המרות, בודקים שלב מוקדם יותר. למדד הקרוב יש בדרך כלל שיעור גבוה בהרבה, לכן יש בו פי כמה המרות באותה תנועה. המחיר הוא שהוא לא מוכיח השפעה על ההכנסה. לכן מגדירים את מדד היעד הסופי כמדד שמירה (guardrail) ובודקים שהוא לא ירד, בלי לדרוש ממנו מובהקות.
שינוי גדול יותר
הטבלה מראה את זה במספרים: המעבר מזיהוי 10% לזיהוי 20% מקטין את המדגם הנדרש לרבע. באתר קטן אין טעם לבדוק צבע כפתור או ניסוח של מילה אחת. השינוי צריך להיות גדול מספיק כדי להזיז את המדד בעשרות אחוזים: הצעה אחרת, מבנה עמוד אחר, הסרת שלב מהטופס, מחיר אחר. Optimizely ממליצה לאתרים כאלה לבדוק "תמות" שלמות במקום להזיז אלמנטים בודדים. יש לזה יתרון נוסף. גם וריאציה מפסידה מלמדת משהו כשהשינוי גדול, בעוד שהפסד של גוון כתום מול גוון כתום אחר לא מלמד כלום.
לפני/אחרי עם קבוצת בקרה
כשאין מספיק המרות גם למדד קרוב, או כשאין כלי ניסויים באתר, מבצעים את השינוי ומשווים תקופה אחריו לתקופה לפניו. השוואה כזו לבדה חלשה, כי כל דבר שהשתנה בין התקופות, קמפיין, עונה, חג, מתחרה, מתערבב בתוצאה. קבוצת הבקרה פותרת חלק מהבעיה. בקרה היא אוכלוסייה או מדד שלא נחשפו לשינוי אבל חשופים לאותם גורמים חיצוניים: עמוד מוצר דומה שלא שונה, קטגוריה אחרת, מכשיר שבו השינוי לא הופעל, או מדינה אחרת באתר רב-לשוני. במקום לשאול "האם ההמרה עלתה", שואלים "האם ההמרה בעמוד ששונה עלתה יותר מההמרה בעמוד הבקרה באותה תקופה". ב-GA4 עושים את זה בדוחות השוואה (Comparisons) עם שני פילוחים לאורך ציר הזמן, או ב-Explore. אנחנו דורשים לפחות ארבעה שבועות מלאים לפני ולפחות ארבעה אחרי. בנוסף מתעדים מראש כל אירוע חיצוני בתקופה. התוצאה היא הערכה מנומקת, לא הוכחה סטטיסטית. כך גם מציגים אותה.
מחקר איכותני
כשהנתונים הכמותיים לא יכולים להכריע, הראיות מגיעות ממקום אחר. הקלטות סשן ומפות חום ב-Microsoft Clarity מראות איפה משתמשים נתקעים, על מה לוחצים לשווא ועד איפה גוללים. מבחני משתמשים עם חמישה עד שמונה משתתפים מגלים בעיות הבנה שאף ניסוי לא יסביר. סקר קצר ביציאה מהעמוד או שאלה אחת אחרי רכישה מגלים התנגדויות. ניתוח שדות הטופס מראה באיזה שדה נוטשים. המחקר האיכותני לא אומר כמה השיפור יהיה, אבל הוא אומר מה כנראה שבור. זה מספיק כדי להחליט על תיקון שבאתר גדול היו בודקים בניסוי. בפרויקטים שלנו באתרים קטנים זה המסלול העיקרי, כשהניסוי המבוקר נשמר למקרים הבודדים שבהם הוא אפשרי.
הערה על בדיקות סדרתיות (Sequential testing). יש שיטות שמאפשרות לעצור ניסוי מוקדם בלי להעלות את שיעור התוצאות השגויות. במקרים של אפקט גדול מאוד הן חוסכות חלק מהמדגם. אוון מילר, שפרסם את אחת השיטות הפשוטות, מדגיש שהחיסכון מתקיים בעיקר כשהאפקט גדול. כשאין אפקט אמיתי השיטה הסדרתית דווקא מגיעה למסקנה לאט יותר. היא לא פותרת את בעיית התנועה הנמוכה, היא רק מקצרת ניסויים שהיו מנצחים בגדול בכל מקרה.
מהן הטעויות הנפוצות?
הטעות הנפוצה ביותר היא לפתוח את הדשבורד כל יום ולעצור את הניסוי ברגע שהוא מראה מובהקות. אוון מילר הדגים את זה במאמר "How Not To Run an A/B Test": ניסוי של שתי וריאציות זהות, שנעצר ברגע הראשון שבו הוא מראה מובהקות 5% או אחרי 150 תצפיות, מסתיים בתוצאה "מובהקת" ב-26.1% מהמקרים, יותר מפי חמישה מהצפוי. כל בדיקה נוספת של תוצאת ביניים מעלה את שיעור התוצאות השגויות. הפתרון הוא לקבוע את גודל המדגם מראש ולא לעצור לפניו.
הטעות השנייה היא לחשב את המדגם לפי תנועת האתר כולו במקום לפי התנועה לאלמנט שנבדק. השלישית היא להריץ ימים בודדים במקום שבועות מלאים, כך שימי חול וסופי שבוע לא מיוצגים באותו יחס בשתי הוריאציות. הרביעית היא להוסיף וריאציות. ניסוי עם ארבע וריאציות מחלק את התנועה לארבע, לכן הוא נמשך פי שניים מניסוי עם שתיים. החמישית היא להוריד את רמת המובהקות ל-90% או 80% בלי להסביר למקבלי ההחלטות שעכשיו אחת מכל חמש "הצלחות" היא רעש. השישית היא לבחור MDE של 2% או 3% כי "גם שיפור קטן שווה כסף". זה נכון, אבל המדגם הנדרש לזיהוי 2% גדול פי 25 מהמדגם לזיהוי 10%. השביעית היא השוואת לפני/אחרי בלי בקרה שמוצגת כהוכחה, במיוחד כשהשינוי עלה יחד עם קמפיין חדש. השמינית היא לשכוח שהניסוי בודק המרות ולא מבקרים. אז מתפלאים ששיעור המרה של 0.5% דורש פי שישה מבקרים משיעור של 3%.
איך בודקים שזה עובד?
לפני ההשקה כותבים מסמך של עמוד אחד: ההשערה, המדד הראשי, מדדי השמירה, שיעור הבסיס שנמדד ב-GA4 בחודשיים האחרונים, ה-MDE, גודל המדגם לכל וריאציה, מספר השבועות המלאים ותנאי העצירה. המסמך הזה הוא ההגנה מפני עצירה מוקדמת. בודקים ב-GA4 או בכלי הניסויים שאירוע ההמרה נורה פעם אחת לכל פעולה בשתי הוריאציות, לא פעמיים בוריאציה אחת בגלל טעינה מחדש. בודקים גם שהתנועה מתחלקת ביחס שתוכנן. אם תכננו 50/50 ובפועל קיבלנו 54/46 על אלפי מבקרים, יש בעיה טכנית בהקצאה. התוצאה אינה תקפה.
בסיום הניסוי בודקים שהמדגם שהושג גדול או שווה למדגם שתוכנן ושעברו שבועות מלאים. רק אז קוראים את התוצאה. בחלופת לפני/אחרי עם בקרה הבדיקה היא שקבוצת הבקרה לא זזה. אם גם עמוד הבקרה עלה ב-15%, השיפור לא נובע מהשינוי. בחלופת המדד הקרוב בודקים אחרי כמה שבועות שמדד היעד הסופי לא ירד, גם אם הוא לא מובהק. בכל המסלולים מתעדים את התוצאה בטבלת למידה אחת, כולל ניסויים שלא נתנו מסקנה. אחרי עשרה ניסויים הטבלה הזו שווה יותר מכל ניסוי בודד, כי היא מראה אילו סוגי שינויים באמת מזיזים את המדדים באתר הזה.
החלטה אם לבדוק A/B, איזה מדד לבחור ואיך לבנות השוואה אמינה כשאין מספיק תנועה היא חלק משירות שיפור המרות שלנו, שמשלב ניתוח כמותי ב-GA4 עם הקלטות ומפות חום ב-Clarity. לארגונים שרוצים שגרה קבועה של ניסויים ולמידה אנחנו מציעים ליווי אנליטי שוטף. אם אתם לא בטוחים אם יש לכם מספיק נתונים לניסוי שאתם מתכננים, אפשר לפנות אלינו דרך טופס הקשר.
מדריכים קשורים
| היפותזה לניסוי A/B: איך כותבים אותה ואיך מתעדפים בין רעיונות |
| אינקרמנטליות מול ייחוס: מה ההבדל ומתי צריך ניסוי lift |
| משפך ב-GA4 לאיתור נטישה: פתוח מול סגור, פילוחים וזמן בין שלבים |
מקורות
Evan Miller: Sample Size Calculator (הגדרות MDE, מובהקות ועוצמה), Evan Miller: How Not To Run an A/B Test (נוסחת 16σ²/δ² ובעיית העצירה המוקדמת), Lehr R., Sixteen S-squared over D-squared: a relation for crude sample size estimates, Statistics in Medicine 1992 (PDF, McGill University), Optimizely Docs: Test tips for low-traffic sites, Optimizely Docs: How long to run an experiment
