Калкулатор статистичке значајности А/Б теста
Проверите да ли је резултат вашег А/Б теста статистички значајан. Унесите посетиоце и конверзије да бисте добили п-вредност, з-скор, интервал поверења и релативно подизање.
Калкулатор статистичке значајности А/Б теста
Унесите посетиоце и конверзије за сваку варијанту да бисте проверили да ли је разлика реална или само буква.
Резултати
Статистички значајно
Разлика је врло вероватна да није због случајности при вашем избраном нивоу поверења.
Chance this gap is just luck — lower is stronger.
How far apart the two rates are, in standard errors.
The likely range for the true difference.
Dokumentacija
А/Б тестирање за једну минуту
Променили сте дугме, наслов или ток плаћања. Верзија А је стара, верзија Б је нова. Б изгледа боље — конвертовано је 15% посетилаца наспрам 10% за А. Али може ли та разлика бити само срећа, исто као што бацање новчића десет пута може дати седам глава?
Овај калкулатор одговара управо на то. Унесете колико је људи видело сваку верзију и колико их је конвертовало, и он вам говори вероватноћу да је разлика коју сте измерили реална уместо случајне буке. Ако је та вероватноћа довољно велика, имате победника. Ако не, наставите тест.
Једина бројка коју требате пратити је п-вредност: шанса да видите разлику барем овако велику ако су две верзије заправо биле идентичне. Мала п-вредност (рецимо, испод 0,05) значи "ово би се ретко десило срећом, тако да је разлика вероватно реална."
Како га користити
- Посетиоци — колико јединствених људи је приказано свакој верзији.
- Конверзије — колико их је урадило оно што вас занима (куповина, пријава, клик).
- Ниво поверења — колико сте сигурни пре него што позовете победника. 95% је индустријски стандард.
- Хипотеза — двострана пита "да ли је Б различита од А?" (безбеднија, подразумевана); једнострана пита само "да ли је Б боља од А?" (осетљивија, али морате одлучити смер пре него што покренете тест).
Резултат се ажурира уживо и уноси се чувају у УРЛ-у странице, па можете означити или делити резултат. Ресетуј брише образац; Учитај примере попуњава радни пример.
Радни пример
| Посетиоци | Конверзије | Стопа | |
|---|---|---|---|
| А (контрола) | 1.000 | 100 | 10,0% |
| Б (варијација) | 1.000 | 150 | 15,0% |
То је подизање од 5 процентних поена апсолутно и +50% релативно подизање. Калкулатор враћа п-вредност од отприлике 0,0007 — испод 0,05 — тако да је при 95% поверења резултат статистички значајан. Отприлике, да су две верзије биле заиста идентичне, видели бисте разлику овако велику мање од једном у хиљаду тестова.
Математика (двосразмерни з-тест)
Испод маске ово је стандардни двосразмерни з-тест, исти тест који се предаје у уводној статистици и користе га главни А/Б алати.
-
Стопа конверзије сваке групе:
где је конверзија и посетиоци.
-
Обједињена стопа, под претпоставком (за нулту хипотезу) да обе групе деле једну праву стопу:
-
Стандардна грешка разлике:
-
З-скор — колико стандардних грешака су раздвајају две стопе:
-
п-вредност долази из стандардне нормалне дистрибуције . Двострана: . Једнострана: .
-
Значајна када је , где је (тако 0,05 при 95%).
Калкулатор такође извештава интервал поверења за разлику, израчунат са необједињеном стандардном грешком : вероватан опсег за праву разлику. Ако тај интервал искључи 0, резултат је значајан.
При 95% поверења, з изван ±1,96 (осенчени редови, 5% површине) броји се као значајан.
Честита читања резултата
- Статистичка значајност није пословна значајност. Подизање од 0,1% може бити статистички реално, али не вредно достављања.
- Не шпијунирајте и не стајте рано. Провера п-вредности сваког дана и заустављање чим падне испод 0,05 инфлационира вашу стопу лажних позитива. Одлучите величину узорка унапред и нека тест буде завршен.
- Пазите на правило палца величине узорка. Нормална апроксимација је поузданa када свака група има најмање ~10 конверзија и ~10 неконверзија. Са малим бројевима, третирајте резултат као само смернички.
- Поверење ≠ вероватноћа да је Б боља. 95% ниво поверења значи да је процедура погрешна највише 5% време у дугом року — то је фреквентистичка изјава, није "95% шанса да Б победи."
- Један тест, једна метрика. Тестирање много метрика или варијанти одједном множи шансу за случајност; исправите то (нпр. Бонферони) или претходно региструј једину метрику која одлучује тест.
Израчунајте то сами
Сваки одломак израчунава двострану п-вредност за горе наведени радни пример.
1=2*(1-NORM.S.DIST(
2 (B2/A2 - B1/A1) /
3 SQRT(((B1+B2)/(A1+A2))*(1-(B1+B2)/(A1+A2))*(1/A1+1/A2)),
4 TRUE))
5' A1,B1 = control visitors, conversions ; A2,B2 = variation visitors, conversions
61from math import sqrt, erf
2
3def ab_pvalue(n1, x1, n2, x2, two_sided=True):
4 p1, p2 = x1 / n1, x2 / n2
5 p = (x1 + x2) / (n1 + n2)
6 se = sqrt(p * (1 - p) * (1 / n1 + 1 / n2))
7 z = (p2 - p1) / se
8 phi = lambda v: 0.5 * (1 + erf(v / sqrt(2))) # standard normal CDF
9 return 2 * (1 - phi(abs(z))) if two_sided else 1 - phi(z)
10
11print(ab_pvalue(1000, 100, 1000, 150)) # ~0.00072
121// erf via Abramowitz & Stegun 7.1.26
2function erf(x) {
3 const s = x < 0 ? -1 : 1;
4 x = Math.abs(x);
5 const t = 1 / (1 + 0.3275911 * x);
6 const y = 1 - ((((1.061405429 * t - 1.453152027) * t + 1.421413741) * t
7 - 0.284496736) * t + 0.254829592) * t * Math.exp(-x * x);
8 return s * y;
9}
10const phi = z => 0.5 * (1 + erf(z / Math.SQRT2));
11
12function abPValue(n1, x1, n2, x2, twoSided = true) {
13 const p1 = x1 / n1, p2 = x2 / n2, p = (x1 + x2) / (n1 + n2);
14 const se = Math.sqrt(p * (1 - p) * (1 / n1 + 1 / n2));
15 const z = (p2 - p1) / se;
16 return twoSided ? 2 * (1 - phi(Math.abs(z))) : 1 - phi(z);
17}
18console.log(abPValue(1000, 100, 1000, 150)); // ~0.00072
191public static double abPValue(int n1, int x1, int n2, int x2) {
2 double p1 = (double) x1 / n1, p2 = (double) x2 / n2;
3 double p = (double) (x1 + x2) / (n1 + n2);
4 double se = Math.sqrt(p * (1 - p) * (1.0 / n1 + 1.0 / n2));
5 double z = (p2 - p1) / se;
6 // Phi via the error function; erf approximated (A&S 7.1.26) separately.
7 double phi = 0.5 * (1 + erf(Math.abs(z) / Math.sqrt(2)));
8 return 2 * (1 - phi);
9}
101static double AbPValue(int n1, int x1, int n2, int x2) {
2 double p1 = (double)x1 / n1, p2 = (double)x2 / n2;
3 double p = (double)(x1 + x2) / (n1 + n2);
4 double se = Math.Sqrt(p * (1 - p) * (1.0 / n1 + 1.0 / n2));
5 double z = (p2 - p1) / se;
6 double phi = 0.5 * (1 + Erf(Math.Abs(z) / Math.Sqrt(2)));
7 return 2 * (1 - phi);
8}
91#include <cmath>
2
3double ab_pvalue(int n1, int x1, int n2, int x2) {
4 double p1 = (double)x1 / n1, p2 = (double)x2 / n2;
5 double p = (double)(x1 + x2) / (n1 + n2);
6 double se = std::sqrt(p * (1 - p) * (1.0 / n1 + 1.0 / n2));
7 double z = (p2 - p1) / se;
8 double phi = 0.5 * (1 + std::erf(std::fabs(z) / std::sqrt(2.0)));
9 return 2 * (1 - phi);
10}
111import "math"
2
3func abPValue(n1, x1, n2, x2 float64) float64 {
4 p1, p2 := x1/n1, x2/n2
5 p := (x1 + x2) / (n1 + n2)
6 se := math.Sqrt(p * (1 - p) * (1/n1 + 1/n2))
7 z := (p2 - p1) / se
8 phi := 0.5 * (1 + math.Erf(math.Abs(z)/math.Sqrt2))
9 return 2 * (1 - phi)
10}
111// erf from the `libm` crate; std has no erf.
2fn ab_pvalue(n1: f64, x1: f64, n2: f64, x2: f64) -> f64 {
3 let (p1, p2) = (x1 / n1, x2 / n2);
4 let p = (x1 + x2) / (n1 + n2);
5 let se = (p * (1.0 - p) * (1.0 / n1 + 1.0 / n2)).sqrt();
6 let z = (p2 - p1) / se;
7 let phi = 0.5 * (1.0 + libm::erf(z.abs() / 2f64.sqrt()));
8 2.0 * (1.0 - phi)
9}
101function ab_pvalue($n1, $x1, $n2, $x2) {
2 $p1 = $x1 / $n1; $p2 = $x2 / $n2;
3 $p = ($x1 + $x2) / ($n1 + $n2);
4 $se = sqrt($p * (1 - $p) * (1 / $n1 + 1 / $n2));
5 $z = ($p2 - $p1) / $se;
6 $phi = 0.5 * (1 + erf(abs($z) / sqrt(2)));
7 return 2 * (1 - $phi);
8}
91def ab_pvalue(n1, x1, n2, x2)
2 p1, p2 = x1.to_f / n1, x2.to_f / n2
3 p = (x1 + x2).to_f / (n1 + n2)
4 se = Math.sqrt(p * (1 - p) * (1.0 / n1 + 1.0 / n2))
5 z = (p2 - p1) / se
6 phi = 0.5 * (1 + Math.erf(z.abs / Math.sqrt(2)))
7 2 * (1 - phi)
8end
91# R has this built in: prop.test does the whole thing.
2prop.test(c(100, 150), c(1000, 1000), correct = FALSE)$p.value # ~0.00072
3Честа питања
Коју величину узорка требам? Довољну да би опазљиво подизање било детектабилно. Као минимум, циљајте најмање неколико стотина конверзија по варијанти; користите посвећени калкулатор величине узорка са вашом базном стопом и најмањим подизањем вредним детектовања.
Двострана или једнострана? Користите двострану осим ако немате чврст, унапред обавезан разлог за гледање само побољшања. Једнострана удвостручава вашу осетљивост али забрањује реаговање на Б који је гори.
Зашто калкулатор приказује интервал поверења? Приказује вероватан опсег праве разлике, не само да/не вердикт. Широк интервал који прелази 0 значи "немате довољно информација још."
Да ли је ово Бајесовско? Не — то је фреквентистички з-тест, најчешће предавана и коришћена метода. Бајесовски А/Б алати извештавају "вероватноћу да Б побеђује А" уместо п-вредности; обе су валидне, одговарају на мало различита питања.