Só mais uma semana e a fábula do dobro ou nada

O Falso Milagre

Todo mundo já viu aquele teste da feature que ia mudar tudo e gerar uma receita de um bilhão. O teste roda por dois meses. A equipe está ansiosa. Na hora de apresentar os resultados, vem a grande surpresa: o p-valor ficou em 0,06 (logo acima do limiar tradicional de 0,05).

O clima fica pesado. Muitos recursos, tempo e esperanças investidos naquela ideia genial parecem perdidos. Eis que, então, alguém levanta a mão e traz a solução, a luz no fim do túnel, o salvamento do bilhão.

"E se a gente deixar o teste rodando por mais uma ou duas semanas? Só para ver se ele 'bate' de vez?"

Um silêncio absoluto precede os aplausos lentos. Todos param para apreciar a ideia mais genial que apareceu naquela empresa. Duas semanas depois, o "milagre" acontece: o p-valor cai para 0,048. A feature é aprovada, o herói promovido. Agora é só esperar os bilhões entrarem.

Tudo parece perfeito. Mas o que pode ter ocorrido é a materialização de um falso positivo. Como isso é possível? Para explicar resultados "contraintuitivos" da estatística, é sempre bom recorrer a um clássico: o Problema de Monty Hall.


O Problema de Monty Hall

Talvez você não saiba exatamente o nome, mas provavelmente já teve algum contato com o conceito, seja por aquela cena do filme "Quebrando a Banca", ou até por um amigo entusiasta de matemática tentando explicá-lo (talvez esse último só aconteça comigo e com meus amigos).

O problema clássico consiste nos seguintes elementos: um apresentador de TV, um jogador, três portas, duas contendo um bode e a premiada, que contém um carro. O jogador, inicialmente, escolhe uma porta; o apresentador (que sabe onde está o prêmio) abre uma das outras duas portas que não foram escolhidas e revela que ela contém um bode. Então, ele se vira para o jogador e faz a oferta: "Você quer trocar a sua porta pela outra que ficou fechada?". Intuitivamente, nada parece ter mudado: uma nova escolha, agora com probabilidade de 50/50. Porém, essa intuição está errada, pois ignora o fato crucial: o apresentador não escolhe uma porta aleatoriamente; sabendo onde está o prêmio, ele abre uma porta que não o contém, e isso adiciona informação ao problema, tornando-o completamente diferente.

Decompondo o problema como um todo, temos:

  1. Escolha inicial: você tem 1/3 de chance de escolher o carro e 2/3 de chance de escolher um bode.
  2. Apresentador: abre uma porta com bode entre as duas que você não escolheu. Se você inicialmente escolheu um bode, ele é forçado a abrir a única outra porta com bode, deixando o carro inevitavelmente na porta restante.
  3. Decisão final: portanto, ao trocar, você inverte as probabilidades iniciais, resultando em 2/3 de chance de ganhar, contra apenas 1/3 ao ficar com a porta.

Se ainda parece complexo, vamos colocar no papel (ou computador) o teorema de Bayes, que rege esse problema. Assim, podemos ver como a adição de uma informação muda completamente o problema estatístico.

Fixando o cenário: você escolheu a porta 1 e o apresentador abriu a porta 3, revelando um bode. Chame de C₁, C₂ e C₃ as hipóteses de o carro estar em cada uma das portas, todas valendo 1/3 antes de qualquer revelação, e de E a evidência que acabamos de observar.

Bayes nos dá:

$$P(C_i|E) = \frac{P(E|C_i) \cdot P(C_i)}{P(E)}$$
  • $P(E|C_1) = 1/2$ — carro na porta escolhida e bodes nas portas 2 e 3.
  • $P(E|C_2) = 1$ — carro na porta 2, logo o apresentador precisa abrir a porta 3.
  • $P(E|C_3) = 0$ — ele jamais abriria a porta do carro.
$$P(E) = \frac{1}{2} \cdot \frac{1}{3} + 1 \cdot \frac{1}{3} + 0 \cdot \frac{1}{3} = \frac{1}{6} + \frac{1}{3} = \frac{1}{2}$$

E as posteriores:

