Chegamos a última parte da nossa série de projetos com testes A/B, e para fechar com chave de ouro, vamos aplicar Inferência bayesiana para acelerar o processo de coleta e análise dos dados, por serem testes que analisam os dados conforme eles são gerados, será uma análise comparativa com dados sintéticos.
Se você é novo aqui, recomendo dar uma olhada no Guia para Planejamento de um Teste A/B, onde explico todas as etapas para criação de um projeto completo.
E também os outros posts da série:
- Aplicando teste não-paramétrico em Python
- Trabalhando com dados categóricos
- Teste A/B/n para análise de conversão de página
Vamos usar novamente Jupyter Notebook com Python para desenvolver todo o projeto, e se quiser reproduzir os resultados mostrados aqui, todo o conteúdo da série está disponível no meu GitHub, com os dados usados em cada parte!
iSketch¶
A empresa iSketch, localizada em São Paulo, farica e disponibiliza um software com foco no desenvolvimento 3D de projetos para construção civil, como forma de prototipagem de grandes projetos.
Para usar o software, o cliente precisa adquirir uma licença de uso que se renova anualmente.
Uma das estratégias de aquisição de clientes da iSketch é a captura do e-mail dos clientes em torca de uma Newsletter com conteúdos semanais sobre a construção civil. A assinatura da newsletter permite começar um relacionamento entre a iSketch e as pessoas, a fim de mostrar as vantagens de utilizar o software para criar protótipos de construções civis.
Portanto, a melhoria de conversão da página de captura de e-mail, ofertando a newsletter em troca, é crucial para o crescimento do número de clientes.
Sendo assim, o coordenador de Marketing da empresa pediu ao time de Designers que criassem uma nova página de captura de e-mail com uma pequena modificação nas cores do botão de “sign up”, a fim de aumentar a conversão da página.
O time de Designers criou uma página com o botão de “sig up” vermelho para ser testada contra a página atual que possui o botão azul. O coordenador de Marketing tem pressa em testar a nova página, pois a empresa vem adquirindo poucos clientes nas últimas semanas e isso pode comprometer o faturamento anual da empresa.
O time de Cientistas de Dados da iSketch foi acionado com a missão de testar a nova página de captura de e-mail o mais rápido possível. A primeira ideia foi planejar um experimento de teste A/B entre as duas páginas por um período de 7 dias, para concluir a efetividade da mudança da cor do botão. Porém, o coordenador de Marketing categoricamente disse ao time de dados que não poderia esperar 7 dias e solicitou que concluíssem em menos tempo.
0.1 Imports¶
import pandas as pd
from IPython.display import Image
Planejamento da Solução¶
Input – Output – Tasks
Input:
- Problema de negócio
- Dados passados
Output:
Tasks:
- Teste de Hipótese
- Definir o método de inferência estatística
- Design de Experimento
- Hipóteses
- Efeito esperado
- Cálculo da probabilidade conjunta
- Cálculo do risco esperado
1.0 Escolha do método¶
Devido a limitação de tempo e necessidade de rápido retorno.
O método para identificar um efeito dentre as variantes será: A/B Bayesiano com Multi-Armed Bandit
2.0 Design de Experimentos¶
2.1 Formulação das hipótese¶
Hipótese nula (H0): Não há diferença entre as variantes.
Hipótese alternativa (H1): Há uma diferença entre as variantes.
2.2 Parâmetros do experimento¶
Métrica de avaliação: CTR (Click-Through Rate)
CTR = Total de Clicks no botão / Total de visitas na página
A página atual apresenta conversão de 30%.
A página desafiante tem uma conversão prevista de 35%.
3.0 Aplicação do Teste Bayesiano¶
Para aplicação do teste foram definidos duas abordagens:
- Teste A/B Bayesiano (estático)
- Teste A/B Bayesiano com Multi-Armed Bandit (dinâmico)
3.1 Teste A/B Bayesiano¶
O teste A/B Bayesiano é uma abordagem alternativa ao teste clássico de hipóteses (frequentista), fundamentada no teorema de Bayes. Ele utiliza a probabilidade condicional para inferir a superioridade de uma variante em relação à outra com base em evidências observadas. Em vez de calcular um valor 𝑝 ou confiar em rejeitar/aceitar uma hipótese nula, o teste Bayesiano fornece diretamente a probabilidade de uma variante ser melhor que outra, tornando os resultados mais interpretáveis.
Como Funciona¶
- Priors (Informação Inicial):
- Antes de observar os dados, define-se uma crença inicial sobre os parâmetros (como taxa de conversão) de cada variante, chamada de prior.
Exemplo: “A taxa de conversão da Variante A pode variar uniformemente entre 0% e 10%.”
- Distribuição Priori: Geralmente, usa-se a distribuição Beta, que é apropriada para modelar probabilidades (valores entre 0 e 1). Ela é definida por dois parâmetros, 𝛼 e 𝛽, que representam sucessos e falhas.
- Likelihood (Verossimilhança):
- Os dados observados (número de sucessos e falhas) são usados para atualizar a crença inicial.
- O Teorema de Bayes é aplicado para combinar o prior com a evidência observada. A fórmula básica é:
- P(A|B): É a probabilidade a posteriori de A, ou seja, a probabilidade de A ocorrer, dado que B ocorreu. Após receber novos dados, você atualiza sua crença inicial.
- P(B|A): É a probabilidade de B ocorrer, dado que A ocorreu.
- P(A): É a probabilidade a priori de A. Representa nossa crença inicial ou conhecimento sobre A antes de levar em consideração a nova informação B.
- P(B): É a probabilidade total de B.
- Posterior (Probabilidade Atualizada):
- Após combinar os priors com os dados, obtém-se a posterior, que reflete a crença atual sobre os parâmetros das variantes.
Exemplo: “Com os dados observados, a taxa de conversão da Variante B tem 90% de chance de ser maior que a da Variante A.”
Cada grupo (controle e tratamento) receberá diferentes páginas, e os resultados de clicks nos botões de cada página são contabilizados. Nesse caso, os grupos são dois bots com probabilidades já determinadas de cliques em cada botão.
- Todos os scripts estão disponíveis em: https://github.com/matheusventurads/ab-test/tree/main/ab_bayesian
Image('img/fluxograma_teste_AB.png')
Através de inferência bayesiana, calcula-se as probabilidades do risco de cada página (qual a perda esperada na escolha da página) e a probabilidade da página B ser melhor do que A. Conforme novos dados são inseridos na tabela o gráfico é atualizado, assim podemos analisar as probabilidades calculadas à cada novo dado inserido.
Image('img/ab_bayesian.png')
Observe que entre 70 e 80 visitas, a página B já tem mais de 80% de probabilidade de ser melhor que A.
E com risco de escolha da página B próximo de zero, enquanto a página A estabiliza com risco por volta de 20%.
Compare com a quantidade de amostras que precisavamos nos testes das partes anteriores dessa série, todos precisavam de números bem maiores de amostras.
3.2 Teste A/B Bayesiano com MAB¶
O teste A/B Bayesiano com MAB (Multi-Armed Bandit) é uma abordagem que combina o poder do Bayesian A/B Testing com a estratégia de Multi-Armed Bandits, com o objetivo de maximizar ganhos ao mesmo tempo que realiza experimentos. Essa técnica é especialmente útil em contextos como otimização de sites, marketing e alocação de recursos em tempo real.
Conceito básico¶
Teste A/B Bayesiano: Usa o teorema de Bayes para comparar variantes e calcular a probabilidade de uma ser superior a outra, permitindo atualizações dinâmicas e decisões baseadas em probabilidade.
Multi-Armed Bandits (MAB): Inspirado no problema do “bandido de múltiplos braços” (uma analogia às máquinas caça-níqueis), busca explorar (testar diferentes variantes) e explorar (focar na melhor variante identificada até agora) de forma a maximizar o retorno acumulado durante o experimento.
Como se fosse um polvo em um cassino, buscando qual máquina oferece os melhores resultados. (Fonte: k-armed bandit)
Quando combinados, o teste A/B Bayesiano com MAB ajusta dinamicamente a probabilidade de exibir cada variante com base nas evidências, permitindo aproveitar a melhor variante enquanto o experimento ainda está em andamento.
Aplicando agentes de Multi-Armed Bandit com Inferência Bayesiana, não há divisão entre grupos de controle e tratamento, as diferentes páginas são exibidas baseadas nas probabilidades determinadas com base os dados passados.
Como Funciona¶
- Configuração Inicial:
- As variantes (A, B, C etc.) começam com priors iniciais, frequentemente distribuições Beta (Beta(𝛼,𝛽)), representando crenças iniciais sobre as taxas de conversão.
- Atualização de Probabilidades:
- À medida que os usuários interagem com as variantes, os dados coletados (sucesso e falhas) atualizam as distribuições usando o teorema de Bayes.
- Exploration vs Exploitation:
- Como as duas palavras são traduzidas como exploração é mais fácil defini-las pelos termos em inglês.
Exploration é a exploração no sentido de escolher áreas/objetivos desconhecidos. Escolher opções que ainda não foram testadas (ou não foram testadas o suficiente).
Exploitation é a exploração no sentido de extrair, fazer uso total de um recurso. Escolher opções que aparentam ser melhores baseadas em resultados passados.
- O dilema é definir a mudança de exploration para exploitation. Mais tempo explorando significa menos tempo ganhando. E esse balanço entre as estratégias é feito usando algoritmos de MAB, também chamadas de Políticas.
Políticas de MAB¶
Random Agent¶
A política do Random Agent diz que a escolha de qualquer uma das opções disponíveis pelo agente, deve ser feita de maneira 100% aleatória. Está sempre na fase de Exploration.
Omniscient Agent¶
A política do Omniscient Agent é sempre escolher a opção que traz a maior recompensa, desde o início. Para isso, o agente precisa saber qual opção, dentre todas as alternativas, traz o maior retorno. Está sempre na fase de Exploitation.
Greedy Agent¶
A política do Greedy Agent escolhe a versão vencedora dentro de um período extremamente curto. O risco do Greedy é tomar a decisão sobre a melhor versão com poucas ou apenas 1 observação. O tempo da fase de Exploration é muito menor do que a fase de Exploitation.
Epsilon Greed Agent¶
A política do Epsilon Greedy Agent escolhe a versão vencedora depois de um certo período de Exploration. O risco depende do valor de $\epsilon$ (epsilon) escolhido (e a equação de decaimento), que defini quanto tempo o agente demora para tomar uma decisão.
Thompson Agent¶
A política do Thompson Agent é baseada em inferência bayesiana, não existindo a definição de tempo. Há mudança automática entre as fases, com alto valor de recompensa com bom balanço entre Exploration e Exploitation.
Com os valores de sucesso e fracasso de cada página, através da distribuição beta é decidido qual será exibida. Conforme as taxas vão sendo atualizadas (a taxa de uma página se sobressai sobre a outra) o agente para de variar e apresenta somente a página com maior sucesso. No entanto, caso as taxas se invertam, o agente muda a apresentação das páginas, diferente dos agentes anteriores que sempre vão manter a mesma página na segunda etapa.
Usaremos a política Thompson Agent.
- Todos os scripts estão disponíveis em: https://github.com/matheusventurads/ab-test/tree/main/ab_bayesian_mab
- Scripts em python para cada agente citado: https://github.com/matheusventurads/ab-test/tree/main/mab
Image('img/fluxograma_mab_AB.png')
Também usaremos um bot para simular os cliques nas páginas, mas diferente de antes apenas um bot receberá uma das páginas escolhida pelo Agente MAB. E com base nos dados, o agente determina em tempo real qual página deve ser exibida para o usuário.
Vamos então recalcular a probabilidade e riscos de cada página.
Image('img/mab_bayesian.png')
Como o Multi-Armed Bandit pode variar a exibição das páginas conforme os resultados passados, foi necessário um número maior de iterações para a probabilidade de B ser melhor que A ultrapassar 80%.
4.0 Analisando a conversão¶
Vamos comparar os dados obtidos nos dois testes:
# load datasets for each experiment
bayesian_dataset = pd.read_csv('ab_bayesian/data_experiment.csv')
mab_dataset = pd.read_csv('ab_bayesian_mab/data_experiment.csv')
Considerando 80 iterações (período que o teste estático ultrapassa 80% de probabilidade):
bayesian_dataset[:80].groupby('group').sum()
click | visit | |
---|---|---|
group | ||
control | 8 | 42 |
treatment | 12 | 38 |
mab_dataset[:80].groupby('group').sum()
click | visit | |
---|---|---|
group | ||
control | 14 | 44 |
treatment | 11 | 36 |
Com 80 iterações o MAB ainda não identificou o tratamento como sendo melhor, mas nota-se que por não dividir em grupos e exibir as páginas conforme seu critério de probabilidade, há 25% mais conversão (5 clicks a mais).
Comparando as taxas totais:
bayesian_dataset['click'].mean()
0.28859060402684567
mab_dataset['click'].mean()
0.3442622950819672
Considerando as taxas de conversão para todo o período de cada teste, o modelo MAB apresenta taxa 19,3% superior.
O MAB apresenta maior variação das probabilidades até estabilização, mas reduz a perda de conversão.
Enfim chegamos ao final da nossa série sobre Teste A/B!
Essas metodologias, apesar de distintas, compartilham o mesmo objetivo: fornecer insights confiáveis para guiar decisões estratégicas. Seja um teste clássico para validar uma hipótese ou uma abordagem dinâmica que prioriza resultados enquanto aprende, o importante é adaptar a técnica às necessidades do contexto.
Agora, você está equipado para implementar testes eficazes e medir o impacto das suas escolhas com confiança. Continue explorando, experimentando e aperfeiçoando suas estratégias — porque o aprendizado, assim como os testes, nunca para. 🚀