Estatística

Estratificação em Teste A/B: o teto da pós-estratificação

A estratificação num teste A/B só remove a variância que está ENTRE os estratos. Medimos o teto: 2,68% num caso real, contra 97,8% do CUPED contínuo.

Ilustração plana de um campo largo de pequenos pontos verdes organizados em fileiras densas, com faixas horizontais de tons diferentes atravessando o conjunto

Estratificar um teste A/B reduz a variância exatamente na fração dela que está ENTRE os estratos, e nada além disso. No cenário de receita medido neste artigo, com usuários novos e recorrentes como estratos, essa fração é de 2,68 por cento: o teto do método é economizar 2,68 por cento do tráfego. Na mesma simulação, o CUPED usando a mesma informação em forma contínua reduziu a variância medida em 97,82 por cento. A diferença não é de implementação, é de quanta informação cada método consome. Este guia mostra a conta que define o teto, prova numericamente que pós-estratificação é CUPED com uma covariável categórica, mede os dois casos em que estratificar não paga, e traduz a redução de variância em dias de teste. Faz parte do nosso guia completo de teste A/B e complementa o que é CUPED e tamanho de amostra para métricas contínuas.

Estratificação: a conta que define o teto

A ideia é antiga e vem da amostragem em pesquisa. Você separa a população em grupos internamente parecidos, calcula a média dentro de cada grupo e depois junta tudo com o peso populacional de cada grupo. A média estratificada tem o mesmo valor esperado da média simples, mas variância menor.

Deng, Xu, Kohavi e Walker, no artigo em que apresentam o CUPED, escrevem a razão numa linha só. A variância da média se decompõe em duas parcelas:

A estratificação remove a segunda parcela e deixa a primeira intacta. Os autores dão o exemplo da altura de crianças: a variância das alturas em geral é grande, mas se você estratificar por idade, a variância dentro de cada faixa etária fica muito menor. Uma boa estratificação, escrevem eles, é a que se alinha aos agrupamentos que já existem nos dados.

A variância total se parte em duas: dentro dos estratos e entre os estratosDiagrama com duas barras horizontais empilhadas. A barra de cima representa a variância total de uma métrica de receita, desenhada como um retângulo cheio. A barra de baixo mostra a mesma largura dividida em dois pedaços muito desiguais: um pedaço largo rotulado variância dentro dos estratos, que ocupa quase toda a barra, e um pedaço estreito na ponta direita rotulado variância entre os estratos. Uma chave embaixo indica que só o pedaço estreito é removido pela estratificação, e uma anotação diz que esse pedaço é o teto do ganho do método.A estratificação só apaga o pedaço de baixo à direitavariância total da métrica100%a mesma variância, decompostadentro dos estratos: 97,32%entre os estratos: 2,68%O que sobra depois de estratificar é a barra clara. O ganho máximo do método é o retângulo escuro.Valores do cenário de receita medido neste artigo (usuários novos contra recorrentes).
A decomposição não é uma aproximação: é uma identidade. Por isso o ganho da estratificação é conhecido antes de você implementar qualquer coisa.

Essa é a notícia boa e a notícia ruim ao mesmo tempo. Boa porque você consegue calcular o ganho antes de escrever uma linha de código, usando só dados históricos. Ruim porque, na maioria das métricas de produto, a parcela entre estratos é pequena.

Estratificar na atribuição ou depois de coletar?

Existem dois momentos possíveis para usar os estratos, e eles não valem o mesmo.

Na atribuição (sorteio estratificado). Você monta os grupos antes e sorteia dentro de cada grupo, garantindo por construção que controle e variação fiquem equilibrados em cada faixa. É o desenho clássico de ensaio clínico.

Depois da coleta (pós-estratificação). Você sorteia normalmente, deixa o teste rodar, e só na análise separa os usuários por uma característica que já existia antes do teste começar.

O artigo do CUPED é direto sobre qual dos dois faz sentido online: como os dados chegam ao longo do tempo, normalmente não dá para amostrar de estratos formados de antemão, mas dá para usar variáveis pré-experimento para construir os estratos depois que todos os dados foram coletados.