$$P(C_1|E) = \frac{\frac{1}{2} \cdot \frac{1}{3}}{\frac{1}{2}} = \frac{1}{3} \qquad P(C_2|E) = \frac{1 \cdot \frac{1}{3}}{\frac{1}{2}} = \frac{2}{3}$$

A porta inicial mantém a probabilidade original de 33,3% e, consequentemente, a porta restante dobra sua probabilidade para 66,7%. A ação do apresentador não é neutra; ela transfere probabilidade da porta que ele abre (que vai para zero) para a outra porta.

Se esses cálculos ainda parecem de outro mundo, vamos tentar utilizar simulações computacionais para confirmar esses resultados, mostrando consistentemente que trocar é a decisão correta a se fazer, pois gera uma chance de aproximadamente 66,7% de vencer, enquanto manter a escolha inicial resulta em apenas 33,3%.

Simulação do Problema de Monty Hall demonstrando 66,7% de vitórias ao trocar versus 33,3% ao manter a escolha inicial

O Peeking Problem

Quando nosso protagonista abre o painel na semana 8, vê o resultado próximo à linha de significância e decide deixar rodar mais um pouco, algo que parece inofensivo, assim como trocar ou não de porta no problema de Monty Hall: alguém com informação que os outros não têm toma uma decisão aparentemente neutra e, sem anunciar, redistribui probabilidade. Essa analogia tem um limite: no problema de Monty Hall, a informação do apresentador trabalha a favor do jogador e, ao se abrir uma porta vazia, podemos atualizar a probabilidade inicial. No teste A/B acontece o contrário: a regra de parada estava fixa no papel, mas foi o próprio pesquisador quem a quebrou no meio do caminho, e duas semanas a mais de dados são, sim, informação nova. O que ele perdeu não foi informação, foi a garantia estatística que dava sentido ao valor-p que ele calculou. Monty Hall mostra que informação nova muda uma probabilidade; o peeking mostra que quem decide quando parar de olhar decide o resultado.

Todo teste A/B nasce de quatro decisões tomadas antes de qualquer dado entrar: o nível de significância α (erro tipo I), o poder 1−β, o efeito mínimo detectável (MDE) e o tamanho da amostra, que não é uma escolha independente das outras três, mas a consequência delas somada ao efeito mínimo que você se importa em detectar. Esse é um pacote fechado que só é válido sob uma condição: olhar o resultado uma vez. Espiar no meio e decidir continuar com base no que viu transforma um teste em vários, onde, a cada olhada, damos uma nova chance ao acaso de cruzar a linha de significância por pura sorte, e o acaso aproveita todas.

Número de "Olhadas" no Teste Chance Real de um Falso Positivo (α Real)
1 (apenas no final planejado) 5%
2 ~8%
5 ~14%
10 ~19%
20 ~25%
Monitoramento Contínuo Pode exceder 30%+

Nosso herói fez duas olhadas. Isso coloca o α real dele em torno de 8%, e o p-valor de 4,8% que ele encontrou na semana 10 está abaixo do limiar errado. Quando usamos o limiar verdadeiro, 8%, o teste falha em identificar um efeito real, e o milagre da semana 10 é apenas uma miragem.

Uma forma de verificar esse problema é montar um teste A/A, em que os dois grupos recebem exatamente a mesma coisa. Acompanhando o valor-p em 20 análises até o fim, cerca de um quarto das rodadas vai cruzar a significância em algum momento do percurso, ainda que apenas 5% terminem significativas na data planejada.

Código da Simulação
from typing import List, Tuple
import numpy as np
from scipy import stats

class ABTestSimulator:

    @staticmethod
    def run_aa_test(total_n: int = 10000, checks: int = 20, alpha: float = 0.05) -> Tuple[bool, bool, List[float]]:
        group_a = np.random.normal(0, 1, total_n)
        group_b = np.random.normal(0, 1, total_n)

        p_values = []
        peek_significant = False

        for i in range(1, checks + 1):
            current_n = int(total_n * i / checks)
            _, p = stats.ttest_ind(group_a[:current_n], group_b[:current_n])
            p_values.append(p)
            if p < alpha:
                peek_significant = True

        final_significant = p_values[-1] < alpha
        return peek_significant, final_significant, p_values

sim = ABTestSimulator()
n_sims = 10000
crossed, final = 0, 0

