CUPAC: redução de variância com previsão de modelo
CUPAC usa a previsão de um modelo como covariável e corta a variância do teste A/B. A conta do theta, 51,70% de redução e o erro que enviesa tudo.

📚 Este artigo faz parte do guia Significância Estatística em Teste A/B: O Guia.
A forma mais barata de dobrar a sensibilidade de um teste A/B não é comprar tráfego, é usar melhor o que você já sabe sobre cada usuário antes de ele entrar no teste. O CUPED faz isso com uma métrica do pré-período. O CUPAC faz o mesmo com a previsão de um modelo treinado em várias features do pré-período, e corta mais. Na simulação trabalhada deste guia, a métrica do pré-período sozinha corta 26,85 por cento da variância e a previsão do modelo corta 51,70 por cento, o que derruba o requisito de amostra de 31.234 para 15.088 visitantes por variação e a duração de 22 para 11 dias. Este guia mostra a conta do theta, a equivalência entre redução de variância e amostra efetiva na calculadora, o exemplo em que um teste sem significância passa a ter, e a simulação que mede o viés de menos 6,5 do erro mais comum na montagem da covariável. Faz parte do nosso guia completo de teste A/B e é a continuação direta de o que é CUPED.
O problema: variância que não tem nada a ver com o teste
A conversão ou a receita de um usuário depende de mil coisas que existiam antes de você mudar qualquer botão: ele é cliente antigo ou novo, veio de e-mail ou de busca, já tinha comprado três vezes, está no desktop, entrou às 9 da manhã de terça. Nada disso é efeito do seu teste, e tudo isso engorda a variância da métrica.
Redução de variância é a família de técnicas que remove essa parte previsível antes de comparar os grupos. Como o DoorDash coloca, estratificação, pós-estratificação e controle por covariável são as três abordagens comuns, e o CUPAC pertence à terceira.
A conta do CUPAC, em quatro linhas
A formulação de variáveis de controle do artigo original do CUPED é simples o bastante para caber aqui. Dada a métrica Y e uma covariável X, a métrica ajustada é:
Y_ajustado = Y − theta × (X − média de X)
A variância disso é minimizada quando theta = cov(Y, X) / var(X), e com esse theta ótimo a variância fica var(Y) × (1 − rho²), onde rho é a correlação entre Y e X. Deng, Xu, Kohavi e Walker escrevem exatamente isso: “a variância é reduzida por um fator de rho ao quadrado. Quanto maior rho, melhor a redução de variância.”
É a frase mais importante do tema. Toda a engenharia de redução de variância é engenharia de correlação. Se você aumenta a correlação entre a covariável e o desfecho, ganha sensibilidade de graça.
O CUPED clássico responde a isso do jeito mais simples: usa como X a MESMA métrica medida no pré-período. O CUPAC responde de outro jeito: usa como X a previsão de um modelo treinado com várias features do pré-período, otimizado para correlacionar com Y.
A simulação: quanto cada covariável rende
Para medir isso com números próprios, montamos uma simulação de 60.000 usuários com oito features anteriores ao teste (tempo de cadastro, sessões no pré-período, receita no pré-período, dispositivo, taxa de abertura de e-mail, itens no carrinho no pré-período, páginas por sessão e origem paga) e um desfecho de receita no período do teste que depende dessas features de forma não linear, mais ruído. A previsão do CUPAC saiu de uma regressão penalizada sobre um desenho de 14 termos, estimada com cross-fitting de 5 dobras (cada usuário recebe a previsão de um modelo que não o viu no treino).
| covariável | correlação com o desfecho | theta | variância | redução |
|---|---|---|---|---|
| nenhuma (bruto) | n/d | n/d | 996,57 | n/d |
| só tempo de cadastro | 0,1627 | n/d | 970,17 | 2,65% |
| receita do pré-período (CUPED) | 0,5182 | 0,5536 | 728,99 | 26,85% |
| previsão do modelo (CUPAC) | 0,7190 | 1,0048 | 481,36 | 51,70% |
Três coisas para observar nessa tabela.
Primeiro, o theta do CUPAC deu 1,0048, praticamente um. Isso não é coincidência: quando a covariável é uma previsão bem calibrada do próprio desfecho, o theta ótimo tende a 1, e o ajuste vira literalmente “subtraia o que o modelo já esperava”. A métrica ajustada passa a ser o resíduo do modelo.
Segundo, a covariável fraca não estraga nada. Ela rende 2,65 por cento, o que é quase zero, mas não é negativo. Guo, Coey, Konutgan, Li, Schoener e Goldman provam essa propriedade formalmente para o estimador MLRATE: se as previsões não têm correlação com os desfechos, o estimador se comporta assintoticamente igual à diferença simples de médias, e se a correlação é alta, os ganhos de eficiência são grandes.
Terceiro, o salto de 26,85 para 51,70 por cento é o valor de usar um modelo em vez de uma coluna. A previsão captura interações e não linearidades que uma única métrica do pré-período não captura. É o argumento que o DoorDash dá: uma codificação do desfecho por aprendizado de máquina captura relações complexas entre múltiplos fatores que um conjunto de covariáveis lineares deixa passar.
O que isso vale em dias de teste
Redução de variância se converte em amostra efetiva pela mesma razão que a amostra aparece dividindo a variância na fórmula do erro padrão: se a variância cai por um fator de 1 − rho², o requisito de amostra cai pelo mesmo fator. A calculadora de amostra dá o eixo:
Cálculo por aproximação normal de duas proporções, 2 variações (50/50). Mexa nos campos e veja o impacto ao vivo.
Com base de 5 por cento, efeito mínimo detectável de mais 10 por cento relativo, 95 por cento de confiança e 80 por cento de poder, ela devolve 31.234 visitantes por variação. Aplicando os fatores da simulação:
| covariável | fator 1 − rho² | amostra por variação | dias a 20.000/semana | dias a 30.000/semana |
|---|---|---|---|---|
| nenhuma | 1,0000 | 31.234 | 22 | 15 |
| só tempo de cadastro | 0,9735 | 30.408 | 22 | 15 |
| receita do pré-período (CUPED) | 0,7315 | 22.847 | 16 | 11 |
| previsão do modelo (CUPAC) | 0,4830 | 15.088 | 11 | 8 |
Os autores do CUPED descrevem o ganho de cerca de 50 por cento de redução de variância no Bing como “equivalente a dobrar nosso tráfego ou reduzir à metade o tempo que precisamos rodar um experimento para obter a mesma sensibilidade”. A tabela acima é essa frase em números: 22 dias viram 11.
O outro jeito de gastar o ganho é manter a duração e detectar efeitos menores. Com 18.000 visitantes por variação fixos:
| covariável | amostra efetiva | efeito mínimo detectável |
|---|---|---|
| nenhuma | 18.000 | +12,87% relativo (0,644 pp) |
| só tempo de cadastro | 18.489 | +12,70% relativo (0,635 pp) |
| CUPED | 24.608 | +11,01% relativo (0,550 pp) |
| CUPAC | 37.264 | +8,95% relativo (0,447 pp) |
Passar de detectar mais 12,87 por cento para detectar mais 8,95 por cento muda a carteira de testes que faz sentido rodar. Muita ideia boa produz ganhos de 5 a 10 por cento relativo, e com a régua bruta essas ideias nunca concluem nada. Veja efeito mínimo detectável para o raciocínio completo.
Exemplo trabalhado: o teste que passa a concluir
Vale ver isso numa leitura concreta. O teste rodou com 18.000 visitantes por variação e devolveu 900 conversões no controle contra 972 na variação:
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.
Isso dá 5,000 por cento contra 5,400 por cento, um ganho relativo de 8,00 por cento, valor-p de 0,087427 e intervalo de menos 0,0587 a mais 0,8587 ponto percentual. Não passa em 0,05. O poder para detectar mais 8 por cento com essa amostra era de apenas 40,10 por cento, ou seja, o teste tinha 3 chances em 5 de não concluir nada mesmo com o efeito sendo real.
Agora a mesma leitura com o ganho de sensibilidade. Como o efeito da redução de variância é idêntico ao de ter mais amostra, basta alimentar a calculadora com a amostra efetiva e as conversões na mesma proporção:
- Com CUPED (amostra efetiva 24.607 por variação, 1.230 contra 1.329 conversões): valor-p 0,044431. Passa, raspando.
- Com CUPAC (amostra efetiva 37.267 por variação, 1.863 contra 2.012 conversões): valor-p 0,013958, intervalo de mais 0,0811 a mais 0,7186 ponto percentual, e o poder sobe de 40,10 para 69,12 por cento.
O efeito estimado é o mesmo nos três casos, +8,00 por cento relativo. O que muda é o intervalo em volta dele. O teste bruto e o teste com CUPAC observaram o mesmo mundo; só um deles conseguiu afirmar algo sobre ele.
O erro que enviesa tudo
Aqui está a única regra de CUPAC que, se quebrada, transforma a técnica em fábrica de conclusão errada: a covariável tem que ser construída só com dados anteriores ao teste. O DoorDash escreve de forma direta que cada variável de controle precisa ser independente do tratamento, e nota que, como as features vêm de antes do experimento, a previsão construída sobre elas também será descorrelacionada do tratamento, o que é o que a torna admissível como covariável.
Medimos o custo de quebrar essa regra. Simulação de 2.000 repetições, 8.000 usuários por repetição, efeito total verdadeiro de 9,40 (composto de um efeito direto de 4,00 mais um efeito indireto de 5,40 que passa por uma variável intermediária):
| estimador | média das estimativas | viés | desvio entre repetições |
|---|---|---|---|
| diferença simples de médias | 9,3864 | −0,0136 | 0,6733 |
| ajuste com covariável do pré-período | 9,3961 | −0,0039 | 0,4394 |
| ajuste com covariável medida no teste | 2,8911 | −6,5089 | 0,6114 |
A covariável do pré-período faz as duas coisas que se espera dela: mantém a estimativa correta e reduz o desvio de 0,6733 para 0,4394, uma queda de 34,74 por cento. A covariável medida durante o teste destrói a estimativa: o efeito de 9,40 aparece como 2,89, porque o ajuste absorve a parte do efeito que passa pela própria covariável e ainda superajusta em cima disso. Não é uma estimativa pior do efeito total, é uma estimativa de coisa nenhuma.
Esse é o mesmo mecanismo de superajuste que discutimos em análise de mediação, com uma diferença importante: lá a decomposição é o objetivo declarado e a conta é feita para isso. Aqui é acidente, e o número aparece no relatório como se fosse o efeito do teste.
Cross-fitting: por que a previsão vem de fora da amostra
Falta um detalhe operacional que é fácil de errar. Se você treina o modelo nos mesmos usuários em que aplica a previsão, o resíduo de cada usuário fica artificialmente pequeno, porque o modelo memorizou parte do ruído daquele usuário específico. Isso contamina a estimativa.
A solução padrão é cross-fitting: divide-se a amostra em K dobras, treina-se em K − 1 e prevê-se na que sobrou, repetindo até todo usuário ter uma previsão feita por um modelo que não o viu. Foi assim que geramos a previsão com 5 dobras na simulação acima. O MLRATE adota o mesmo mecanismo, e o abstract do artigo é explícito: ele “emprega cross-fitting para evitar vieses de sobreajuste”. O arcabouço geral disso está em aprendizado de máquina duplo.
Como montar o CUPAC na prática
- Congele a janela de pré-período antes de o teste começar. Tudo o que entra no modelo tem que ter timestamp anterior ao início da exposição. Essa é a regra dura.
- Comece pelo CUPED. A métrica do pré-período é uma linha de SQL e já entregou 26,85 por cento na simulação. Só passe para o CUPAC depois de ter isso rodando.
- Meça a correlação fora da amostra ANTES de confiar. A redução prometida é o quadrado dessa correlação; se ela vier em 0,20, o ganho é 4 por cento e não compensa o modelo.
- Use cross-fitting com 5 dobras. É o padrão do MLRATE e da literatura de aprendizado de máquina duplo, e o custo adicional é irrelevante.
- Valide num teste A/A. Rode o estimador ajustado numa divisão sem tratamento nenhum e confirme que ele não produz efeito. É a checagem que o MLRATE usa nos 48 desfechos do artigo, e o caminho está em teste A/A.
- Trate usuários novos explicitamente. Quem não tem pré-período não tem covariável. Imputar a média do grupo é aceitável desde que a regra seja igual nos dois braços.
- Reporte o efeito e a redução de variância juntos. Sem a segunda, ninguém consegue comparar o poder do teste de hoje com o de três meses atrás.
Erros comuns
- Incluir qualquer feature do período do teste no modelo. É o viés de menos 6,5089 medido acima. Vale para tudo: sessões durante o teste, cliques, tempo na página.
- Retreinar o modelo com dados do teste “para melhorar a previsão”. Melhora a previsão e destrói o estimador.
- Aplicar o theta calculado separadamente em cada braço. O theta tem que ser único e estimado no conjunto todo; theta por braço reintroduz diferença entre os grupos.
- Confundir redução de variância com aumento do efeito. A estimativa central não muda; no exemplo trabalhado ela ficou em +8,00 por cento nos três casos.
- Usar CUPAC para justificar teste mais curto que uma semana. Sensibilidade não resolve ciclo semanal; efeito de dia da semana continua exigindo semanas inteiras.
- Esquecer que a unidade da métrica importa. Para métricas de razão, o ajuste tem que ser combinado com o método delta, como em métricas de razão.
- Tratar o ganho como garantido antes de medir. O DoorDash relata mais de 25 por cento de encurtamento nos testes switchback deles, e esse número é o deles, no problema deles. O seu depende inteiramente da correlação que o seu modelo alcança.
Faça isso automático na Donnu
O gargalo do CUPAC não é o modelo, é a fronteira temporal. Para a covariável ser legítima, é preciso saber com precisão quando cada usuário entrou no experimento, e ter os dados dele de antes desse instante separados dos dados de depois. Programa que não guarda o momento da exposição não consegue construir essa covariável sem risco de contaminação, e o erro é silencioso: o número sai, o intervalo sai estreito, e ninguém percebe que 69 por cento do efeito foi absorvido pelo ajuste.
A Donnu registra a configuração do experimento no momento em que ele é criado, com a métrica primária declarada, e mantém o histórico por experimento. Isso deixa a fronteira entre pré-período e período do teste explícita, que é a condição para qualquer ajuste por covariável ser confiável.
E fica a recomendação mais prática deste guia: antes de investir num modelo de previsão, calcule a correlação fora da amostra entre a métrica do seu pré-período e o desfecho do teste. Se ela já estiver perto de 0,7, o CUPED simples entrega quase tudo o que o CUPAC entregaria. Se estiver perto de 0,3, aí o modelo vale o trabalho. A calculadora de tamanho de amostra traduz a diferença em dias.
Referências
- Deng, A., Xu, Y., Kohavi, R. e Walker, T. Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data. WSDM 2013, Roma. Fonte da formulação de variáveis de controle usada neste guia: da definição da métrica ajustada, da demonstração de que a variância é minimizada quando theta é igual a cov(Y, X) dividido por var(X), e do resultado de que, com esse theta ótimo, a variância fica igual a var(Y) multiplicada por um menos rho ao quadrado, com a conclusão de que “quanto maior rho, melhor a redução de variância”; da exigência de usar apenas informação do pré-período, porque ela “é garantidamente independente do efeito do experimento, o que é crucial para evitar resultados enviesados”; e da validação em experimentos reais no Bing, com “uma redução de variância de cerca de 50 por cento, equivalente a dobrar nosso tráfego ou reduzir à metade o tempo que precisamos rodar um experimento para obter a mesma sensibilidade”. exp-platform.com.
- Li, J. Improving Experimental Power through Control Using Predictions as Covariate (CUPAC). Blog de engenharia do DoorDash, 8 de junho de 2020. Fonte do nome e da definição do método (Control Using Predictions As Covariates), apresentado como extensão do CUPED “para aproveitar previsões de aprendizado de máquina construídas com insumos não afetados pela intervenção do experimento”; do relato de que a abordagem permitiu “encurtar nossos testes switchback em mais de 25 por cento mantendo o poder experimental”; da exigência explícita de que “cada uma dessas variáveis de controle precisa ser independente do nosso tratamento”; da afirmação de que a variância reduzida escala com a correlação parcial fora da amostra entre a previsão e o desfecho; e do argumento de que uma codificação do desfecho por aprendizado de máquina captura relações complexas entre múltiplos fatores que covariáveis lineares deixam passar. careersatdoordash.com.
- Guo, Y., Coey, D., Konutgan, M., Li, W., Schoener, C. e Goldman, M. Machine Learning for Variance Reduction in Online Experiments. NeurIPS 2021. Fonte do estimador MLRATE e de três pontos usados aqui: de que ele usa previsões de aprendizado de máquina do desfecho para reduzir a variância do estimador, de que “emprega cross-fitting para evitar vieses de sobreajuste”, e da propriedade de robustez de que, se as previsões não têm correlação com os desfechos, o estimador se comporta assintoticamente não pior que a diferença simples de médias, enquanto se as previsões são altamente correlacionadas os ganhos de eficiência são grandes; além do resultado empírico em testes A/A sobre 48 métricas de desfecho monitoradas em experimentos do Facebook, com variância mais de 70 por cento menor que a diferença simples de médias e cerca de 19 por cento menor que o procedimento univariado que ajusta apenas pelo valor da própria métrica no pré-período. arxiv.org.
Leia também: O que é CUPED · Ajuste por regressão · Estratificação · Quantos visitantes para um teste A/B · Outliers e capping · Calculadora de tamanho de amostra · Read in English
Perguntas frequentes
- O que é CUPAC em teste A/B?
- CUPAC é a sigla de Control Using Predictions As Covariates, publicada pela engenharia do DoorDash em 2020. A ideia é usar a previsão de um modelo de aprendizado de máquina, treinado só com dados anteriores ao teste, como a covariável de ajuste. É a generalização do CUPED, que usa uma única métrica do pré-período. Na simulação deste guia, CUPED corta 26,85 por cento da variância e CUPAC corta 51,70 por cento.
- Quanta variância o CUPAC corta na prática?
- A redução é exatamente o quadrado da correlação entre a covariável e o desfecho. Na simulação deste guia, a métrica do pré-período tem correlação de 0,5182 com o desfecho, o que dá 26,85 por cento de redução, enquanto a previsão do modelo tem 0,7190, o que dá 51,70 por cento. O DoorDash relata que a técnica permitiu encurtar os testes switchback deles em mais de 25 por cento mantendo o poder.
- CUPAC diminui o tamanho de amostra necessário?
- Sim, na proporção de um menos o quadrado da correlação. Com base de 5 por cento e efeito mínimo de mais 10 por cento relativo, o requisito bruto é 31.234 visitantes por variação. Com a redução do CUPED cai para 22.847 e com a do CUPAC cai para 15.088, ou seja, menos da metade. A 20.000 visitantes por semana, isso é a diferença entre 22 e 11 dias de teste.
- Qual é o erro fatal ao montar a covariável do CUPAC?
- Usar qualquer variável medida DURANTE o teste. Numa simulação de 2.000 repetições feita para este guia, com efeito verdadeiro de 9,40, a diferença simples devolve 9,3864 e o ajuste com covariável do pré-período devolve 9,3961, os dois corretos. O ajuste com uma covariável de dentro do teste devolve 2,8911, um viés de menos 6,5089. O DoorDash é explícito: cada variável de controle precisa ser independente do tratamento.
- CUPAC pode piorar o resultado se o modelo for ruim?
- Praticamente não. Se a previsão não tem correlação com o desfecho, a redução de variância tende a zero e o estimador se comporta como a diferença simples de médias. Na simulação deste guia, uma covariável fraca com correlação de 0,1627 corta só 2,65 por cento da variância, o que muda o requisito de amostra de 31.234 para 30.408, um ganho irrelevante mas não negativo. Guo e coautores provam essa robustez formalmente para o estimador MLRATE.
- Por que a previsão precisa ser feita fora da amostra?
- Porque um modelo avaliado nos mesmos dados em que foi treinado tem resíduo artificialmente pequeno, e isso contamina a estimativa do efeito. O caminho padrão é o cross-fitting: divide-se a amostra em dobras, treina-se em algumas e prevê-se nas outras. Tanto o MLRATE quanto o arcabouço de aprendizado de máquina duplo usam exatamente esse mecanismo para evitar viés de sobreajuste.