Medimos a diferença. Na simulação de receita com cauda pesada descrita adiante, com 60.000 usuários por réplica e 2.000 réplicas, o sorteio estratificado na atribuição devolveu variância de 1,5930 contra 1,5322 do sorteio simples: 3,97 por cento pior, ou seja, ruído em torno de zero. Faz sentido: com dezenas de milhares de usuários por braço, o sorteio aleatório já equilibra os estratos praticamente sozinho, então forçar o equilíbrio não sobra nada para ganhar.

onde os estratos entram equilíbrio dos estratos ganho de variância medido custo de engenharia
sorteio estratificado na atribuição perfeito por construção 3,97% pior que o sorteio simples (ruído) alto: exige decidir o estrato no momento do sorteio
pós-estratificação na análise quase perfeito por acaso, com N grande igual ao teto teórico da decomposição baixo: é uma consulta a mais no pipeline
nenhum dos dois aleatório nenhum nenhum

A leitura prática: se você tem tráfego suficiente para um teste A/B normal, você tem tráfego suficiente para que o sorteio simples equilibre seus estratos. Estratificar na atribuição paga a conta de complexidade sem entregar precisão.

Pós-estratificação é CUPED com uma covariável categórica

Esta parte costuma surpreender. O apêndice A do artigo do CUPED mostra que, quando as covariáveis são categóricas, estratificação e variáveis de controle produzem resultados idênticos. Não parecidos: idênticos.

Reproduzimos a identidade numericamente com os dados da nossa simulação. De um lado, a média pós-estratificada de cada braço, calculada como a soma das médias por estrato ponderadas pelo peso do estrato na amostra combinada. Do outro, o estimador de variável de controle usando as variáveis indicadoras dos estratos como covariáveis, com o coeficiente de cada indicadora igual à diferença entre a média daquele estrato e a média do estrato de referência.

braço A: pós-estratificado = 0,73465908140242364
braço A: variável de controle = 0,73465908140242353
diferença absoluta = 1,110e-16

braço B: pós-estratificado = 0,59895701571944082
braço B: variável de controle = 0,59895701571944071
diferença absoluta = 1,110e-16

delta pós-estratificado = -0,13570206568298282
delta por variáveis indicadoras = -0,13570206568298282

A diferença de 1,110e-16 é o épsilon do ponto flutuante de dupla precisão. As duas contas são a mesma conta.

Isso muda a pergunta que vale a pena fazer. Não é “devo estratificar ou usar CUPED?”. É “minha covariável perde informação ao virar categoria?”. Se a covariável já é categórica (canal de aquisição, plataforma, país, usuário novo contra recorrente), estratificar e usar CUPED com aquela variável são a mesma coisa. Se a covariável é contínua (gasto no pré-período, número de sessões nos últimos 30 dias, tempo de vida da conta), transformá-la em faixas joga fora informação, e o CUPED com o valor contínuo domina.

O teto medido: novos contra recorrentes

Montamos um cenário deliberadamente favorável à estratificação: receita por usuário, com dois segmentos que convertem de forma muito diferente.

A média geral é de R$ 3,3902. Os dois segmentos são seis vezes diferentes em receita média, o que parece uma separação enorme. Rodando a decomposição analiticamente:

parcela valor fração da variância total
variância total 356,08 100,00%
dentro dos estratos 346,53 97,32%
entre os estratos 9,55 2,68%
Por que uma separação de médias enorme rende um ganho de variância minúsculoGráfico com dois pares de elementos. À esquerda, duas barras verticais mostram a receita média por usuário: R$ 1,37 para novos e R$ 8,11 para recorrentes, uma diferença de quase seis vezes. À direita, dois retângulos muito mais altos representam a variância dentro de cada segmento, 99 para novos e 924 para recorrentes, mostrando que a dispersão interna de cada grupo é ordens de grandeza maior que a distância entre as médias dos grupos. Uma anotação embaixo explica que é essa desproporção que limita o ganho da estratificação a 2,68 por cento.As médias são bem diferentes. A dispersão dentro de cada grupo é muito maior.receita média por usuárionovosR$ 1,37recorrentesR$ 8,11variância dentro do gruponovos99,2recorrentes923,6A estratificação apaga a distância entre as barras da esquerda. Ela não toca na altura das barras da direita.As duas escalas são independentes: a da esquerda em reais, a da direita em reais ao quadrado.
Seis vezes de diferença entre as médias soa muito, mas a variância dentro de cada segmento é duas ordens de grandeza maior. É por isso que o teto fica em 2,68 por cento.

