Estatística

CUPED: Reduzindo a Variância do Teste A/B

CUPED reduz a variância do teste A/B usando dados pré-experimento como covariável, o que encurta a duração do teste sem perder rigor estatístico.

Ilustração de duas curvas de distribuição sobrepostas, uma larga e uma estreita, representando a redução de variância que o CUPED traz a um teste A/B

CUPED (Controlled-experiment Using Pre-Experiment Data) é uma técnica que usa uma métrica do período ANTES do teste, do mesmo usuário, para explicar parte do ruído da métrica que você está medindo, o que reduz a variância residual e deixa o teste mais sensível sem precisar de mais tráfego. Ela nasceu num paper da Microsoft de 2013 e hoje é o método padrão de redução de variância em plataformas de experimentação como Netflix, Booking.com e boa parte do mercado de teste A/B. Se você já leu o nosso guia de significância estatística em testes A/B, CUPED é a resposta para o problema mais comum que fica de fora daquele guia: o que fazer quando a sua taxa de conversão real é boa, mas o teste continua inconclusivo porque o tráfego não é grande o bastante para provar isso a tempo.

O problema: sites de médio tráfego pagam caro por poder estatístico

Todo teste A/B honesto precisa de amostra suficiente para separar um efeito real do acaso. O tamanho dessa amostra depende, entre outras coisas, da variância da métrica que você está medindo: quanto mais essa métrica oscila de visitante para visitante, por razões que não têm nada a ver com a sua mudança, mais gente você precisa para enxergar o sinal por trás do ruído. Métricas de receita por usuário, número de sessões ou tempo gasto no produto costumam ter variância bem mais alta do que uma taxa de conversão binária simples (comprou ou não comprou), porque um punhado de usuários que gasta muito mais que a média puxa a variância inteira para cima.

Na prática, isso significa meses de teste para detectar um efeito que existe de verdade. Uma equipe com tráfego médio, testando uma mudança que melhora a receita por usuário em 5%, pode precisar de uma amostra tão grande que o teste nunca termina antes de o roadmap mudar de prioridade. A saída óbvia (esperar mais) custa tempo de mercado; a saída arriscada (baixar o rigor) custa confiabilidade. O CUPED ataca o problema por um terceiro caminho: em vez de mexer no rigor ou esperar mais tráfego, ele reduz o ruído que a amostra precisa vencer.

A ideia central: uma covariável que já existia antes do teste

A intuição por trás do CUPED é simples de enunciar: se você já sabe, antes mesmo do teste começar, que um usuário historicamente gasta muito ou pouco, essa informação prévia explica uma fatia do valor que ele vai gerar durante o teste, independente de qual variação ele viu. Um cliente que gastava R$ 500 por mês antes do experimento tende a continuar num patamar parecido depois, e essa tendência não tem relação nenhuma com A ou B. Se você consegue “descontar” essa parte previsível da métrica, o que sobra (o resíduo) tem menos variância, e é nesse resíduo, mais limpo, que a diferença entre A e B fica mais fácil de enxergar.

Formalmente, essa covariável pré-experimento se chama X, e a métrica que o teste mede se chama Y. A métrica ajustada, chamada de Y-CUPED, é:

Ycuped = Y − θ · (X − E[X])

Onde θ (theta) é o coeficiente que diz o quanto de X explica Y, calculado como:

θ = Cov(Y, X) ÷ Var(X)

Em português, termo a termo: Y é o valor da métrica durante o teste (receita, sessões, o que você estiver medindo); X é o valor da mesma métrica (ou de uma métrica correlacionada) no mesmo usuário, antes do teste começar; E[X] é a média de X em toda a população; e θ é exatamente o coeficiente de uma regressão linear simples de Y sobre X, o valor que minimiza a variância do resíduo. Repare no que essa subtração faz: quando X está acima da média (o usuário historicamente gasta mais), o termo θ·(X − E[X]) é positivo e é subtraído de Y, “descontando” a parte do valor de Y que já era esperada por causa do histórico do usuário, não da variação que ele viu.

