05 - A-B Testing (em produção)
video: https://youtu.be/... no frontmatter da nota.A-B Testing (em produção)
A-B testing em produção é a divisão estatística do tráfego real entre variações de uma experiência, com medição controlada de qual delas performa melhor em métricas de negócio declaradas antes do início. Diferente das estratégias de deploy, o objetivo não é validar estabilidade do código, e sim responder uma hipótese de produto com rigor científico: a variação B aumenta a conversão, a retenção ou a receita por usuário em relação ao controle A. A relevância em produção é imensa porque decisões de produto baseadas em opinião custam caro, e o experimento controlado substitui disputa de clareira por evidência amostral. A técnica exige disciplina estatística genuína, já que a facilidade de executar um experimento convive com a facilidade de interpretá-lo errado. Sem planejamento de amostra, métricas guardrails e controle de vieses, um A-B test produz decisões erradas com confiança aparente.
Conceito e hipótese mensurável
Todo experimento começa com uma hipótese formal, e a qualidade dela determina o valor do resultado. A estrutura canônica declara a mudança, a população, a métrica primária e a direção esperada: para usuários do plano gratuito que chegam à página de upgrade, exibir o preço mensal antes do anual aumentará a taxa de conversão para assinatura em pelo menos 2%. Uma hipótese assim é falsificável, tem métrica única de sucesso e indica o efeito mínimo que justifica a mudança em produção.
A métrica primária é uma só, e escolhê-la é a decisão mais importante do desenho. Métricas secundárias ajudam a interpretar, mas a decisão de adoção se apoia na primária, e a tentação de declarar várias e escolher a que venceu é a porta de entrada para a multiplicação de falsos positivos. Métricas guardrails, por outro lado, não medem sucesso, medem dano: latência p99, taxa de erro, churn, reclamações de suporte. Se qualquer guardrail degradar além do limite, o experimento falha mesmo com a primária positiva.
A hierarquia de métricas de um experimento bem desenhado tem papéis claros e distintos.
| Papel | Função no experimento | Exemplos |
|---|---|---|
| Primária | Única base da decisão de adoção | Taxa de conversão, receita por usuário |
| Secundárias | Interpretação e diagnóstico do efeito | Clique no botão, tempo na página |
| Guardrails | Detecção de dano colateral | p99 de latência, taxa de erro, churn |
| Diagnósticas | Verificação de saúde do próprio teste | Volume por variante, taxa de exposição |
Declarar essa hierarquia por escrito antes de ligar o tráfego é o que impede a descoberta retrospectiva, na qual a variante perdedora é reinterpretada até parecer vencedora. O registro do plano, com métricas e duração, passa a funcionar como contrato do experimento.
A definição da população elegível merece o mesmo cuidado da métrica. Excluir contas corporativas, bots e sessões de teste evita poluir a amostra com comportamento atípico, e a condição de elegibilidade precisa ser avaliada de forma idêntica para as variantes, sob pena de criar grupos já desbalanceados antes da atribuição. Populações diferentes do plano original, como usuários recorrentes versus estreantes, transformam o mesmo experimento em respostas diferentes, e essa granularidade é exatamente o que a análise por segmento explora depois, com a ressalva de que cada fatia reduz a amostra disponível e a potência do teste.
Ciclo de vida de um experimento
Um experimento de produção atravessa etapas padronizadas, e a fidelidade a elas é o que garante resultados comparáveis entre testes.
- Formulação da hipótese com métrica primária, efeito mínimo relevante e justificativa de negócio, registrada antes de qualquer código.
- Dimensionamento de amostra, calculando a duração necessária a partir da conversão base e do tráfego elegível para a população declarada.
- Implementação da variante atrás de feature flag, com instrumentação dos eventos de exposição e das métricas derivadas.
- Teste A/A de integridade, rodando a mesma experiência nos dois lados para revelar vazamentos de atribuição e ruído de instrumentação.
- Execução pelo prazo calculado, sem encerramento antecipado, com monitoramento contínuo de guardrails.
- Análise final com teste de hipóteses, intervalos de confiança e leitura conjunta de guardrails.
- Decisão e registro do resultado, adotando a variante, descartando ou reformulando a hipótese, com o aprendizado arquivado.
- Limpeza do código experimental, removendo a flag e os caminhos não adotados do binário de produção.
O teste A/A merece destaque entre as etapas: ele executa o experimento sem diferença real entre as variantes, e qualquer significância detectada expõe falha de atribuição, deduplicação ou contagem. Times maduros o executam uma vez por trimestre como verificação da plataforma, e não apenas por experimento.
Funcionamento interno do split estatístico
O motor do experimento é a atribuição determinística de variantes. Cada usuário, identificado por uma chave estável, é mapeado para uma variante por hash combinado com o identificador do experimento, garantindo três propriedades: distribuição aproximadamente uniforme, consistência entre requisições e sessões, e imutabilidade da atribuição ao longo do tempo. Usuários não identificados exigem um identificador anônimo persistente, com cookie ou armazenamento local, sob pena de diluir a amostra com atribuições trocadas.
// Atribuição determinística de variante com salt do experimento
// O salt garante independência entre experimentos simultâneos
function atribuirVariante(experimento, usuario) {
const salt = experimento.id; // isola o hash por experimento
const hash = murmur3(`${salt}:${usuario.identificadorAnonimo}`);
const bucket = hash % 10000; // 10.000 buckets, 1 dígito extra
let acumulado = 0;
for (const variante of experimento.variantes) {
acumulado += variante.alocacao; // alocacao em pontos-base
if (bucket < acumulado) return variante.nome; // atribuição estável
}
return "controle"; // fallback defensivo
}
A alocação 50/50 maximiza a potência estatística para dois grupos, e divisões assimétricas só se justificam para reduzir risco em mudanças invasivas, quando o controle recebe mais tráfego para conter o dano potencial. O evento de exposição, que registra qual usuário viu qual variante e quando, é o dado que conecta a atribuição às métricas, e sua omissão é o erro de instrumentação mais caro da área.
Significância e tamanho de amostra
A estatística do experimento se organiza em torno de uma pergunta: a diferença observada entre as variantes é real ou é ruído amostral? A resposta usa teste de hipóteses com significância pré-fixada, tipicamente alfa de 5%, que controla a probabilidade de adotar uma mudança inútil. A potência, tipicamente 80%, controla a probabilidade de rejeitar uma mudança que de fato funciona. Antes de ligar o experimento, o cálculo de amostra determina quantos usuários por variante são necessários para detectar o efeito mínimo declarado na hipótese.
O dimensionamento depende de quatro grandezas: a taxa de conversão base da métrica, o efeito mínimo relevante, a significância escolhida e a potência desejada. Quanto menor a taxa base, maior a amostra; efeitos pequenos em métricas raras exigem semanas ou meses de experimento, e descubrir isso depois de ligar é o motivo clássico de experimentos inconclusivos.
| Parâmetro | Valor típico | Efeito sobre o desenho |
|---|---|---|
| Significância (alfa) | 5% | Menor alfa exige mais amostra |
| Potência (1 menos beta) | 80% | Maior potência exige mais amostra |
| Efeito mínimo detectável | Definido pelo negócio | Efeito menor exige muito mais amostra |
| Conversão base da métrica | Medida do histórico | Métrica mais rara exige mais amostra |
Um experimento de página de checkout com conversão base de 4%, buscando detectar elevação relativa de 2%, precisa de centenas de milhares de usuários por variante; a conta antecipada é o que separa experimentos decisivos de curiosidades estatísticas.
Guardrails de métricas e análise
A análise segue um ritual fixo ao fim do período planejado, e nunca antes. O teste primário compara as proporções ou as médias das variantes e entrega o intervalo de confiança do efeito. A leitura do intervalo é mais informativa que o p-valor isolado: um efeito estimado em +2,1% com intervalo de +0,4% a +3,8% é um resultado sólido; o mesmo ponto com intervalo de -1,5% a +5,7% é indecisão disfarçada de número.
Os guardrails são avaliados com o mesmo rigor da primária, porque uma mudança que melhora conversão e degrada latência p99 em 300ms pode destruir mais receita do que gera. O padrão de decisão combina três resultados: a primária melhora e os guardrails intactos, adota; a primária neutra e guardrails intactos, descarta ou itera; guardrail violado, reverte imediatamente independente da primária. Experimentos de longo prazo merecem uma reavaliação de sustentação, pois efeitos que decaem com o tempo são comuns em mudanças de interface.
Uma verificação automática indispensável é o sample ratio mismatch, a divergência entre a alocação declarada e a proporção observada de usuários por variante. Um experimento planejado em 50/50 que observa 52/48 em grande volume de amostra sinaliza vazamento de atribuição, filtragem indevida ou bot concentrado, e nenhum resultado analítico é confiável enquanto a causa não for eliminada. Plataformas maduras alarmam automaticamente sobre essa divergência, pois ela invalida o experimento de forma silenciosa se ninguém estiver olhando.
Quando o negócio exige decisões mais rápidas que o prazo fixo, o teste sequencial oferece uma alternativa estatisticamente correta ao peeking: métodos grupo-sequenciais com fronteiras de decisão e o mSPRT recalculam os limites a cada olhada, pagando o preço de amostras maiores quando a diferença é tênue. A diferença para o peeking ingênuo é fundamental: o sequencial é um desenho, o peeking é uma violação.
Diferença para canary e para feature flag
As três técnicas compartilham a mecânica de fracionar tráfego, e a confusão entre elas é frequente; a distinção está no objetivo e no critério de decisão.
| Aspecto | A-B Testing | Canary | Feature Flag |
|---|---|---|---|
| Objetivo | Decidir valor de produto | Validar estabilidade da versão | Desacoplar deploy de release |
| Métrica decisiva | Métrica primária de negócio | Golden signals de saúde | Nenhuma, decisão humana |
| Critério de avanço | Significância estatística | Limiares de erro e latência | Plano de rollout do time |
| Duração típica | Semanas | Minutos a horas | Dias a semanas |
| Redirecionamento | Variantes de experiência | Versões de código | Funcionalidades no mesmo binário |
| Protagonista | Produto e analytics | SRE e plataforma | Engenharia |
Na prática, um lançamento completo pode empilhar as três: a funcionalidade chega à produção atrás de feature flag, a versão do serviço é validada com canary, e o valor de produto é medido com A-B antes da ativação total. Cada camada responde uma pergunta diferente sobre o mesmo deploy.
Um refinamento estatístico relevante em plataformas maduras é a redução de variância por covariância pré-experimental, técnica conhecida como CUPED: usar métricas históricas do mesmo usuário, coletadas antes do experimento, para ajustar a métrica de resposta e encurtar a duração necessária. Em serviços com histórico rico de comportamento, a redução de variância chega a cortar semanas de experimento, e explica por que casas de alto volume executam hipóteses que em plataformas simples seriam inviáveis por tempo e custo.
Frameworks de experimentação
Experimentar em escala exige uma plataforma, e não scripts avulsos, porque os requisitos transversais crescem rápido: atribuição consistente, exposição auditável, guardrails monitorados e proteção de populações. Plataformas comerciais como Optimizely, VWO e LaunchDarkly Experimentation entregam o ciclo completo, e o crescimento do uso de feature flag como infraestrutura de experimento é notável, já que o mesmo mecanismo de rollout por segmento serve ao split estatístico. Casas de grande escala costumam construir o framework interno, como fizeram empresas pioneiras da área, motivadas por volume de experimentos simultâneos e por integração fina com o data warehouse.
A instrumentação do framework conecta o evento de exposição ao pipeline analítico, onde as métricas são computadas por variante. Registros de eventos imutáveis e deduplidáveis são pré-requisito, e a plataforma precisa verificar, antes de iniciar, se a taxa de eventos de exposição bate com o volume de tráfego declarado; divergência nesse teste de integridade invalida o experimento antes de ele começar.
A integração com o ciclo de entrega contínua completa o quadro: a variante candidata entra em produção atrás de feature flag, o canary valida a estabilidade da versão que a carrega, e o framework de experimentação assume a partir da exposição. Nessa costura, o responsável pela orquestração é o pipeline, que conduz as etapas na ordem correta, e a governança de privacidade define o que pode ser rastreado, com atenção a consentimento de cookies e a restrições regulatórias de identificação de usuários. Experimentos que ignoram essa camada jurídica viram passivos de conformidade, e não resultados de aprendizado.
Armadilhas: peeking, novidade e confundidores
As falhas de método são mais determinantes que as falhas de infraestrutura, e as mais comuns são evitáveis com desenho disciplinado.
- Peeking: olhar o resultado antes do prazo e encerrar no primeiro p-valor pequeno; essa prática inflama massivamente a taxa de falsos positivos, porque a variância acumulada não seguiu o desenho. A correção é duração fixada antes, ou sequencial com correção estatística específica.
- Efeito de novidade: usuários reagem com entusiasmo passageiro a qualquer mudança, beneficiando a variante nas primeiras semanas; a resposta é duração suficiente para estabilizar e, quando possível, análise por coorte de estreantes contra veteranos.
- Amostra contaminada: atribuição instável entre sessões, cache de edge servindo variante errada ou bots inflando um dos lados; monitorar a consistência da atribuição é tarefa da plataforma, não do analista.
- Confundidores sazonais: iniciar experimento às vésperas de uma campanha ou de um feriado expõe as variantes a janelas de tráfego não comparáveis; períodos de reflexão cruzada, em que grupos são trocados temporariamente, ajudam a separar efeito de período.
- Testes múltiplos: avaliar dezenas de métricas e anunciar a que ficou significante multiplica falsos positivos; a correção de múltiplas comparações é obrigatória quando a exploração é exploratória por natureza.
- Unidade de análise errada: medir por evento quando a atribuição é por usuário mistura níveis de agregação e distorce a variância; a unidade da análise precisa ser a unidade da atribuição.
- Interferência entre experimentos: testes simultâneos que tocam a mesma superfície ou a mesma métrica primária contaminam-se mutuamente; a agenda de experimentos e o particionamento por superfície são a resposta organizacional.
- Decisão sem guardrails de longo prazo: adotar a variante pelo efeito imediato da primária sem acompanhar retenção em semanas produz vitórias de curto prazo que corroem o negócio; experimentos de mudanças estruturais merecem janela de sustentação após a adoção.
Entre as boas práticas, registre a hipótese e o plano de análise antes de ligar o experimento, com métrica primária única, guardrails declarados e duração calculada; valide a integridade da instrumentação com uma semana de alocação nula, em que as variantes servem a mesma experiência, um teste chamado A/A que revela ruído e vazamento de atribuição; e arquive o resultado, positivo ou negativo, como conhecimento da organização. Um programa de experimentação maduro mede-se pela proporção de decisões que mudaram de rumo por causa dos dados, e não pela quantidade de testes executados. O produto final de um bom experimento não é só o número, e sim a decisão tomada com ele e o conhecimento acumulado sobre o comportamento dos usuários.