Estatística

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.

Ilustração plana de uma linha em ziguezague alto, uma curva suave subtraída dela e, à direita, uma linha quase reta como resultado

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.

Distribuição da métrica antes e depois do ajuste por covariávelDuas curvas em forma de sino sobre o mesmo eixo. A curva de cima, bruta, é larga e baixa, com desvio de trinta e um vírgula cinquenta e sete. A curva de baixo, depois do ajuste por previsão de modelo, é estreita e alta, com desvio de vinte e um vírgula noventa e quatro. A média das duas é a mesma, oitenta e seis vírgula zero nove.a média não muda, a largura mudamédia 86,09 nos dois casosbruto: desvio 31,5685com CUPAC: desvio 21,9400receita por usuário no período do testevariância cai 51,70%o teste fica mais sensível sem 1 visitante a mais
Reduzir variância não muda o efeito estimado. Muda a precisão com que ele é estimado, e é isso que decide se o teste conclui algo.

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.

Redução de variância como função da correlação da covariávelCurva quadrática crescente. Em correlação zero vírgula dezesseis a redução é dois vírgula sessenta e cinco por cento, em zero vírgula cinquenta e dois é vinte e seis vírgula oitenta e cinco por cento, em zero vírgula setenta e dois é cinquenta e um vírgula setenta por cento e em zero vírgula noventa seria oitenta e um por cento. A curva mostra que o ganho acelera com a correlação.redução de variância = correlação ao quadrado2,65%CUPED: 26,85%CUPAC: 51,70%0,00,30,60,9correlação entre a covariável e o desfecho80%50%0%é quadrática: subir a correlação de 0,5 para 0,7 quase dobra o ganho
O retorno é quadrático, e é por isso que vale investir no modelo. Cada décimo de correlação vale mais que o anterior.

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:

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.

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:

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.

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:

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
Viés das três formas de estimar o efeito com covariávelTrês barras horizontais partindo de um eixo vertical que marca o efeito verdadeiro de nove vírgula quarenta. A diferença simples e o ajuste pelo pré-período ficam praticamente sobre o eixo. O ajuste com covariável medida durante o teste fica muito à esquerda, em dois vírgula oitenta e nove, com viés de menos seis vírgula cinquenta e um.efeito estimado contra o efeito verdadeiro de 9,40verdade: 9,40diferença simples9,3864covariável do pré-período9,3961covariável de dentro do teste2,891105o mesmo procedimento, com a covariável errada, perde 69% do efeito real.e o intervalo em volta dessa estimativa errada é estreito, o que torna o erro invisível.
Covariável do pré-período: ajuste correto e 34,74 por cento menos ruído. Covariável medida durante o teste: 69 por cento do efeito desaparece do relatório.

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.

Cross-fitting em cinco dobras para gerar a covariável de previsãoCinco linhas, uma por rodada. Em cada linha há cinco blocos. Em cada rodada um bloco diferente está marcado como bloco de previsão e os outros quatro como blocos de treino. Ao fim das cinco rodadas todos os blocos receberam previsão de um modelo que não os viu no treino.cada usuário recebe a previsão de um modelo que não o viurodada 1rodada 2rodada 3rodada 4rodada 5dobra que recebe previsãodobras usadas no treinosem isso, o resíduo fica pequeno por memorização e a estimativa do efeito sai enviesada.
Cinco rodadas, cinco modelos, uma previsão limpa por usuário. O custo é treinar o modelo cinco vezes, e é barato porque o treino usa só dados do pré-período.

Como montar o CUPAC na prática

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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

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

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.