Depois medimos de verdade, com um teste A/A pareado: 8.000 réplicas, 80.000 usuários por réplica, divisão 50/50, os dois estimadores lendo exatamente os mesmos dados.

estimador variância real do delta falso positivo medido redução de variância
diferença de médias 1,84925e-2 5,64% referência
pós-estratificado (novos contra recorrentes) 1,79246e-2 5,42% 3,07%

Os 3,07 por cento medidos batem com o teto analítico de 2,68 por cento dentro do ruído de Monte Carlo. Registrando o que também apareceu: as duas taxas de falso positivo ficaram acima dos 5 por cento nominais (o erro-padrão de Monte Carlo em 5 por cento com 8.000 réplicas é de 0,24 ponto percentual). Isso é a assimetria do ticket lognormal esticando a cauda do teste z, não um defeito do estimador estratificado, e vale para os dois igualmente.

Quando a pós-estratificação piora o resultado

O segundo cenário é receita com cauda genuinamente pesada, do tipo que aparece em plataformas com compras virtuais: 3 por cento de gastadores e valor por gastador seguindo uma lei de potência com expoente 1,15, mais um gasto no pré-período correlacionado com o do período do teste. A correlação medida entre pré e pós foi de 0,7643.

Estratificamos por percentil do gasto no pré-período, com cortes em 97, 99,5 e 99,9 por cento:

estrato peso usuários receita média variância interna
base 97,002% 58.201 R$ 0,002 0,0
médio 2,500% 1.500 R$ 8,604 54,3
alto 0,400% 240 R$ 37,503 815,7
cauda 0,098% 59 R$ 478,067 2.178.816,5

Com 2.000 réplicas de A/A e 60.000 usuários por réplica, o resultado foi este:

estimador variância do delta redução
diferença de médias 1,5322 referência
pós-estratificação (4 estratos) 1,6352 6,72% PIOR
CUPED com o pré-período contínuo 0,033340 97,82%
pós-estratificação com CUPED dentro do estrato 0,031682 97,93%

A pós-estratificação sozinha aumentou a variância. A causa é o estrato de cauda: 59 usuários com variância interna de 2,18 milhões. A média desse punhado de gente é uma estimativa péssima, e o estimador estratificado depende dela com peso próprio, enquanto a média simples dilui esses 59 usuários entre 60.000.

O estrato de cauda tem gente demais para ignorar e pouca demais para estimarDiagrama com quatro colunas representando os quatro estratos. A largura de cada coluna é proporcional ao peso populacional e a altura ao desvio-padrão interno. O estrato base é larguíssimo e quase rente ao chão. Os estratos médio e alto são estreitos e de altura moderada. O estrato de cauda é um traço fino e altíssimo, saindo do topo da figura, com uma anotação dizendo que ele tem 59 usuários e desvio-padrão de mil quatrocentos e setenta e seis. Uma legenda embaixo diz que a média de um estrato assim é ruidosa demais para carregar peso próprio no estimador.Largura = peso do estrato · Altura = desvio-padrão internobase: 97,0% da base, desvio-padrão perto de zeromédio: 2,5%dp 7,4alto: 0,4%dp 28,6cauda: 0,098% da base59 usuários, desvio-padrão 1.476a coluna sai do topo da figuraA média de 59 usuários com esse desvio-padrão é ruidosa demais para receber peso próprio no estimador.
O mesmo princípio aparece no estudo do ShareChat: quando o estrato é mal desenhado (no caso deles, agrupamento por k-means sobre atributos de comportamento), a pós-estratificação aumenta a variância em vez de reduzir.

O time do ShareChat, que publicou o uso de pós-estratificação em mais de 40 experimentos de produção com mais de 1 milhão de usuários cada, chega a uma recomendação vizinha por outro caminho: o método não deve ser usado quando o comportamento dos usuários de cauda é o objetivo principal da decisão, porque o estimador pós-estratificado reduz justamente o peso da população que se quer estudar. Vale reproduzir também o resultado positivo deles, porque é o outro lado da mesma moeda: pós-estratificação combinada com CUPED dentro do estrato entregou mais de 99 por cento de redução de variância nos dados reais, contra 47,62 por cento do CUPED sozinho, com o valor-p sendo calculado sobre a métrica ajustada. Nossa simulação mostra o mesmo empilhamento, com os dois números praticamente empatados no topo (97,82 contra 97,93 por cento).