Como a covariável pré-experimento explica parte do valor observadoCada ponto é um usuário. O eixo horizontal é o valor da métrica antes do teste (X); o eixo vertical é o valor durante o teste (Y). A reta mostra a relação esperada entre os dois; a distância vertical de cada ponto até a reta é o resíduo que sobra depois do ajuste CUPED, com menos variância do que o Y bruto.Y · valor durante o testeX · valor pré-experimento (mesmo usuário)reta = θ · (X − E[X])resíduo (o que sobra em Y-cuped)
Quanto mais os pontos se aproximam da reta (quanto maior a correlação entre X e Y), menor o resíduo que sobra depois do ajuste, e menor a variância que o teste precisa vencer.

De onde vem a redução de variância: o papel da correlação

A parte mais útil do CUPED, na prática, é que a redução de variância tem uma fórmula fechada e fácil de aplicar. Escolhendo θ de forma ótima (o coeficiente de regressão que acabamos de ver), a variância da métrica ajustada é:

Var(Ycuped) = Var(Y) · (1 − ρ²)

Onde ρ (rho) é a correlação de Pearson entre X e Y, um número entre −1 e 1 que mede o quanto os dois andam juntos. Essa fórmula diz que a variância que sobra depois do ajuste é uma fração (1 − ρ²) da variância original. Virando isso do avesso: a redução percentual de variância equivale a ρ², o quadrado da correlação. Uma correlação de 0,5 entre a covariável pré-experimento e a métrica do teste reduz a variância em 0,5² = 25%; uma correlação de 0,7 reduz em 0,7² = 49%, quase a metade.

Essa relação explica por que o CUPED é tão sensível à escolha da covariável: correlações baixas (abaixo de 0,3, por exemplo) rendem uma redução pequena, abaixo de 10%, mal perceptível na prática; correlações moderadas a altas (0,5 a 0,7), comuns em métricas de receita ou engajamento de usuários recorrentes, rendem reduções de 25% a quase 50%, o suficiente para encurtar um teste de meses para semanas.

Dias de teste necessários caem conforme a correlação da covariável sobePartindo de um teste de 44 dias sem CUPED, uma covariável com correlação 0,3 reduz para cerca de 40 dias, 0,5 reduz para cerca de 33 dias, e 0,7 reduz para cerca de 23 dias.dias necessários para o mesmo testecorrelação da covariável pré-experimento (ρ)44 dias · sem CUPED (ρ = 0)~40 dias~33 dias~23 dias00,30,50,7
Cenário do exemplo trabalhado abaixo: base de 44 dias sem CUPED, mesma alocação de tráfego semanal, variando só a correlação da covariável.

Um exemplo trabalhado, ponta a ponta

Para não deixar essa conta no abstrato, vamos reaproveitar o mesmo cenário usado no nosso guia de bandits x teste A/B: uma página com 10.000 visitantes por semana, taxa de conversão base de 5% e efeito mínimo detectável de 10% relativo, com 95% de confiança e 80% de poder. O motor de amostra deste blog devolve, sem CUPED, 31.234 visitantes por variação (62.468 no total), rodando por 44 dias nesse tráfego semanal. É esse o ponto de partida.

Agora suponha que a métrica primária do teste é receita por usuário, e que você tem, para cada visitante, a receita gerada por ele nas duas semanas antes do teste começar. Uma correlação de 0,5 entre essa receita pré-experimento e a receita durante o teste é um número plausível para um produto com boa parcela de usuários recorrentes (a Kameleoon, analisando mais de 200 experimentos próprios, relata que a redução de variância cresce com a proporção de visitantes recorrentes no teste). Fazendo a conta:

Essa é uma aproximação de bastidor de envelope: ela assume que o resto do desenho (significância, poder, efeito mínimo) fica igual e que o tamanho de amostra necessário escala de forma aproximadamente linear com a variância da métrica, uma simplificação padrão usada por ferramentas como GrowthBook e Kameleoon para comunicar o ganho do CUPED. O ganho real que a sua ferramenta reporta pode variar um pouco dessa conta de bastidor, mas a direção e a ordem de grandeza são as mesmas.

A tabela abaixo estende essa conta para outras correlações, sempre a partir do mesmo cenário-base de 31.234 por variação e 44 dias:

