Sou desenvolvedor de software que trabalha em sistemas de teste A / B. Não tenho um histórico sólido de estatísticas, mas venho adquirindo conhecimento nos últimos meses.
Um cenário de teste típico envolve a comparação de dois URLs em um site. Um visitante visita LANDING_URL
e é encaminhado aleatoriamente para um URL_CONTROL
ou outro URL_EXPERIMENTAL
. Um visitante constitui uma amostra e uma condição de vitória é alcançada quando o visitante executa alguma ação desejável nesse site. Isso constitui uma conversão e a taxa de taxas de conversão é a taxa de conversão (normalmente expressa em porcentagem). Uma taxa de conversão típica para um determinado URL é algo entre 0,01% e 0,08%. Executamos testes para determinar como novos URLs se comparam com URLs antigos. Se URL_EXPERIMENTAL
for mostrado um desempenho superior URL_CONTROL
, substituímos URL_CONTROL
por URL_EXPERIMENTAL
.
Nós desenvolvemos um sistema usando técnicas simples de teste de hipóteses. Usei as respostas para outra pergunta CrossValidated aqui para desenvolver este sistema.
Um teste é configurado da seguinte maneira:
- A estimativa
CRE_CONTROL
da taxa de conversãoURL_CONTROL
é calculada usando dados históricos. - A taxa
CRE_EXPERIMENTAL
de conversão desejada desejada deURL_EXPERIMENTAL
está definida. - Um nível de significância de 0,95 é normalmente usado.
- Uma potência de 0,8 é normalmente usada.
Juntos, todos esses valores são usados para calcular o tamanho de amostra desejado. Estou usando a função R power.prop.test
para obter esse tamanho de amostra.
Um teste será executado até que todas as amostras sejam coletadas. Neste ponto, os intervalos de confiança para CR_CONTROL
e CR_EXPERIMENTAL
são calculados. Se eles não se sobrepõem, um vencedor pode ser declarado com nível de significância de 0,95 e poder de 0,8.
Os usuários de nossos testes têm duas preocupações principais:
1. Se, em algum momento do teste, forem coletadas amostras suficientes para mostrar um vencedor claro, o teste não poderá ser interrompido?
2. Se nenhum vencedor for declarado no final do teste, podemos executá-lo por mais tempo para ver se podemos coletar amostras suficientes para encontrar um vencedor?
Deve-se notar que existem muitas ferramentas comerciais que permitem que seus usuários façam exatamente o que nossos próprios usuários desejam. Eu li que existem muitas falácias com o exposto acima, mas também me deparei com a idéia de uma regra de parada e gostaria de explorar a possibilidade de usar essa regra em nossos próprios sistemas.
Aqui estão duas abordagens que gostaríamos de considerar:
1. Usando power.prop.test
, compare as taxas de conversão medidas atuais com o número atual de amostras e verifique se foram coletadas amostras suficientes para declarar um vencedor.
Exemplo: Um teste foi configurado para verificar se o seguinte comportamento existe em nosso sistema:
CRE_CONTROL
: 0,1CRE_EXPERIMENTAL
: 0,1 * 1,3- Com esses parâmetros, o tamanho da amostra
N
é 1774.
No entanto, à medida que o teste avança e atinge 325 amostras, CRM_CONTROL
(taxa de conversão medida para controle) é 0,08 e CRM_EXPERIMENTAL
é 0,15. power.prop.test
é executado nessas taxas de conversão e N
é 325. Exatamente o número de amostras necessárias para declarar CRM_EXPERIMENTAL
o vencedor! Neste ponto, esperamos que o teste seja encerrado. Da mesma forma, se o teste atingir 1774 amostras, mas nenhum vencedor for encontrado, mas atingir 2122 amostras, o suficiente para mostrar que CRM_CONTROL
0,1 e CRM_EXPERIMENTAL
0,128 é um resultado em que um vencedor pode ser declarado.
Em uma pergunta relacionada, os usuários informaram que esse teste é menos credível devido ao incentivo a paradas precoces com menos amostras e também à vulnerabilidade ao viés de estimativa e a um número aumentado de erros de Tipo I e Tipo II. Existe alguma maneira de fazer essa regra de parada funcionar? Essa é a nossa abordagem preferida, pois significa menos tempo de programação para nós. Talvez essa regra de parada funcione oferecendo algum tipo de pontuação ou pontuação numérica que mede a credibilidade do teste, caso seja interrompido mais cedo?
2. Usando análise sequencial ou SPRT .
Esses métodos de teste são projetados exatamente para a situação em que nos encontramos: como nossos usuários podem iniciar um teste e finalizá-lo de forma que não percam tempo demais nos testes? Executar um teste por muito tempo ou ter que iniciar um teste novamente com parâmetros diferentes.
Dos dois métodos acima, sou a favor do SPRT porque a matemática é um pouco mais fácil de entender e porque parece que pode ser mais fácil programar. No entanto, não entendo como usar a função de probabilidade neste contexto. Se alguém pudesse construir um exemplo de como calcular a razão de verossimilhança, a soma cumulativa da razão de verossimilhança e continuar com um exemplo que ilustra uma situação em que alguém continuaria monitorando, quando aceitaria a hipótese nula e a hipótese alternativa, isso nos ajudaria a determinar se o SPRT é o caminho certo a seguir.
Respostas:
Este é um problema interessante e as técnicas associadas são muitas aplicações. Eles são freqüentemente chamados de estratégias de "monitoramento intermediário" ou "design experimental seqüencial" (o artigo da wikipedia, ao qual você vinculou, infelizmente é um pouco escasso), mas existem várias maneiras de fazer isso. Acho que o usuário27564 está errado ao dizer que essas análises devem ser necessariamente bayesianas - certamente existem abordagens freqüentes para o monitoramento intermediário.
Sua primeira abordagem se assemelha a uma das abordagens originais do monitoramento provisório, denominadas "restrições". A idéia é muito simples: você deve parar de coletar dados quando o resultado do experimento for inevitável. Suponha que você tenha uma coleção de 100 e / ou e deseje saber se foi gerado por um processo que seleciona ou aleatoriamente a cada vez (por exemplo, Nesse caso, você deve parar assim que contar pelo menos 58 itens do mesmo tipo; a contagem dos itens restantes não mudará o significado após esse ponto. O número vem da localização de , em queUm s B s UMA B P( A ) = P( B ) = 0,5 58 x tal que 1 - F( x ; 100 ; 0,5 ) < α F é a distribuição binomial cumulativa.
Lógica semelhante permite encontrar os "pontos de inevitabilidade" para outros testes em que:
Isso provavelmente seria fácil para você implementar - calcule os critérios de parada off-line e depois conecte-os ao código do seu site - mas você pode melhorar ainda mais se quiser encerrar o experimento, não apenas quando o resultado for inevitável , mas quando é muito improvável que isso mude.
Existem várias outras abordagens também. Os métodos seqüenciais de grupo são projetados para situações nas quais você pode não conseguir obter um número definido de assuntos e os assuntos chegam a taxas variáveis. Dependendo do tráfego do seu site, você pode ou não querer analisar isso.
Há um número razoável de pacotes R flutuando pelo CRAN, se é isso que você está usando para sua análise. Um bom lugar para começar pode realmente ser a Visualização da Tarefa de Ensaios Clínicos , uma vez que muito desse trabalho saiu desse campo.
[*] Apenas alguns conselhos amigáveis: tenha cuidado ao analisar valores de significância calculados a partir de um número muito grande de pontos de dados. Como você coletar mais e mais dados, você vai , eventualmente, encontrar um resultado significativo, mas o efeito pode ser trivialmente pequena. Por exemplo, se você perguntasse a todo o planeta se eles preferem A ou B, é muito improvável que você veja uma divisão exata de 50:50, mas provavelmente não vale a pena refazer o seu produto se a divisão for 50,001: 49,999. Continue verificando o tamanho do efeito (ou seja, diferença nas taxas de conversão) também!
fonte
Você pode parar cedo, mas se o fizer, seus valores-p não serão facilmente interpretados. Se você não se importa com a interpretação do seu valor-p, a maneira pela qual a resposta para suas duas primeiras perguntas é 'não' não importa (muito). Seu cliente parece pragmático; portanto, a verdadeira interpretação de um valor-p provavelmente não é um ponto importante para você.
Não posso falar com a segunda abordagem que você propõe.
No entanto, a primeira abordagem não está em terreno sólido. Aproximações normais de distribuições binomiais não são válidas para proporções tão baixas (que é o método power.prop.test, também o método usado por Cohen em seu livro clássico sobre poder). Além disso, até onde sei, não existe uma solução de análise de potência de forma fechada para testes de proporção de duas amostras (cf. Como se pode executar uma análise de potência binomial de dois grupos sem usar aproximações normais? ). No entanto, existem métodos melhores para aproximar os intervalos de confiança das proporções (consulte o pacote binom) Você pode usar intervalos de confiança não sobrepostos como uma solução parcial ... mas isso não é o mesmo que estimar um valor p e, portanto, não fornece uma rota para a energia diretamente. Espero que alguém tenha uma boa solução de formulário fechado que compartilhe com o resto de nós. Se eu tropeçar em uma, atualizarei a pergunta acima mencionada. Boa sorte.
Edit: Enquanto eu estou pensando sobre isso, deixe-me totalmente pragmático aqui por um momento. Seu cliente deseja que esse experimento termine quando tiver certeza de que o site experimental está funcionando melhor que o site de controle. Depois de obter uma amostra decente, se você não estiver pronto para tomar uma decisão, comece a ajustar a proporção de sua tarefa aleatória para qualquer lado que esteja 'ganhando'. Se for apenas um pontinho, a regressão à média entrará em cena, você ficará menos certo e diminuirá a proporção. Quando tiver certeza razoável, encerre e declare um vencedor. A abordagem ideal provavelmente envolveria a atualização bayesiana, mas eu não sei o suficiente sobre esse tópico em minha cabeça para direcioná-lo. No entanto, posso garantir que, embora possa parecer contra-intuitivo às vezes, a matemática em si não é tão difícil.
fonte
As perguntas que você tem são perguntas típicas emergentes em testes estatísticos. Existem dois "sabores" estatísticos por aí, o frequentista e o bayesiano. A resposta freqüente às duas perguntas é fácil:
Depois de definir sua configuração, você não pode nem olhar para os dados (análise cega). Do ponto de vista freqüentista, não há maneira de contornar, trapacear, não há truques! (EDIT: Claro, existem tentativas de fazê-lo, e elas também funcionarão se usadas corretamente, mas a maioria delas é conhecida por apresentar vieses.)
Mas existe o ponto de vista bayesiano, que é bem diferente. A abordagem bayesiana precisa, em contraste com os freqüentadores, uma entrada adicional, a distribuição de probabilidade a priori. Podemos chamá-lo também de conhecimento ou preconceito anterior. Com isso, podemos usar os dados / medidas para atualizar nosso conhecimento para a probabilidade a posteriori. O ponto é que podemos usar os dados e, mais ainda, podemos usá-los em todos os pontos intermediários da medição. Em cada atualização, o último posterior é nosso novo prior e podemos atualizá-lo com uma nova medida para nosso conhecimento atualizado. Nenhum problema de parada precoce!
Eu encontrei uma palestra discutindo problemas semelhantes, como você tem, e descrevi acima: http://biostat.mc.vanderbilt.edu/wiki/pub/Main/JoAnnAlvarez/BayesianAdaptivePres.pdf
Mas, além disso, você tem certeza de que precisa disso? Parece que você tem algum sistema em execução decidindo onde vincular uma solicitação. Para isso, você não precisa provar que suas decisões estão corretas no sentido estatístico com um teste de hipótese. Você já comprou uma coca-cola, porque poderia excluir que a pepsi está 'certa' agora, com uma probabilidade de 95%? É suficiente aceitar o que é melhor, sem excluir uma hipótese. Isso seria um algoritmo trivial: calcule a incerteza da taxa A, calcule a incerteza de B. Pegue a diferença de ambas as taxas e divida b na incerteza da diferença. O resultado é algo como o significado da diferença no sigma. Depois, basta pegar todos os links onde houver mais de duas ou três diferenças de sigma. Recua,
fonte
talvez alguns métodos possam ser usados lá como
isso ajustará o ponto de corte P com base nos resultados e ajudará a interromper a coleta de dados e economizar recursos e tempo.
talvez outros trabalhos possam ser adicionados aqui.
fonte