Diferenças em Diferenças em Teste A/B: medir sem sorteio
Sem sortear usuário, diferenças em diferenças compara a variação do tratado com a do controle. Como fazer a conta e por que o erro-padrão engana.

📚 Este artigo faz parte do guia Significância Estatística em Teste A/B: O Guia.
Quando a mudança não cabe num sorteio de usuário, as duas leituras óbvias erram o sinal. Na simulação deste guia, comparar o grupo tratado consigo mesmo antes e depois devolveu menos 0,15 ponto, comparar o tratado com o controle depois da mudança devolveu menos 0,25 ponto com valor-p de cerca de 3,2 vezes 10 elevado a menos 7, e diferenças em diferenças devolveu mais 0,25 ponto, que era o efeito verdadeiro. Este guia mostra como montar a conta, que premissa ela cobra, e por que o erro-padrão dela é o verdadeiro campo minado: no nosso placebo, a leitura convencional acusou efeito em 29,40 por cento das vezes em que não havia efeito nenhum. Faz parte do nosso guia completo de teste A/B e complementa experimentos geográficos e randomização por cluster.
O problema: existe mudança que não cabe no sorteio
Um teste A/B comum sorteia o usuário. Metade vê a versão A, metade vê a B, e a comparação é honesta porque o sorteio garante que os dois grupos são iguais em tudo, inclusive no que ninguém mediu.
Só que nem toda mudança aceita esse sorteio:
- a mudança é do backend por região. Uma nova transportadora que só opera em certos estados, um meio de pagamento local, uma regra fiscal.
- a mudança é de preço. Mostrar preços diferentes para usuários sorteados no mesmo mercado é um problema jurídico e de confiança antes de ser um problema estatístico.
- a mudança é de marca. Campanha de TV, patrocínio, mudança de posicionamento. Não existe versão B para metade do país.
- a mudança já aconteceu. O time subiu, ninguém preparou sorteio, e agora alguém quer saber se funcionou.
- a unidade é grande demais. Com 12 lojas ou 8 mercados, sortear metade deixa poder estatístico perto de zero, como já tratamos em randomização por cluster.
Nesses casos, a mudança entra por um recorte que você não escolheu ao acaso. E aí a comparação mais natural fica envenenada, porque o recorte tratado já era diferente do resto antes de qualquer coisa acontecer.
Vale registrar que a alternativa preferida continua sendo sortear. Blake, Nosko e Tadelis conseguiram sortear ao nível de mercado num experimento de mídia paga do eBay e a diferença entre as leituras foi brutal: a estimativa por mínimos quadrados comuns devolveu retorno sobre investimento acima de 4.100 por cento, a mesma conta com controles de dia e de geografia devolveu acima de 1.400 por cento, e a leitura experimental devolveu menos 63 por cento, com intervalo de confiança de 95 por cento entre menos 124 por cento e menos 3 por cento. Diferenças em diferenças é o que se usa quando o sorteio não está disponível, não uma preferência sobre ele.
As duas leituras erradas, e a calculadora que confirma as duas
Simulamos um rollout de checkout que só funcionava em parte das praças. Quatro números resumem tudo:
| grupo | antes | depois | variação |
|---|---|---|---|
| praças tratadas | 3,10% | 2,95% | menos 0,15 pp |
| praças de controle | 3,60% | 3,20% | menos 0,40 pp |
Duas leituras óbvias saem daí, e as duas erram.
Leitura 1, antes e depois só no tratado. De 3,10 para 2,95 por cento, ou seja, menos 0,15 ponto, menos 4,84 por cento em termos relativos. Veredito: a mudança piorou o checkout. Errado, porque o mundo inteiro piorou nesse intervalo.
Leitura 2, tratado contra controle no período de depois. 2,95 contra 3,20 por cento, ou seja, menos 0,25 ponto, menos 7,81 por cento. Veredito: a mudança piorou o checkout. Errado, porque as praças tratadas já convertiam menos antes.
A leitura 2 é a mais perigosa das duas, porque ela passa num teste de significância. Com 260.000 visitantes nas praças de controle e 240.000 nas tratadas no período de depois, cole os quatro números na calculadora:
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 que ela devolve, e o que vale conferir campo a campo:
| campo | controle (A) | tratado (B) |
|---|---|---|
| visitantes | 260.000 | 240.000 |
| conversões | 8.320 | 7.080 |
| taxa | 3,2000% | 2,9500% |
Resultado: diferença de menos 0,2500 ponto, lift relativo de menos 7,81 por cento e valor-p tão pequeno que a calculadora mostra apenas menor que 0,0001. A conta por trás disso é z igual a menos 5,1117, com valor-p de cerca de 3,2 vezes 10 elevado a menos 7 e intervalo de confiança de 95 por cento da diferença entre menos 0,3457 e menos 0,1543 ponto, que a calculadora arredonda para menos 0,3 a menos 0,2 ponto. Um resultado limpo, apertado e completamente enganoso.
Agora rode a mesma calculadora no período de antes, quando ainda não existia mudança nenhuma para medir: 9.000 de 250.000 no controle contra 7.130 de 230.000 no tratado. Ela devolve diferença de menos 0,5000 ponto, lift relativo de menos 13,89 por cento e z igual a menos 9,6031, com valor-p tão pequeno que a calculadora mostra apenas menor que 0,0001. A “derrota” já estava lá antes de existir tratamento. A calculadora não errou: ela respondeu com precisão a uma pergunta errada.
A conta, em uma linha
Diferenças em diferenças não compara níveis, compara variações:
efeito = (tratado depois menos tratado antes) menos (controle depois menos controle antes)
Com os nossos números: (2,95 menos 3,10) menos (3,20 menos 3,60) = (menos 0,15) menos (menos 0,40) = mais 0,25 ponto.
A forma mais útil de ler isso é como uma tabela de quatro células, porque ela deixa explícito o que cada subtração remove:
| antes | depois | variação | |
|---|---|---|---|
| tratado | 3,10% | 2,95% | menos 0,15 pp |
| controle | 3,60% | 3,20% | menos 0,40 pp |
| diferença | menos 0,50 pp | menos 0,25 pp | mais 0,25 pp |
A primeira subtração, por linha, remove tudo que é fixo de cada grupo: mix de tráfego, ticket médio, qualidade da base, canal dominante. Se as praças tratadas sempre converteram meio ponto menos, esse meio ponto sai da conta.
A segunda subtração, entre linhas, remove tudo que aconteceu com o mundo no intervalo: sazonalidade, feriado, concorrente em promoção, mudança no algoritmo de um canal. No nosso caso, os 0,40 ponto de queda que atingiram todo mundo.
O que sobra é o que aconteceu só com o tratado e só depois. É por isso que a leitura funciona mesmo com grupos de níveis muito diferentes: a premissa não é sobre o nível, é sobre a variação.
O exemplo clássico dessa leitura é de Card e Krueger. Em 1º de abril de 1992, o salário mínimo de Nova Jersey subiu de 4,25 para 5,05 dólares por hora. Eles pesquisaram 410 lanchonetes em Nova Jersey e no leste da Pensilvânia, antes e depois, e usaram a Pensilvânia, onde o salário mínimo não mudou, como grupo de controle. O ganho relativo, nas palavras deles a “diferença em diferenças” das variações de emprego, foi de 2,76 empregados equivalentes em tempo integral, ou 13 por cento, com estatística t de 2,03.
A premissa: tendência comum, e como olhar para ela
A conta só entrega o efeito causal se valer a tendência comum: na ausência da mudança, tratado e controle teriam variado na mesma medida.
Essa premissa não é testável, porque ela fala de um mundo que não aconteceu. Mas ela fica muito mais ou muito menos crível conforme o que se vê antes da mudança. Se as duas séries andaram juntas por vários períodos e só descolaram quando a mudança entrou, a premissa é razoável. Se elas já vinham abrindo, a leitura está morta.
Três checagens práticas, todas baratas:
- Plote as duas séries cruas. Antes de qualquer regressão. Se elas não andam juntas no gráfico, nenhuma sofisticação vai consertar.
- Rode a conta em períodos placebo. Finja que a mudança entrou duas semanas antes de ter entrado, com dados só do período anterior. O resultado deveria ser perto de zero.
- Rode a conta em métricas placebo. Uma métrica que a mudança não poderia ter afetado, por exemplo taxa de rejeição da home num rollout que só mexeu no checkout. Se ela também “melhorou”, o que você mediu não foi a mudança.
Essa lógica é a mesma dos experimentos de validação que tratamos em teste A/A: se o método acha efeito onde não pode haver, o problema é o método.
O erro-padrão é o campo minado de verdade
O ponto estimado de diferenças em diferenças é aritmética simples. O intervalo de confiança em volta dele é onde quase todo mundo se machuca, e o dano é sistemático.
Bertrand, Duflo e Mullainathan pesquisaram todos os artigos de diferenças em diferenças publicados em seis revistas de economia entre 1990 e 2000, 92 no total. Dos 65 que usavam mais de dois períodos, apenas cinco tratavam explicitamente da correlação serial, e quatro desses cinco usavam uma correção paramétrica que, como eles mostram depois, quase não muda nada. Além disso, 80 dos 92 artigos tinham problema de erro agrupado, porque a unidade de observação era mais fina que a unidade de variação, e só 36 lidavam com isso.
Para medir o estrago, eles sortearam leis fictícias em dados de salários femininos da Current Population Survey, mulheres de 25 a 50 anos, de 1979 a 1999, cerca de 900 mil observações. Como as leis eram inventadas, qualquer efeito significativo é falso positivo, e a taxa correta seria 5 por cento. A tabela deles:
| leitura | taxa de rejeição sem efeito nenhum |
|---|---|
| micro dados, mínimos quadrados comuns | 67,5% |
| micro dados, erro-padrão agrupado por célula estado-ano | 44,0% |
| dados agregados por estado e ano | 43,5% |
| lei fictícia SEM correlação serial | 6,0% |
| dados manufaturados com autocorrelação de 0,8 | 37,3% |
A linha decisiva é a quarta. Quando eles construíram uma lei que liga e desliga ao acaso, sem correlação serial, a taxa de rejeição caiu para 6 por cento. O problema não é o método, é a combinação de série correlacionada consigo mesma com regra de tratamento também correlacionada consigo mesma. Nos dados deles, a autocorrelação de primeira ordem dos resíduos era de 0,51, e a de segunda e terceira ordem, 0,44 e 0,33, caindo bem mais devagar do que um processo autorregressivo de primeira ordem preveria.
Reproduzimos o mesmo experimento numa escala de produto: 40 praças, 8 tratadas, 4 semanas antes e 4 depois, 7.500 visitantes por praça por semana, com ruído autocorrelacionado dentro de cada praça.
Com um efeito verdadeiro de 0,25 ponto plantado, a estimativa saiu em 0,2532 ponto, praticamente em cima. O que muda conforme o erro-padrão:
| erro-padrão | valor | t | leitura |
|---|---|---|---|
| calculado por visitante, como se cada visita fosse independente | 0,03738 pp | 6,775 | confiança exagerada |
| agrupado por praça | 0,05987 pp | 4,230 | honesto |
| inferência por permutação, 20.000 sorteios | ponto de corte empírico | valor-p 0,0006 | honesto |
O erro-padrão agrupado por praça é 1,6 vez o ingênuo. E o custo disso aparece de verdade no placebo: repetimos o procedimento 2.000 vezes sem plantar efeito nenhum, sorteando ao acaso quais praças seriam “tratadas”.
Na nossa simulação, o erro-padrão calculado por visitante declarou efeito significativo em 29,40 por cento dos sorteios sem efeito nenhum, quase seis vezes a taxa correta. A inferência por permutação devolveu 5,15 por cento, praticamente em cima dos 5 por cento teóricos.
A inferência por permutação é o caminho mais simples e mais robusto, e é exatamente a recomendação principal de Bertrand, Duflo e Mullainathan, por funcionar independentemente do tamanho da amostra. Ela cabe em três passos:
- Calcule o efeito de diferenças em diferenças com o conjunto real de praças tratadas.
- Sorteie ao acaso, milhares de vezes, um conjunto fictício de praças tratadas do mesmo tamanho, e calcule o efeito de cada sorteio.
- O valor-p é a fração dos sorteios fictícios cujo efeito absoluto ficou maior ou igual ao real.
No nosso caso, com 20.000 sorteios, apenas 12 deles bateram ou superaram o efeito observado: valor-p de 0,0006.
Quando permutar não for prático, as duas alternativas testadas por eles também funcionam com muitas unidades: colapsar tudo em dois períodos, um antes e um depois, que devolveu 6 por cento de rejeição; e permitir uma matriz de covariância arbitrária dentro de cada estado, que na prática é agrupar o erro-padrão por estado e devolveu 6 por cento. As duas degradam com poucas unidades: no artigo, o agrupamento sobe para 8,5 por cento com 10 estados e 15 por cento com 6, e a agregação sobe para 9,5 por cento com 20 estados e 31,5 por cento com 6.
Quando o rollout foi escalonado
Até aqui todas as praças tratadas entraram na mesma data. Na vida real o rollout costuma ser escalonado: um grupo na semana 3, outro na 6, outro na 9. A tentação é jogar tudo numa regressão com efeitos fixos de praça e de semana e ler o coeficiente do indicador de tratamento.
Goodman-Bacon mostrou o que esse coeficiente realmente é: uma média ponderada de todas as comparações 2x2 possíveis entre grupos de datas de entrada. Algumas dessas comparações são as que você esperava, tratado contra nunca tratado. Outras usam um grupo tratado mais cedo como controle de um grupo tratado mais tarde, no intervalo em que o primeiro já está tratado.
Nas palavras de Goodman-Bacon, quando os efeitos não mudam ao longo do tempo, a leitura devolve uma média ponderada pela variância dos efeitos entre grupos e todos os pesos são positivos. Pesos negativos só aparecem quando o efeito varia ao longo do tempo: quando unidades já tratadas fazem o papel de controle, a mudança do efeito delas ao longo do tempo é subtraída da estimativa. Ele registra que isso não implica falha do desenho, mas que serve de alerta contra resumir efeitos que variam no tempo num coeficiente único.
Os pesos, ele mostra, são proporcionais ao tamanho dos grupos e à variância do indicador de tratamento em cada par, e essa variância é maior para quem foi tratado no meio do painel. Ou seja: quem entrou no meio do rollout domina o resultado, sem que ninguém tenha decidido isso.
Na prática, para um rollout escalonado:
- Não leia um coeficiente único. Estime um efeito por período desde a entrada, o chamado estudo de eventos, e olhe o formato da curva.
- Prefira estimadores que só usam controles limpos, ou seja, que comparam cada grupo tratado apenas com quem ainda não foi tratado.
- Se for usar um número só, diga quem o dominou. Um coeficiente cujo peso está quase todo no grupo do meio não é “o efeito do rollout”.
Roteiro de diferenças em diferenças em sete passos
- Escreva a pergunta antes de olhar os dados. Qual mudança, qual métrica, qual recorte tratado, qual data de corte. Isso vai para o plano de análise pré-registrado igual a um teste sorteado.
- Escolha o grupo de controle pela tendência, não pelo nível. O melhor controle não é o mais parecido em conversão, é o que variou junto com o tratado nos períodos anteriores.
- Plote as séries cruas dos dois grupos antes de calcular qualquer coisa. Se o gráfico não convence, o número não vai convencer.
- Rode períodos placebo e métricas placebo. Resultado grande onde não pode haver efeito derruba a leitura.
- Calcule as quatro médias e faça a subtração dupla. Isso é aritmética e leva minutos.
- Não use o erro-padrão por visitante. Use permutação, ou agrupe por unidade de tratamento, ou colapse em dois períodos. Diga no relatório qual dos três você usou.
- Se o rollout foi escalonado, publique a curva por período, não um coeficiente único.
Erros comuns
- Comparar tratado e controle só no período de depois. É a leitura 2 deste guia. Ela devolve o sinal invertido quando os níveis já diferiam, e devolve com valor-p bonito.
- Comparar o tratado consigo mesmo antes e depois. Isso atribui à mudança tudo que aconteceu no mundo no intervalo, inclusive sazonalidade e concorrente.
- Escolher o controle depois de ver o resultado. Com dez candidatos a controle, um deles devolve o número que você queria. Escolher por tendência prévia, e escolher antes, é o que separa medição de justificativa.
- Usar o erro-padrão que a ferramenta de teste A/B oferece. Ela pressupõe sorteio por usuário e independência entre visitas. Aqui nem uma coisa nem outra vale.
- Achar que a checagem de SRM na divisão de tráfego cobre isso. SRM compara tamanhos de grupos sorteados. Aqui não houve sorteio nenhum.
- Ignorar composição que muda no meio. Se o mix de tráfego das praças tratadas mudou entre antes e depois por outro motivo, a subtração dupla não remove isso.
- Tratar o resultado como se fosse de um teste sorteado. Diferenças em diferenças é a segunda melhor opção. Quando dá para sortear, sorteie, e use a calculadora de tamanho de amostra para saber quanto tempo isso leva.
- Aplicar a leitura quando o próprio tratamento mudou o grupo de controle. Se as praças tratadas roubaram demanda das de controle, você mediu a diferença mais o vazamento, um caso de interferência entre variações.
Faça isso automático na Donnu
O motivo mais comum de uma leitura de diferenças em diferenças sair errada não é a fórmula, é o dado. A conta precisa da métrica por unidade de tratamento e por período, guardada com a mesma definição antes e depois. Painel que só guarda o total agregado do site, ou que mudou a definição de conversão no meio do caminho, não permite a leitura, e nenhuma sofisticação estatística conserta isso depois.
A Donnu guarda o resultado por unidade e por dia com a definição carimbada, o que torna a leitura de diferenças em diferenças uma consulta, não uma reconstrução. E, mais importante, ela existe para o caso em que dá para sortear: sempre que a mudança couber num sorteio de usuário, esse é o caminho, porque ele dispensa a premissa de tendência comum e o campo minado do erro-padrão. Para saber se o seu tráfego comporta o teste sorteado antes de partir para o quase-experimento, a calculadora de tamanho de amostra responde em segundos, e a calculadora de significância fecha a leitura no fim.
Referências
- Bertrand, M., Duflo, E. e Mullainathan, S. How Much Should We Trust Differences-in-Differences Estimates? NBER Working Paper 8841, 2002, publicado no Quarterly Journal of Economics. Fonte da pesquisa dos 92 artigos de diferenças em diferenças publicados em seis revistas entre 1990 e 2000, dos quais 65 usavam mais de dois períodos e apenas cinco tratavam explicitamente da correlação serial, e dos quais 80 tinham problema de erro agrupado com apenas 36 lidando com isso; das taxas de rejeição da Tabela 2 com leis fictícias em dados da Current Population Survey de 1979 a 1999 (67,5 por cento em micro dados com mínimos quadrados comuns, 44,0 por cento com agrupamento por célula estado-ano, 43,5 por cento com dados agregados, 6,0 por cento com lei sem correlação serial e 37,3 por cento em dados manufaturados com autocorrelação de 0,8); das autocorrelações de resíduo de 0,51, 0,44 e 0,33; e das taxas dos três consertos, incluindo 6 por cento para a agregação em dois períodos e para a matriz de covariância arbitrária, com degradação para 8,5 e 15 por cento com 10 e 6 estados no agrupamento e 9,5 e 31,5 por cento com 20 e 6 estados na agregação. nber.org.
- Card, D. e Krueger, A. B. Minimum Wages and Employment: A Case Study of the Fast-Food Industry in New Jersey and Pennsylvania. American Economic Review 84(4), 1994. Fonte do exemplo clássico: em 1º de abril de 1992 o salário mínimo de Nova Jersey subiu de 4,25 para 5,05 dólares por hora, 410 lanchonetes de Nova Jersey e do leste da Pensilvânia foram pesquisadas antes e depois, e o ganho relativo, a diferença em diferenças das variações de emprego, foi de 2,76 empregados equivalentes em tempo integral, ou 13 por cento, com estatística t de 2,03. davidcard.berkeley.edu.
- Goodman-Bacon, A. Difference-in-Differences with Variation in Treatment Timing. NBER Working Paper 25018, versão de julho de 2019, publicado no Journal of Econometrics. Fonte de que o estimador com efeitos fixos de dois sentidos equivale a uma média ponderada de todas as comparações 2x2 possíveis entre grupos de datas de entrada, incluindo as que usam unidades já tratadas como controle; de que os pesos são proporcionais ao tamanho dos grupos e à variância do indicador de tratamento em cada par, sendo maiores para quem foi tratado no meio do painel; e de que pesos negativos só aparecem quando o efeito varia ao longo do tempo, caso em que a variação do efeito no grupo já tratado é subtraída da estimativa, o que não implica falha do desenho mas desaconselha resumir tudo num coeficiente único. vanderbilt.edu.
- Blake, T., Nosko, C. e Tadelis, S. Consumer Heterogeneity and Paid Search Effectiveness: A Large Scale Field Experiment. NBER Working Paper 20171, 2014, publicado na Econometrica. Fonte do contraste entre leituras: retorno sobre investimento acima de 4.100 por cento por mínimos quadrados comuns, acima de 1.400 por cento com controles de tempo e geografia, e menos 63 por cento pela variação experimental, com intervalo de confiança de 95 por cento entre menos 124 e menos 3 por cento; e do desenho geográfico com 68 áreas de mercado onde a mídia foi suspensa, 65 áreas de controle pareadas por correlação serial histórica de vendas e 77 demais áreas de controle. nber.org.
Leia também: Experimentos geográficos · Randomização por cluster · Teste switchback · Unidade de sorteio · Plano de análise pré-registrado · Calculadora de tamanho de amostra · Read in English
Perguntas frequentes
- O que é diferenças em diferenças?
- É uma leitura que compara a VARIAÇÃO de um grupo tratado entre antes e depois com a VARIAÇÃO de um grupo de controle no mesmo intervalo. O efeito estimado é a diferença entre essas duas variações. Ela serve para o caso em que não dá para sortear usuário e o grupo tratado já era diferente do controle antes da mudança.
- Por que não basta comparar o tratado com o controle depois da mudança?
- Porque a diferença de nível entre os dois grupos já existia antes. Na simulação deste guia, o grupo tratado convertia 3,10 por cento e o controle 3,60 por cento antes de qualquer mudança. Comparar 2,95 por cento com 3,20 por cento depois devolve menos 0,25 ponto com valor-p de cerca de 3,2 vezes 10 elevado a menos 7, uma derrota estatisticamente significativa que nunca existiu.
- Qual é a premissa que diferenças em diferenças exige?
- Tendência comum: na ausência da mudança, os dois grupos teriam variado na mesma direção e na mesma magnitude. A premissa é sobre a VARIAÇÃO, não sobre o nível, então grupos com níveis muito diferentes ainda servem. Ela não é testável diretamente, mas fica mais crível quando as tendências dos dois grupos andam juntas em vários períodos antes da mudança.
- Por que o erro-padrão de diferenças em diferenças costuma estar errado?
- Porque a série de cada praça é correlacionada consigo mesma ao longo do tempo, e a regra de tratamento também é. Bertrand, Duflo e Mullainathan mostraram que, com cerca de 20 anos de dados e leis fictícias sorteadas ao acaso, a leitura convencional rejeitava a hipótese nula ao nível de 5 por cento em até 45 por cento das simulações. Na simulação deste guia, o erro-padrão calculado por visitante produziu 29,40 por cento de falsos positivos.
- Como corrigir o erro-padrão?
- Bertrand, Duflo e Mullainathan testaram três caminhos. Colapsar os dados em dois períodos, antes e depois, devolveu 6 por cento de rejeição. Permitir uma matriz de covariância arbitrária dentro de cada estado, o que na prática é agrupar o erro-padrão por estado, devolveu 6 por cento. E a inferência por permutação, que eles recomendam por funcionar em qualquer tamanho de amostra, é reembaralhar quem foi tratado. Na simulação deste guia ela devolveu 5,15 por cento de falso positivo contra os 5 por cento teóricos.
- Diferenças em diferenças funciona quando o rollout foi escalonado?
- Funciona com cuidado. Goodman-Bacon mostrou que a regressão com efeitos fixos de dois sentidos, quando as unidades são tratadas em datas diferentes, equivale a uma média ponderada de todas as comparações 2x2 possíveis, e algumas delas usam unidades JÁ tratadas como controle. Quando o efeito muda ao longo do tempo, essas comparações entram com peso negativo e o coeficiente único deixa de resumir o que se quer medir.