Correlação (ρ) Redução de variância (ρ²) Amostra ajustada por variação Duração ajustada Dias economizados
0,3 9% ~28.423 ~40 dias ~4 dias
0,4 16% ~26.237 ~37 dias ~7 dias
0,5 25% ~23.426 ~33 dias ~11 dias
0,6 36% ~19.990 ~28 dias ~16 dias
0,7 49% ~15.930 ~23 dias ~21 dias

Declare a significância sobre a métrica já ajustada

O CUPED não substitui o teste de significância, ele só troca a métrica que entra na conta: em vez de comparar o Y bruto de A contra o de B, você compara o Y-CUPED de cada lado, que tem a mesma média mas menos ruído. Depois de aplicar a subtração em cada visitante (ou de usar uma ferramenta que já faz isso nativamente), cole as conversões e os visitantes ajustados na calculadora abaixo para ver o ganho de significância na prática:

Calculadora de significância estatística
Controle (A)
Variação (B)
Controle (A) · Taxa-
Variação (B) · Taxa-
Melhora relativa-
valor-p-
IC 95% da diferença-

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.

Se a sua métrica é uma taxa (conversão binária), pense nos números que você cola aqui como o resultado depois de qualquer ajuste de covariável já ter sido aplicado nos bastidores pela sua ferramenta de experimentação; para métricas contínuas (receita por usuário, sessões), o mesmo raciocínio de significância se aplica trocando o teste de proporções por um teste-t ou equivalente sobre a média ajustada, mas a lógica de “menos variância, mesmo efeito, mais fácil de detectar” é idêntica.

Quando o CUPED funciona bem (e quando ele não ajuda quase nada)

CUPED não é universal. O ganho depende inteiramente de existir uma covariável pré-experimento correlacionada, e isso separa claramente os cenários em que vale a pena aplicar dos que não valem:

Cenário O CUPED ajuda? Por quê
Métrica com histórico do mesmo usuário (receita por usuário, sessões, tempo no produto) Sim, bastante O comportamento pré-experimento costuma ser um bom preditor do comportamento durante o teste, dando uma correlação alta
Produto com boa base de usuários recorrentes Sim Mais gente com histórico disponível como covariável, mais gente se beneficia do ajuste
Métrica binária simples (cliques, conversão) num produto com recorrência Ajuda moderadamente A correlação costuma ser mais baixa que em métricas contínuas, mas ainda existe algum ganho
Landing page de aquisição, maioria de visitantes novos Pouco ou nada Visitante novo não tem valor pré-experimento; sem covariável, não há o que descontar
Lançamento de produto novo, sem dados históricos da métrica Nada Não existe período pré-experimento para coletar X
Teste muito curto, onde nem dá tempo de calcular uma covariável estável Ganho reduzido A covariável precisa ser calculada sobre uma janela pré-experimento razoável para ser estável

A régua prática: pergunte se dá para responder “o que esse usuário fez antes do teste começar, na mesma métrica ou numa métrica parecida” para a maioria de quem vai entrar no experimento. Se a resposta é sim para a maior parte da audiência, o CUPED tende a valer o esforço de implementação. Se a resposta é não (a audiência é majoritariamente nova), o ganho fica perto de zero e o esforço de implementar a técnica não se paga.

Fluxograma: quando vale a pena aplicar CUPEDSe a maioria dos visitantes do teste tem um valor pré-experimento da métrica ou de uma métrica correlacionada, aplique CUPED. Se a covariável disponível tem correlação baixa, o ganho é pequeno mas ainda vale tentar por ser barato. Se a maioria dos visitantes é nova, sem histórico, o CUPED não tem o que descontar e não ajuda.A maioria da audiência temvalor pré-experimento da métrica?nãosimNão aplique CUPEDsem covariável, sem ganhoA correlação dessa covariávelcom a métrica é razoável (ρ > 0,3)?simnãoAplique CUPEDreduza a amostra em cerca de ρ²Ganho pequenomas o custo é baixo
A pergunta que decide tudo é se existe uma covariável pré-experimento disponível e correlacionada. Sem ela, nenhuma implementação de CUPED entrega ganho.

CUPED não é peeking, nem é bandit

