Testování A / B je často účtováno jako vědecký způsob ověřování návrhových rozhodnutí. Příležitostně označované jako dělené testování, testování A / B je jednoduchý proces, který se na povrchu slibuje konkrétním výsledkům:
Vytvořte dvě varianty návrhu prvku, náhodně je vyměňte na svém webu a zaznamenávejte, jak reagují vaši uživatelé, porovnejte výsledky a implementujte nejvhodnější varianty. To dává smysl.
Klasickým příkladem je: červené tlačítko proti zelenému tlačítku, které bude klepnuto více? Zcela zajímavá otázka je však: zelené tlačítko proti stejnému zelenému tlačítku, které bude klepnuto více?
Co se stane, když testujeme A / B dvě stejné varianty? A / A test, pokud chcete.
Abychom mohli otestovat platnost jakéhokoliv testu A / B, potřebujeme test, který má "správnou" odpověď. Potřebujeme správnou odpověď, protože chceme vědět, že všechny věci jsou stejné, jak je pravděpodobné, že test A / B bude mít za následek výsledek, a proto musíme vědět, jaký výsledek očekáváme.
Pokud budeme A / B testovat dvě identická tlačítka, výsledek by měl být mrtvý
Předpokládejme tedy, že testujeme zelené tlačítko na stejném zeleném tlačítku a že tlačítko je tak lákavé, že 100% uživatelů to klepne.
(Procento nezáleží na tom, mohlo by to být 14.872% .To záleží na tom, že vzhledem k tomu, že tlačítka jsou totožná, rychlost klepnutí by měla být stejná.)
Pokud budeme A / B testovat dvě identická tlačítka, výsledek by měl být mrtvý.
Vyhodit minci. Která strana se objeví, hlavy nebo ocasy? Víme, že existují dvě strany, oba stejné, takže je to šance 50-50.
Pokud hodíme naši minci dvakrát, víme, že existují tři možné výsledky: 2 hlavy, 2 ocasy nebo 1 hlava a 1 ocas. A tak dále…
Řekněme, že vyhodit mince je náš test A / A; šance na to, že se dostane do čela, jsou shodné s pravděpodobností, že se na straně ocasu dostaneme, stejně jako šance na jedno z našich zelených knoflíků, které jsou klepnuty, jsou stejné.
Takže v prohlížeči přepíšeme rychlý skript (protože většina testů A / B se stane v prohlížeči), aby simulovali uživatele, kteří klepou na jedno nebo druhé tlačítko, v závislosti na tom, s kým jsou prezentovány.
Nezapomeňte: testujeme dvě stejné varianty tlačítka a způsob, jakým jsme si vědomi, že jsou totožní, spočívá v tom, že se domníváme, že je pravděpodobné, že budou považováni za totožné. Vše, co hledáme, je důsledný (a proto správný) výsledek.
Nejprve potřebujeme HTML tabulku pro záznam našich výsledků, tabulka bude vypadat takto:
# Heads Tails Difference Margin of Error
V prvním sloupci zaznamenáme číslo testu (všechny dobré testy A / B se opakují, abychom ověřili výsledky, takže několikrát zopakujeme test). Pak budeme zaznamenávat počet výsledků Heads a následně počet Tails . Po tomto sloupci bude rozdíl mezi oběma výsledky (který by měl být nulový). Pak zaznamenáme hranici chyby (která by měla být opět 0%). Pod tabulkou vytiskneme souhrn, průměr všech výsledků a nejhorší výsledek.
Zde je scénář:
var bestOf = 12, // the number of times we want to run the testtestRepeat = 12, // the number of times we’d like to repeat the testtestCount = 0, // the number of the current testtestInterval = setInterval(performCoinToss, 100), // call the coin toss functiontotalDifference = 0, // used for calculating the average differenceworstDifference = 0; // the worst casefunction performCoinToss(){testCount++; // increment the current testvar testCounter = bestOf, // the current iteration of the testheadsCounter = 0, // the total number of times the script came up with "heads"tailsCounter = 0; // the total number of times the script came up with "tails"while(testCounter--) // loop 'testCounter' times{Math.round(Math.random()) ? headsCounter++ : tailsCounter++; // finds 0 or 1 randomly, if 1 increments headsCounter, otherwise increments tailsCounter}var difference = Math.abs(headsCounter - tailsCounter), // the difference between the twoerror = (difference / bestOf) * 100; // the error percentagedocument.getElementById("results").innerHTML += "" + testCount + " " + headsCounter + " " + tailsCounter + " " + difference + " " + error + "% "; // add result to tabletotalDifference += difference; // increments the difference counterworstDifference = difference > worstDifference ? difference : worstDifference; // updates worstDifferenceif(--testRepeat == 0){var averageDifference = totalDifference / testCount, // finds average differenceaverageError = (averageDifference / bestOf) * 100; // finds the average error margindocument.getElementById("summary").innerHTML = "Average difference: " + averageDifference + "
Average margin of error: " + averageError + "%
Worst Case: " + worstDifference + "
"; // write summary to pageclearInterval(testInterval); // if the test has been repeated enough times, clear the interval}}
Kód je komentován, takže zde jsou jen nejdůležitější body:
Nejprve nastavíme některé proměnné, včetně počtu, kolikrát chceme hodit minci (bestOf) a kolikrát chceme opakovat test (testRep).
Upozornění na spoiler: dostaneme se do poměrně vysokých smyček, aby se zabránilo porušení někoho prohlížeče, provádíme zkoušku v intervalu každých 100 ms.
Uvnitř funkce performCoinToss opakujeme požadovaný počet opakování, v každé iteraci smyčky použijeme náhodnou funkci JavaScript pro generování buď 1 nebo 0, které naopak zvyšuje buď headCounter , nebo tailsCounter .
Dále píšeme výsledek tohoto testu do tabulky.
A konečně, pokud se test opakoval, kolikrát jsme si přáli, najdeme průměry a v nejhorším případě je zapište do souhrnu a vymažeme interval.
Zde je výsledek . Jak vidíte průměrný rozdíl, je to pro vás jinak, ale jak píšu, průměrný rozdíl je 2,8333333333333335, průměrná chyba je tedy 23,611111111111114%.
Chyba přes 23% nevyvolává důvěru, zejména proto, že víme, že rozdíl by měl být 0%. Ještě horší je, že můj nejhorší výsledek je 8, to je 10-2 ve prospěch hlav.
Dobře, takže test nebyl spravedlivý. Skutečný test A / B by nikdy neprokázal, že by nalezl konečný výsledek pouze u 12 uživatelů.
Testování A / B používá něco nazývaného "statistická významnost", což znamená, že test musí běžet dostatečně dlouho, aby bylo dosaženo žádatelného výsledku.
Takže zdvojnásobte proměnnou bestOf a zjistěte, jak daleko musíme dosáhnout, abychom dosáhli hranice chyby menší než 1% - ekvivalent 99% jistoty.
V nejlepší z 24 (v době psaní) průměrný rozdíl je 3.16666666666666665, což je 13.194444444444445%. Krok správným směrem! Vyzkoušejte to sami (vaše výsledky se budou lišit).
Znovu to zopakujme. Tentokrát můj průměrný rozdíl 6.666666666666667 s rozpětím pro chybu 13.88888888888889%. Ještě horší je, že nejhorší případ je 16, je to chyba 33,33333333333333%! Můžeš zkuste to jeden pro sebe taky.
Ve skutečnosti, žádné ceny za hádat, že můžeme pokračovat: nejlepší z 96 , nejlepší z 192 , nejlepší z 384 , nejlepší z 768 , nejlepší z 1536 , nejlépe 3072 , nejlepší z 6144 , nejlepší z 12288 , nejlepší z 24576 , nejlepší z 49152 , nejlepší z 98304 .
Nakonec, v nejlepší z 98304, nejhorší scénář klesne pod 1%. Jinými slovy můžeme být 99% přesvědčeni, že test je přesný.
Takže v testu A / A, jehož výsledek jsme věděli předem, vzala velikost vzorku 98 304, aby dosáhla přijatelného rozpětí chyb.
Kdykoli se diskutuje o testování A / B, někdo si vzpomene na kamaráda kamaráda, který A / B testoval jedno tlačítko na svém webu a okamžitě učinil nějaký nepravděpodobný zisk (skutečná hodnota dolaru na tlačítku se zvyšuje pokaždé, když slyším příběh).
V těchto příběhách jsou tlačítka obvykle testována na mikroobježku "Stáhnout mé ebook" versus "Stáhněte si můj volný ebook". Nemělo by být překvapením, že tento vyhrál. Je to zlepšení, které by udělal dobrý copywriter. Vhodnější test A / B by byl "Stáhnout mé ebook" versus "Stáhnout ebook" (mé peníze jsou na druhém).
Pokud se ocitnete s výsledkem, který má značnou váhu na jednu z možností, naznačuje, že s jednou z vašich variant je něco velmi špatné. Čím častěji bude dobrý výsledek zlepšení o méně než 5%, což představuje problém, pokud testujete s přibližně 1000 uživateli (hranice pro chybu je kolem 5%).
Čím je test užitečnější, tím větší je vítězství pro jednu variantu nebo druhou. Nicméně, čím větší je okraj vítězství, tím větší je velikost vzorku potřebná k tomu, abyste získali přijatelně malou míru chyb.
Mark Twain, který možná citoval Disraeli, jednou použil frázi: lži, zatracené lži a statistiky. Tím, že myslí, že něco, co dokazují statistiky, není nutně pravda. Statistiky mohou být použity k prokázání všeho, co chcete.
Testování A / B vám poskytne výsledek, ale je to výsledek, který vám řekne více o vás a o tom, co očekáváte, než o vašich zákaznících
Nejnebezpečnější věcí testování A / B je to, že dokáže dokázat vše, co chcete. může to způsobit falešné pozitiva a umožňuje rozpoznat vzory, které nejsou řádně podporovány.
Navíc test A / B může znamenat, že zelené tlačítko překonává červené tlačítko, ale co s modrým tlačítkem? Dokonce i úspěšné testování A / B nám dovoluje pouze validovat naše konstrukční rozhodnutí v rámci samotného testu.
Aby test A / B fungoval tak, jak je zamýšleno, potřebujeme dvě protichůdné podmínky:
Bohužel většina webů nemá velikost vzorku dostatečně velká, aby dosáhla dostatečně malého rozsahu chyb. A protože nemůžeme zvýšit velikost vzorku (my bychom, kdybychom mohli), jedinou volbou je zvýšit variabilitu možností s cílem dosáhnout jasného výsledku, zkusit test podle našich preferencí.
Testování A / B vám poskytne výsledek, ale je to výsledek, který vám řekne více o vás a o tom, co očekáváte, než o vašich zákaznících. Pokud jde o rozhodování o designu na jiném místě než na místech s velmi vysokým objemem dopravy, mohli bychom také hodit minci jako A / B test.