for _ in range(n_sims):
    is_peek, is_final, _ = sim.run_aa_test()
    if is_peek: crossed += 1
    if is_final: final += 1

print(f"Alpha-crossing rate (Peeking): {crossed/n_sims:.1%}")
print(f"Final significance rate: {final/n_sims:.1%}")
Alpha-crossing rate (Peeking): 24.1% Final significance rate: 5.1%

A Maldição do Vencedor: Quando Até Efeitos Reais Enganam

O peeking problem não infla apenas os falsos positivos. Ele infla também o tamanho do efeito observado, e esse segundo problema é possivelmente mais danoso na prática.

O nome disso é maldição do vencedor (winner's curse). Quando você para um teste antecipadamente, ou o estende, o efeito medido no ponto de parada não é uma amostra aleatória do efeito verdadeiro. Ele foi selecionado condicionalmente, por ter sido grande o suficiente para cruzar o limiar de significância naquele momento específico. O ruído que empurrou a estimativa para cima é o mesmo ruído que disparou a decisão de parar.

Para além da teoria: o time de engenharia do Etsy publicou uma análise detalhada de como a maldição do vencedor afeta seu programa de testes A/B, mostrando que confiar ingenuamente nos lifts observados de experimentos vencedores leva a uma superestimação substancial do impacto real no negócio. A estratégia de mitigação deles usa estimadores de encolhimento bayesianos, que descontam os lifts reportados em direção a um prior e produzem estimativas de tamanho de efeito mais realistas.

Quanto menor o poder estatístico, pior a maldição. Em estudos com poder entre 8% e 31%, as estimativas iniciais de tamanho de efeito aparecem infladas entre 25% e 50%. E essa é justamente a faixa em que testes A/B costumam cair, porque os efeitos mínimos detectáveis são escolhidos com otimismo e os tamanhos de amostra, sob restrição orçamentária. Então, mesmo quando um teste estendido encontra um efeito real, a magnitude observada no ponto de parada merece ceticismo: o efeito verdadeiro é quase certamente menor.


Como Fugir da Roleta Russa Estatística

O simples funciona: o velho definir o tamanho da amostra a partir do α, o poder e o MDE, rodar o teste e só olhar no fim produz um teste válido, com taxa de falso positivo igual à nominal. Porém, para além da curiosidade de se observar se o teste não está perdendo milhões, a possibilidade dele estar causando dano real aos usuários pode ser perigosa, e se planejar para a necessidade de observações pode ser essencial.

Dentre as opções, a mais fácil talvez seja repartir o α entre cada análise: planejar cinco observações com α de 0,01 em cada. Apesar de fácil, essa abordagem traz consigo o problema de que o poder do teste fica menor, tornando a amostra necessária para se observar o efeito maior do que tradicionalmente se teria.

A segunda possibilidade seriam os procedimentos de fronteira sequencial, como o O'Brien-Fleming e Pocock: distribui-se esse α ao longo do tempo, fazendo com que as primeiras análises necessitem de uma evidência extremamente forte e, com o passar do tempo, isso vá se diminuindo conforme a amostra cresce. Quando se sabe a quantidade de análises necessárias de antemão, esse seria o padrão.

Quando não se sabe quantas análises intermediárias podem ser necessárias, o caminho são os p-valores sempre válidos, como o MSPRT, onde se troca um pouco de poder por uma garantia mais forte de que a evidência calculada continua válida independente de quantas vezes se olha.

A quarta opção é a Bayesiana: em vez de se preocupar em corrigir a resposta que se obtém, troca-se a pergunta feita, de quão improvável seria o dado sob a hipótese nula e acompanha-se a distribuição posterior do efeito. Quando ele se torna conclusivo o bastante para a tomada de decisão, para-se. A única contrapartida é necessário escolher e defender um prior, algo que não se acha em qualquer livro ou vídeo introdutório.

Esticar um teste "só mais um pouco" porque o resultado está quase lá é a mesma lógica de dobrar a aposta numa mão perdida, com a diferença de que no cassino você pelo menos sabe que está apostando. O que separa experimentação de aposta disfarçada é menos a estatística que você usa e mais o momento em que você decide as regras. Decididas antes dos dados, elas te protegem; depois, elas só justificam a conclusão que você já queria.

← Voltar para todos os posts