Vale separar o CUPED de outras duas ideias deste blog com quem ele é fácil de confundir. O problema do peeking é sobre quando você decide parar um teste, olhar o resultado repetidas vezes e parar cedo demais infla o falso positivo; o CUPED não tem relação nenhuma com isso, ele muda qual métrica entra na conta de significância, não quando você olha para ela. Você pode (e deve) continuar respeitando a amostra e a duração planejadas mesmo usando CUPED, só que a amostra planejada fica menor.

Já os multi-armed bandits resolvem um problema totalmente diferente: em vez de reduzir a variância de um teste de horizonte fixo, um bandit realoca tráfego continuamente para a variação que parece melhor, trocando significância estatística formal por menos custo de oportunidade durante o teste. CUPED continua produzindo um valor-p e um intervalo de confiança normais, só que sobre uma métrica com menos ruído; um bandit abre mão do valor-p em troca de outra coisa. As duas técnicas não competem, aliás se combinam bem: nada impede de aplicar CUPED à métrica que alimenta um bandit bayesiano, reduzindo a variância que o próprio algoritmo de alocação enxerga.

Faça isso automático na Donnu

Reduzir a variância de um teste com CUPED exige três coisas que dão trabalho manual: identificar uma covariável pré-experimento correlacionada, calcular o θ ótimo por regressão e aplicar o ajuste antes de rodar qualquer teste de significância, sem bagunçar a matemática congelada que sustenta o resto do experimento. A Donnu já roda sobre um motor bayesiano nativo, a mesma base estatística que sustenta ajustes de variância como o CUPED; a leitura de significância honesta que você já viu no nosso guia principal é o alicerce sobre o qual esse tipo de técnica se apoia, sem exigir uma planilha de regressão paralela para cada teste.

Comece um teste grátis de 14 dias e leia também o que é significância estatística e a fórmula por trás dela, o problema do peeking e por que parar cedo estraga um teste, e bandits x teste A/B, para quando o objetivo é otimização contínua em vez de um veredito único.

Referências

Perguntas frequentes

O que é CUPED, em palavras simples?
CUPED (Controlled-experiment Using Pre-Experiment Data) é uma técnica que usa uma métrica coletada ANTES do teste começar, do mesmo usuário, para explicar parte do ruído natural da métrica que você está medindo. Ao remover essa parte previsível do ruído, a variância da métrica ajustada fica menor, o que deixa o teste mais sensível para detectar um efeito real, no mesmo tráfego, ou permite atingir a mesma confiança com menos tráfego e menos tempo.
CUPED muda quem vence o teste?
Não muda a direção do efeito real, só reduz o ruído em torno dele. A média da métrica ajustada tem o mesmo valor esperado da métrica original; o que muda é o erro padrão, que fica menor. Isso significa que um efeito verdadeiro fica mais fácil de separar do acaso, mas o CUPED não cria um vencedor que não existia nem esconde um perdedor real.
Que covariável devo usar no CUPED?
A melhor covariável é, quase sempre, a própria métrica que você está testando, medida no mesmo usuário durante um período antes do experimento começar (por exemplo, receita por usuário nas duas semanas anteriores ao teste, se a métrica primária é receita por usuário durante o teste). Quanto maior a correlação entre esse valor pré-experimento e o valor durante o experimento, maior a redução de variância. Uma covariável fracamente correlacionada (ou nenhuma) não ajuda muito.
CUPED funciona para visitantes novos, sem histórico?
Pouco ou nada. A técnica depende de um valor pré-experimento do mesmo usuário para funcionar como covariável; um visitante que nunca foi visto antes não tem esse valor, então não há o que usar para reduzir a variância dele. Testes dominados por tráfego novo (uma landing page de aquisição, por exemplo) colhem um ganho bem menor do CUPED do que testes num produto com uma base de usuários recorrentes.
Preciso de uma ferramenta especial para usar CUPED, ou dá para fazer na mão?
A matemática cabe numa planilha: é uma regressão linear simples entre a métrica pré-experimento e a métrica do teste, seguida de uma subtração. Plataformas como GrowthBook e Statsig já embutem CUPED nativamente no cálculo de significância. O trabalho manual está em ter os dados pré-experimento organizados por usuário e em recalcular a significância sobre a métrica ajustada, não sobre a métrica bruta.