Efeito de Arrasto entre Testes A/B: o resíduo do anterior
O efeito de arrasto entre testes A/B contamina o próximo experimento nos mesmos baldes. Medimos 93% de falso positivo num A/A e a correção que zera isso.

📚 Este artigo faz parte do guia Significância Estatística em Teste A/B: O Guia.
Quando o segundo teste reaproveita os mesmos baldes do primeiro, o resíduo do primeiro entra na leitura do segundo como se fosse efeito. Na simulação deste artigo, um teste A/A rodado logo depois de um experimento que deixou o grupo de tratamento 0,60 ponto percentual abaixo acusou resultado significante em 93,30 por cento das réplicas, contra os 5 por cento nominais. Com re-sorteio dos usuários a cada experimento, a mesma medição voltou para 4,47 por cento. O problema não está na estatística nem no volume de tráfego: está em quem foi sorteado para onde, e quando. Este guia mostra por que o sistema de baldes cria o problema, mede quanto tempo o resíduo sobrevive, prova que a verificação de SRM não pega isso, e descreve a correção. Faz parte do nosso guia completo de teste A/B e complementa teste A/A para validar o setup e efeito novidade.
O sistema de baldes e o preço da conveniência
Plataformas grandes não sorteiam o usuário direto para o experimento. Elas sorteiam o usuário uma vez para um balde, e depois alocam baldes aos experimentos. Kohavi, Deng, Frasca, Longbotham, Walker e Xu descrevem o desenho e a vantagem dele: é flexível e permite o reuso fácil de usuários em experimentos subsequentes. O mesmo grupo descreve, no artigo sobre a plataforma do Bing em escala, o mecanismo de isolamento que roda em cima disso: uma linha numérica, equivalente às camadas do Google, garante que um usuário fique em um único experimento por linha, com a atribuição feita por um hash pseudoaleatório de um identificador anônimo.
A conveniência é real. O custo também. Se o sorteio não se repete a cada experimento, quem estava no tratamento ontem tende a estar no tratamento de novo hoje, e carrega junto tudo que o teste anterior fez com ele: o hábito que criou, a frustração que causou, o cadastro que completou, o carrinho que abandonou.
O resultado clássico está no artigo de Kohavi, Deng, Frasca, Longbotham, Walker e Xu: um experimento rodou e as métricas não relacionadas à mudança se moveram em direções inesperadas, com significância estatística alta. Ao rodar de novo numa amostra maior, muitos desses efeitos simplesmente sumiram. A explicação era o arrasto.
Quanto tempo o resíduo sobrevive
Os autores relatam duas medições. Na primeira, o experimento foi rodado em três estágios: 7 dias de A/A nos baldes, 47 dias de A/B ligado, e depois mais de três semanas monitorando os mesmos baldes com o experimento já desligado. O efeito de arrasto no critério principal, sessões por usuário, era visível e parece morrer por volta da terceira semana depois do fim do experimento. Na segunda, um bug expôs os usuários do tratamento a uma experiência muito ruim: mesmo depois de três meses, os baldes ainda não tinham voltado aos níveis anteriores ao experimento.
Simulamos essa dinâmica para poder medir o efeito sobre a decisão. O desenho: 1.000 baldes de 60 usuários cada, 60.000 usuários por leitura, taxa base de 5 por cento, um teste 1 que deixou o grupo de tratamento 0,60 ponto percentual abaixo, e um resíduo que decai com meia-vida de 14 dias. Depois disso, um teste 2 é rodado como A/A puro, ou seja, sem nenhum efeito real, e medimos quantas vezes ele acusa significância. São 3.000 réplicas por linha, com erro-padrão de Monte Carlo de 0,40 ponto percentual em torno de 5 por cento.
| descanso entre os testes | resíduo naquele dia | reusando o balde: falso positivo | lift medido médio | com re-sorteio: falso positivo |
|---|---|---|---|---|
| 0 dia | -0,6000 pp | 93,30% | -0,6032 pp | 4,47% |
| 7 dias | -0,4243 pp | 67,93% | -0,4196 pp | 4,87% |
| 14 dias | -0,3000 pp | 39,87% | -0,2982 pp | 4,90% |
| 21 dias | -0,2121 pp | 23,10% | -0,2155 pp | 5,13% |
| 28 dias | -0,1500 pp | 13,90% | -0,1496 pp | 6,00% |
| 42 dias | -0,0750 pp | 7,03% | -0,0743 pp | 4,97% |
| 60 dias | -0,0308 pp | 5,07% | -0,0292 pp | 4,47% |
| 90 dias | -0,0070 pp | 4,77% | -0,0055 pp | 5,43% |
Duas leituras saem daí.
A primeira: descanso funciona, mas é caro demais. Três semanas de espera ainda deixavam o falso positivo em 23,10 por cento, quase cinco vezes o nominal. Só com 60 dias de balde parado a leitura voltou ao lugar. Poucos times têm capacidade de tráfego para dar dois meses de férias a metade da base entre um teste e outro.
A segunda: re-sortear resolve independentemente do descanso. A coluna da direita fica entre 4,47 e 6,00 por cento em todas as linhas, inclusive com descanso zero. É a diferença entre esperar o problema passar e desmontar o problema.
Um exemplo trabalhado, com a calculadora
Este é um único teste A/A rodado imediatamente depois do experimento anterior, sem nenhum descanso, sobre os mesmos baldes:
- A (baldes que estavam no controle do teste 1): 30.000 visitantes, 1.464 conversões, taxa de 4,8800 por cento.
- B (baldes que estavam no tratamento do teste 1): 30.000 visitantes, 1.300 conversões, taxa de 4,3333 por cento.
Colando esses números na calculadora de significância, o veredito é:
- estatística z de -3,1939
- valor-p de 0,001404
- diferença absoluta de -0,5467 ponto percentual
- diferença relativa de -11,20 por cento
- intervalo de confiança de 95 por cento de -0,8821 a -0,2112 ponto percentual
- resultado significante, vencedor: A
Um valor-p de 0,001404 num teste onde as duas variações são idênticas. Nada foi mudado. Nenhum código foi implantado. A conclusão que sai desse painel, se ninguém souber o que aconteceu antes, é que a variação derrubou a conversão em 11 por cento.
Rode você mesmo os números na calculadora abaixo:
Teste z bilateral de duas proporções. "Sem significância" quase sempre quer dizer que falta amostra, não que as versões são iguais.
O SRM não pega isso
A verificação de proporção de amostra é a defesa padrão contra sorteio quebrado, e é uma boa defesa: ver SRM e divisão desigual de tráfego. Ela simplesmente não é a defesa para este problema.
Rodando o teste de qui-quadrado sobre a divisão do exemplo acima:
| verificação | resultado |
|---|---|
| visitantes em A | 30.000 |
| visitantes em B | 30.000 |
| divisão esperada | 50/50 |
| estatística de qui-quadrado | 0,0000 |
| valor-p do SRM | 1,0000 |
| desvio detectado | não |
O sorteio está perfeito. A contagem está perfeita. O problema não é quantos usuários caíram em cada braço, é quais. Nenhum verificador de proporção enxerga isso, porque a informação que denuncia o arrasto não está nas contagens do teste atual, está no histórico de quem esteve onde no teste anterior.
Esse é o mesmo tipo de armadilha de Bom demais para ser verdade e a lei de Twyman: um resultado forte demais em métricas que nem deveriam ter se mexido é sinal de problema de medição, não de descoberta.
O que acontece com um teste que tem efeito de verdade
O caso do A/A é didático, mas o dano real aparece quando existe um efeito genuíno para medir e o arrasto o distorce. Rodamos o mesmo desenho com um efeito real de +4 por cento relativo, ou seja, +0,20 ponto percentual, 3.000 réplicas por linha:
| descanso | reusando: taxa de resultado significante | lift medido médio | re-sorteando: taxa significante | lift medido médio |
|---|---|---|---|---|
| 0 dia | 63,33% | -0,4051 pp | 19,07% | +0,1931 pp |
| 7 dias | 25,53% | -0,2274 pp | 21,33% | +0,2027 pp |
| 14 dias | 8,57% | -0,0977 pp | 19,00% | +0,1950 pp |
| 21 dias | 4,53% | -0,0167 pp | 20,53% | +0,1981 pp |
| 28 dias | 6,10% | +0,0516 pp | 20,83% | +0,2015 pp |
| 60 dias | 16,27% | +0,1698 pp | 19,23% | +0,1946 pp |
Leia a coluna do lift medido com atenção. O efeito real é de +0,20 ponto percentual. Com descanso zero e baldes reusados, o teste mede -0,4051, ou seja, sinal trocado. E os 63,33 por cento de resultados significantes não são vitórias: são condenações. Em quase dois terços das réplicas, uma variação que de fato melhora a conversão é declarada perdedora com significância estatística.
Repare também na linha de 21 dias, onde a taxa de significância cai para 4,53 por cento. Não é uma boa notícia: é o ponto em que o resíduo negativo cancela quase exatamente o efeito positivo real, e o teste conclui empate sobre uma melhoria que existe. O arrasto não empurra o resultado sempre para um lado, ele empurra para o lado do teste anterior.
A coluna do re-sorteio, em contraste, mede entre +0,1931 e +0,2027 ponto percentual em todos os intervalos, com o efeito real de +0,2000 no meio da faixa.
A correção: re-aleatorização localizada
A causa raiz, na formulação dos autores do Bing, é direta: o sistema de baldes não re-sorteia a cada experimento. Ele depende de uma reatribuição infrequente dos baldes, e entre uma reatribuição e outra a alocação fica constante por um período relativamente longo.
Trocar a função de hash resolve, mas tem um custo operacional pesado: o sistema de baldes acopla todos os experimentos de uma mesma linha, então trocar a função exige parar todos os experimentos daquela linha, o que machuca capacidade e agilidade.
A alternativa que eles descrevem é um sistema de baldes em dois níveis:
- O nível de cima define quais unidades entram no experimento.
- A atribuição de tratamento acontece no nível de baixo, com uma semente de hash diferente para cada experimento.
Isso garante um sorteio por experimento, de modo que a atribuição de tratamento fica independente de qualquer evento histórico, incluindo o arrasto de experimentos anteriores.
O custo declarado por eles é um só, e é importante: não dá para usar um controle compartilhado. Cada experimento precisa do próprio controle, para que qualquer resíduo de um experimento anterior fique misturado entre controle e tratamento em vez de concentrado num lado.
Em troca vem um benefício que compensa bem. Com re-aleatorização localizada, dá para rodar um teste A/A retrospectivo sem gastar tempo de calendário: você troca a função de hash e reavalia os últimos dias antes do experimento como se fossem um A/A. Pela propriedade de independência da re-aleatorização localizada, comparar retrospectivamente os usuários que teriam sido atribuídos a controle e tratamento em qualquer período anterior ao experimento é um A/A legítimo. Se esse A/A mostra efeito nas métricas principais, com valor-p abaixo de 0,2 por exemplo, por conta de uma divisão azarada, troca-se a chave de hash e tenta de novo, antes de gastar um dia de tráfego.
O que fazer se você não controla a plataforma
Nem todo time pode reescrever o sistema de atribuição da ferramenta que usa. O que sobra, em ordem de preferência:
- Verifique se a sua ferramenta já re-sorteia por experimento. Muita ferramenta moderna faz o hash com uma combinação de identificador do usuário e identificador do experimento, o que é exatamente a re-aleatorização localizada. Se for o caso, o problema não existe para você e vale confirmar isso por escrito, não por suposição.
- Rode um A/A retrospectivo antes de cada teste. Pegue os dias anteriores, aplique a divisão que o teste novo vai usar e verifique se as métricas principais empatam. É o teste que teria pego o caso de 93,30 por cento na primeira tentativa.
- Trate valor-p abaixo de 0,2 no A/A como sinal amarelo, não como aprovação. O critério é dos próprios autores do Bing e é deliberadamente frouxo, porque o custo de um falso alarme aqui é trocar uma chave de hash, e o custo de deixar passar é um trimestre de decisão errada.
- Registre no relatório qual experimento rodou antes naqueles baldes. Sem esse registro, ninguém consegue nem levantar a hipótese de arrasto quando o resultado sair estranho.
- Desconfie de métricas que se moveram sem motivo. Se a mudança foi no rodapé e a métrica de busca se mexeu com significância alta, a hipótese principal não é uma descoberta.
- Descanso é o último recurso, e você precisa dimensioná-lo. Na nossa simulação, 21 dias ainda deixavam 23,10 por cento de falso positivo. Se for esperar, espere de verdade e meça com um A/A antes de voltar a testar.
Faça isso automático na Donnu
Arrasto é um problema de arquitetura de sorteio, não de análise. Na Donnu a atribuição de cada experimento sai de um hash que combina o identificador do usuário com o identificador daquele experimento, então dois testes seguidos nunca herdam a mesma divisão: quem foi tratado ontem se espalha entre controle e variação hoje. O painel também guarda quais experimentos rodaram antes sobre a mesma população, para que a hipótese de arrasto seja a primeira coisa que alguém consegue checar quando uma métrica não relacionada se mexe. Se a sua ferramenta atual sorteia o usuário uma vez e reaproveita a divisão, esse é o item que precisa mudar antes de qualquer refinamento estatístico valer alguma coisa.
Perguntas frequentes
As respostas curtas estão na seção de perguntas frequentes desta página, geradas a partir do mesmo material medido aqui.
Referências
- Ron Kohavi, Alex Deng, Brian Frasca, Roger Longbotham, Toby Walker e Ya Xu. Trustworthy Online Controlled Experiments: Five Puzzling Outcomes Explained, KDD 2012. Traz a seção sobre efeito de arrasto: a descrição do sistema de baldes, o caso em que métricas não relacionadas se moveram com significância alta e sumiram numa amostra maior, o resíduo que morre por volta da terceira semana num caso e não some em três meses no outro, a re-aleatorização localizada por sistema de baldes em dois níveis, o custo do controle não compartilhado e o teste A/A retrospectivo com o critério de valor-p abaixo de 0,2.
- Ron Kohavi, Alex Deng, Brian Frasca, Toby Walker, Ya Xu e Nils Pohlmann. Online Controlled Experiments at Large Scale, KDD 2013. Descreve a arquitetura de experimentação do Bing, incluindo a linha numérica de atribuição ortogonal (equivalente às camadas do Google), o isolamento que garante um único experimento por linha, e a atribuição por hash pseudoaleatório de identificador anônimo feita já na chegada da requisição.
- Ron Kohavi, Alex Deng, Roger Longbotham e Ya Xu. Seven Rules of Thumb for Web Site Experimenters, KDD 2014. Contexto sobre por que o piso de amostra em experimentação online é maior do que os manuais sugerem, com a regra de 355 vezes o quadrado do coeficiente de assimetria por variação, recomendada quando o módulo da assimetria passa de 1.
Leia também
Perguntas frequentes
- O que é efeito de arrasto entre testes A/B?
- É quando os mesmos usuários que foram afetados pelo primeiro experimento são reaproveitados no experimento seguinte, e o resíduo do primeiro contamina a leitura do segundo. O termo vem do sistema de baldes usado por plataformas grandes: os usuários são sorteados uma vez em baldes, e os baldes é que vão sendo alocados de experimento para experimento. Como o sorteio não se repete a cada teste, quem esteve no tratamento ontem tende a estar no tratamento de novo hoje, carregando junto tudo que o teste anterior fez com ele.
- Quanto tempo o efeito de arrasto dura?
- Mais do que a intuição sugere. Kohavi e coautores registram dois casos no Bing: num deles, um experimento de 47 dias deixou um resíduo mensurável nos mesmos baldes por cerca de três semanas depois de desligado; no outro, um bug que expôs os usuários a uma experiência muito ruim deixou os baldes sem voltar aos níveis anteriores mesmo depois de três meses. Na simulação deste artigo, com meia-vida de 14 dias, a taxa de falso positivo de um teste A/A só voltou ao patamar nominal de 5 por cento depois de 60 dias de descanso.
- O teste A/A pega o efeito de arrasto?
- Pega, e é a principal defesa disponível quando você não pode re-sortear. Na nossa simulação, um teste A/A rodado imediatamente depois de um experimento que deixou o tratamento 0,60 ponto percentual abaixo acusou resultado significante em 93,30 por cento das réplicas, contra os 5 por cento esperados. Um único A/A desses devolveu 4,8800 por cento contra 4,3333 por cento, com valor-p de 0,001404 e intervalo de confiança de menos 0,8821 a menos 0,2112 ponto percentual: um resultado forte e completamente falso.
- A verificação de SRM não detecta esse problema?
- Não, e essa é a parte perigosa. O SRM procura desvio na PROPORÇÃO de usuários entre os braços, e no efeito de arrasto a divisão está perfeita. No nosso exemplo trabalhado, os dois braços receberam exatamente 30.000 usuários e o teste de qui-quadrado devolveu estatística 0,0000 e valor-p 1,0000. O sorteio está certo, a contagem está certa, e mesmo assim a leitura está errada. Nenhum verificador de proporção vai levantar a mão aqui.
- Qual é a correção definitiva do efeito de arrasto?
- Re-sortear os usuários a cada experimento, o que Kohavi e coautores chamam de re-aleatorização localizada. A implementação descrita por eles é um sistema de baldes em dois níveis, em que o primeiro nível define quem entra no experimento e o segundo faz a atribuição de tratamento com uma semente de hash diferente por experimento. Na nossa simulação, com re-sorteio a taxa de falso positivo ficou entre 4,47 e 6,00 por cento em todos os intervalos de descanso testados, incluindo descanso zero.
- Qual é o custo de re-sortear a cada experimento?
- Você perde o controle compartilhado. Kohavi e coautores registram essa desvantagem de forma explícita: com re-aleatorização por experimento, cada experimento precisa do seu próprio controle, para que qualquer resíduo do experimento anterior fique misturado igualmente entre controle e tratamento. Em compensação, aparece um ganho que compensa bem: dá para rodar um teste A/A retrospectivo sem gastar tempo de calendário, reavaliando os últimos dias antes do experimento como se fossem um A/A. Se esse A/A acusar efeito nas métricas principais, com valor-p abaixo de 0,2 por exemplo, troca-se a chave de hash e tenta de novo.