Da redução de variância aos dias de teste

A tradução é direta: o tamanho de amostra é proporcional à variância. Uma redução de X por cento na variância corta X por cento da amostra necessária, ou equivalentemente reduz o efeito mínimo detectável pela raiz quadrada de 1 menos X.

Tomando como referência um teste com base de 5 por cento, efeito mínimo detectável de 10 por cento relativo, alfa de 5 por cento e poder de 80 por cento, o que dá 31.234 usuários por variação e 11 dias a 40.000 visitantes por semana:

redução de variância N por variação dias a 40.000/semana MDE relativo alcançável com o N original
nenhuma 31.234 11 9,77%
3% (pós-estratificação medida) 30.297 11 9,62%
10% 28.111 10 9,27%
30% 21.864 8 8,18%
50% (CUPED no Bing) 15.617 6 6,91%
98% (CUPED contínuo medido aqui) 625 1 1,38%

A linha de 3 por cento não mudou nem um dia de teste. A linha de 50 por cento cortou o teste pela metade. É essa a diferença entre estratificar e usar a covariável inteira.

Rode o seu próprio caso na calculadora abaixo. Para ver o efeito da redução de variância, informe a base e o MDE de sempre, anote o N, e depois multiplique o resultado por 1 menos a redução que você mediu no seu histórico:

Calculadora de tamanho de amostra
-Visitantes por variação
-Total (2 variações)
-Duração estimada

Cálculo por aproximação normal de duas proporções, 2 variações (50/50). Mexa nos campos e veja o impacto ao vivo.

Como escolher os estratos na prática

Um roteiro que você pode copiar e rodar sobre o seu histórico antes de mudar qualquer pipeline:

  1. Escolha a métrica que importa e puxe dela um recorte histórico de pelo menos 30 dias, no nível da unidade de sorteio (normalmente o usuário).
  2. Liste as candidatas a covariável que existem ANTES do teste começar: gasto no pré-período, número de sessões, canal de aquisição, plataforma, tempo de conta, país. A regra dura é que a variável não pode ser afetada pelo tratamento, e a maneira segura de garantir isso é congelá-la no período anterior ao teste.
  3. Calcule a decomposição para cada candidata categórica: variância total, variância dentro dos estratos ponderada pelos pesos, e a diferença entre as duas. A fração entre estratos é o seu teto.
  4. Descarte quem tem teto de um dígito baixo. Se a fração entre estratos for de 2 ou 3 por cento, a pós-estratificação não vai mudar uma decisão sua.
  5. Para candidatas contínuas, calcule a correlação com a métrica final e compare o quadrado dela com o teto da versão categorizada. Na nossa simulação a versão contínua ganhou por duas ordens de grandeza.
  6. Verifique o tamanho do menor estrato. Se algum estrato tem menos de algumas centenas de usuários e variância alta, ou você junta ele com o vizinho, ou o método vai piorar sua variância.
  7. Rode um A/A com o estimador novo antes de confiar nele. Nossa medição mostrou os dois estimadores com falso positivo acima do nominal por causa da assimetria da métrica, e isso só aparece testando.
  8. Congele os cortes antes de olhar o resultado. Os limiares dos estratos precisam sair do período anterior ao teste, exatamente como o ShareChat descreve: calculados a partir da população do pré-período e congelados antes de qualquer dado de resultado ser observado.

Três erros que aparecem sempre

Estratificar por algo que o tratamento afeta. Se o estrato é “usuário que visitou a página nova”, o tratamento mudou quem entra em cada grupo e o estimador deixa de ser não viesado. A defesa é a regra 2 acima: só variáveis congeladas no pré-período. Isso é o mesmo cuidado que vale na análise por gatilho e diluição.

Confundir explicar com reduzir. Um estrato pode ser fascinante para entender o negócio (whales gastam 300 vezes mais) e inútil para reduzir variância. As duas perguntas são independentes. Se o objetivo é entender onde o efeito se concentra, o instrumento é efeito heterogêneo por segmento, com toda a disciplina de múltiplas comparações que ele exige.

