Sono uno sviluppatore software che lavora su sistemi di test A / B. Non ho una solida base di statistiche ma ho acquisito conoscenze negli ultimi mesi.
Uno scenario di test tipico prevede il confronto di due URL su un sito Web. Un visitatore visita LANDING_URL
e quindi viene inoltrato a caso a URL_CONTROL
o URL_EXPERIMENTAL
. Un visitatore costituisce un campione e si ottiene una condizione di vittoria quando il visitatore compie un'azione desiderabile su quel sito. Ciò costituisce una conversione e il tasso di conversione è il tasso di conversione (generalmente espresso in percentuale). Un tipico tasso di conversione per un determinato URL è compreso tra 0,01% e 0,08%. Eseguiamo test per determinare il confronto tra i nuovi URL e i vecchi URL. Se URL_EXPERIMENTAL
viene mostrato che supera URL_CONTROL
, sostituiamo URL_CONTROL
con URL_EXPERIMENTAL
.
Abbiamo sviluppato un sistema usando semplici tecniche di verifica delle ipotesi. Ho usato le risposte a un'altra domanda CrossValidated qui per sviluppare questo sistema.
Un test è impostato come segue:
- La stima
CRE_CONTROL
del tasso di conversione diURL_CONTROL
viene calcolata utilizzando dati storici. - Viene impostato il tasso
CRE_EXPERIMENTAL
di conversione target desiderato diURL_EXPERIMENTAL
. - Viene generalmente utilizzato un livello di significatività di 0,95.
- In genere viene utilizzata una potenza di 0,8.
Insieme, tutti questi valori vengono utilizzati per calcolare la dimensione del campione desiderata. Sto usando la funzione R power.prop.test
per ottenere questa dimensione del campione.
Un test verrà eseguito fino alla raccolta di tutti i campioni. A questo punto, gli intervalli di confidenza per CR_CONTROL
e CR_EXPERIMENTAL
vengono calcolati. Se non si sovrappongono, un vincitore può essere dichiarato con un livello di significatività di 0,95 e una potenza di 0,8.
Gli utenti dei nostri test hanno però due preoccupazioni principali:
1. Se, ad un certo punto durante il test, vengono raccolti abbastanza campioni per mostrare un chiaro vincitore, il test non può essere interrotto?
2. Se alla fine del test non viene dichiarato alcun vincitore, è possibile eseguire il test più a lungo per vedere se è possibile raccogliere campioni sufficienti per trovare un vincitore?
Va notato che esistono molti strumenti commerciali che consentono ai loro utenti di fare esattamente ciò che desiderano i nostri stessi utenti. Ho letto che ci sono molti errori con quanto sopra, ma ho anche trovato l'idea di una regola di arresto e vorrei esplorare la possibilità di utilizzare tale regola nei nostri sistemi.
Ecco due approcci che vorremmo considerare:
1. Utilizzando power.prop.test
, confrontare i tassi di conversione attuali misurati con il numero attuale di campioni e vedere se sono stati raccolti abbastanza campioni per dichiarare un vincitore.
Esempio: è stato impostato un test per verificare se nel nostro sistema esiste il seguente comportamento:
CRE_CONTROL
: 0.1CRE_EXPERIMENTAL
: 0,1 * 1,3- Con questi parametri, la dimensione del campione
N
è 1774.
Tuttavia, mentre il test avanza e raggiunge 325 campioni, CRM_CONTROL
(tasso di conversione misurato per il controllo) è 0,08 ed CRM_EXPERIMENTAL
è 0,15. power.prop.test
viene eseguito su questi tassi di conversione e N
risulta essere 325. Esattamente il numero di campioni necessari per dichiarare CRM_EXPERIMENTAL
di essere il vincitore! A questo punto è nostra speranza che il test possa essere terminato. Allo stesso modo, se il test raggiunge 1774 campioni ma non viene trovato alcun vincitore, ma raggiunge 2122 campioni, il che è sufficiente per mostrare che CRM_CONTROL
tra 0,1 e CRM_EXPERIMENTAL
0,128 è un risultato in cui un vincitore può essere dichiarato.
In una domanda correlata gli utenti hanno avvertito che tale test è meno credibile a causa dell'incoraggiamento degli stop precoci con un minor numero di campioni ed è anche vulnerabile a errori di stima e ad un aumento del numero di errori di tipo I e di tipo II. C'è un modo per far funzionare questa regola di arresto? Questo è il nostro approccio preferito poiché significa meno tempo di programmazione per noi. Forse questa regola di arresto potrebbe funzionare offrendo una sorta di punteggio numerico o punteggi che misurano la credibilità del test nel caso in cui dovesse essere fermato in anticipo?
2. Utilizzo dell'analisi sequenziale o SPRT .
Questi metodi di test sono progettati esattamente per la situazione in cui ci troviamo: come possono i nostri utenti iniziare un test e terminarlo in modo tale da non perdere tempo in eccesso nel test? Eseguire un test troppo a lungo o dover ricominciare un test con parametri diversi.
Dei due metodi di cui sopra, preferisco SPRT perché la matematica è un po 'più facile da capire per me e perché sembra che potrebbe essere più facile da programmare. Tuttavia, non capisco come utilizzare la funzione di verosimiglianza in questo contesto. Se qualcuno potesse costruire un esempio di come calcolare il rapporto di verosimiglianza, la somma cumulativa del rapporto di verosimiglianza e continuare attraverso un esempio che illustra una situazione in cui si continuerebbe a monitorare, quando si accetterebbe l'ipotesi nulla e l'ipotesi alternativa, ciò ci aiuterebbe a determinare se SPRT è la strada giusta da percorrere.