Achar que estratificar conserta a leitura. Estratificação é redução de variância, não correção de viés. Ela não resolve SRM, a divisão desigual de tráfego, não resolve viés de instrumentação e não resolve tráfego de bot. Um teste com o sorteio quebrado continua quebrado depois de estratificado, só que com barra de erro menor em cima do número errado, o que é pior.

Faça isso automático na Donnu

O trabalho chato aqui não é a estatística, é a disciplina de pipeline: congelar a covariável no pré-período, guardar os cortes junto com o experimento, e não deixar ninguém escolher os estratos depois de ver o resultado. Na Donnu o valor da covariável de cada usuário fica gravado no momento do sorteio, junto do balde e do carimbo de tempo, então a leitura estratificada usa sempre a foto de antes do teste, e a lista de estratos fica registrada no experimento em vez de viver na cabeça de quem analisou. Se a sua ferramenta atual não guarda o estado pré-experimento por usuário, esse é o item que precisa entrar antes de qualquer redução de variância virar rotina.

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

Leia também

Read in English

Perguntas frequentes

O que é estratificação em um teste A/B?
É separar os usuários em grupos internamente parecidos (os estratos) usando alguma informação anterior ao teste, calcular o efeito dentro de cada grupo e depois juntar os resultados com o peso populacional de cada grupo. O objetivo não é mudar o efeito estimado, é reduzir a variância dele. A conta fica mais precisa porque a variação que existe ENTRE os grupos deixa de contar como ruído. A variação que sobra dentro de cada grupo continua contando.
Qual é o ganho máximo que a estratificação pode dar?
Exatamente a fração da variância que está entre os estratos. Deng, Xu, Kohavi e Walker escrevem essa decomposição de forma fechada no artigo do CUPED: a variância total é a soma da variância dentro dos estratos com a variância entre eles, e a estratificação remove só a segunda parcela. No cenário medido neste artigo, com usuários novos e recorrentes como estratos, essa parcela é de 2,68 por cento da variância total. Ou seja, o teto do método naquele caso é economizar 2,68 por cento do tráfego, não metade.
Pós-estratificação é a mesma coisa que CUPED?
Quando a covariável é categórica, sim, e isso está provado no apêndice A do artigo original do CUPED: estratificação e variáveis de controle produzem resultados idênticos. Reproduzimos a identidade numericamente e as duas contas bateram até a 16ª casa decimal, com diferença de 1,110e-16, que é o erro de arredondamento do ponto flutuante. A diferença prática aparece quando a covariável é contínua: aí o CUPED usa a informação inteira e a pós-estratificação usa só a faixa em que o usuário caiu.
É melhor estratificar na hora de sortear ou depois de coletar os dados?
Depois. O próprio artigo do CUPED registra que no ambiente online os dados chegam ao longo do tempo e por isso quase nunca dá para amostrar de estratos formados de antemão, mas dá para construir os estratos com variáveis pré-experimento depois que os dados foram coletados. Na simulação deste artigo o sorteio estratificado na atribuição não reduziu a variância em relação ao sorteio simples: a medição deu 3,97 por cento a mais de variância, ou seja, ruído em torno de zero, com um custo de engenharia real.
A pós-estratificação pode piorar o resultado?
Pode, e isso é observado tanto na nossa simulação quanto em produção. Quando um estrato é muito pequeno e muito volátil, a média dele vira uma estimativa ruim e o estimador estratificado fica mais barulhento que a média simples. Na nossa simulação de receita com cauda pesada, um estrato de topo com 59 usuários e variância enorme fez a pós-estratificação aumentar a variância em 6,72 por cento. O time do ShareChat registra um efeito da mesma natureza ao comparar desenhos de estrato: agrupar usuários por k-means sobre atributos de comportamento aumentou a variância, enquanto o corte por percentil de receita do pré-período foi o que funcionou. A lição é a mesma: estrato mal desenhado piora o estimador.
Então quando a estratificação vale a pena?
Quando os estratos separam de verdade a métrica, ou seja, quando as médias dos grupos são muito diferentes e a variação dentro de cada grupo é pequena. Métricas de proporção quase nunca satisfazem isso, porque a variância de uma proporção é presa a p vezes 1 menos p. Métricas de receita com cauda pesada podem satisfazer, mas aí o estrato de cauda precisa de gente suficiente. Antes de investir no método, meça a decomposição no seu histórico: se a parcela entre estratos for de poucos pontos percentuais, o ganho será de poucos pontos percentuais.