Projetando um Experimento Mínimo

Published on 2026-09-06·v1.0

Objetivos de Aprendizagem

  • Explicar por que o propósito de um experimento é distinguir uma hipótese de sua alternativa declarada, não coletar dados em geral.
  • Identificar medições em um experimento proposto que não poderiam mudar a conclusão, e cortá-las.
  • Projetar a condição de parada de um experimento (quanto dado é "suficiente") antes de rodá-lo, em vez de decidir depois de ver os resultados.
  • Conectar o tamanho de um experimento mínimo à largura do intervalo de confiança necessário para distinguir um efeito real de ruído.
  • Criticar um experimento sobreconstruído nomeando quais de suas medições são de fato estruturais.

Contexto e Motivação

Uma vez que uma hipótese é enunciada precisamente o suficiente para ser falsificável, um instinto natural seguinte é coletar o máximo de dados possível sobre ela, rodar toda configuração, medir toda variável, registrar tudo em log, e resolver depois. Esse instinto é quase sempre um erro, e corrigi-lo é o ponto deste conceito. Um experimento não é um exercício de coleta de dados; é um ato de discriminação entre duas possibilidades específicas, a hipótese e sua alternativa. Se uma medição sairia da mesma forma independentemente de qual das duas é verdadeira, essa medição não contribui nada para a discriminação, não importa quão interessante pareça. Projetar um experimento mínimo significa perguntar, para cada pedaço de dado que você está tentado a coletar, "se isso saísse diferente, mudaria em qual das minhas duas possibilidades eu acredito?", e recusar coletá-lo se a resposta honesta for não.

Richard Hamming pressionou exatamente esse ponto em You and Your Research: pessoas que fazem grande trabalho tipicamente estão trabalhando em uma ou duas perguntas sobre as quais pensaram intensamente o suficiente para saber precisamente o que as resolveria, enquanto pessoas que acumulam dados indiscriminadamente geralmente estão evitando o trabalho mais difícil de decidir, de antemão, o que de fato contaria como uma resposta. Um experimento projetado depois de esse pensamento estar feito tende a ser marcadamente pequeno, frequentemente uma única medição, ou um punhado de tentativas, porque a maior parte do que um experimento amplo e sem foco mediria nunca ia mover o ponteiro na pergunta real. Este é também onde falsificabilidade, coberta anteriormente nesta disciplina, se converte em uma restrição de design em vez de uma observação filosófica: uma hipótese só está genuinamente sendo testada se existe algum resultado possível que o faria abandoná-la, e um experimento mínimo é construído perguntando especificamente pela menor observação que tem essa propriedade.

A mesma disciplina aparece constantemente em trabalho de software e sistemas, onde a tentação de super-medir é especialmente forte porque instrumentação é barata. Depurar uma regressão de desempenho, por exemplo, convida a registrar em log toda métrica que um profiler pode produzir, tempo de CPU, alocação de memória, cache misses, pausas de coleta de lixo, contenção de thread, ao longo de todo caminho de código. Mas se a hipótese sob teste é "a regressão é causada por concatenação repetida de strings em um loop crítico," o experimento discriminador é muito menor: substitua a concatenação por um buffer pré-dimensionado, mantendo tudo mais fixo, e veja se a regressão desaparece. Toda outra métrica coletada ao lado dessa única mudança é, para o propósito desta hipótese, ruído vestido de rigor. Projetar um experimento mínimo é a habilidade de ver essa distinção antes de rodar qualquer coisa, não depois de encarar uma planilha de resultados que de fato não resolvem a pergunta.

Teoria Central

A alternativa define o experimento

Uma hipótese por si só não determina totalmente qual experimento rodar, o que a determina é a hipótese junto com a alternativa específica que você está tentando descartar. "Este algoritmo é O(n log n)" é testável contra a alternativa "este algoritmo é O(n²)" com um experimento razoavelmente pequeno (um punhado de tamanhos de entrada abrangendo algumas ordens de magnitude, já que as duas curvas divergem nítida e rapidamente). A mesma afirmação testada contra a alternativa mais específica "este algoritmo é O(n log n) mas com um fator constante muito maior que uma implementação concorrente" exige um experimento diferente e mais cuidadosamente controlado, a taxa de crescimento não discrimina mais, e agora o fator constante, isolado de ruído de medição, discrimina. Antes de projetar o experimento, a alternativa tem que ser fixada explicitamente; "não fazer mais" não é em si uma alternativa que gera previsões mensuráveis.

A regra do corte

Para qualquer medição sob consideração, pergunte: a hipótese prevê um valor diferente aqui do que a alternativa prevê? Se ambas preveem a mesma coisa, ou se nenhuma faz nenhuma previsão sobre essa quantidade de forma alguma, a medição é inerte para o propósito deste experimento, pode ser interessante para alguma outra pergunta, mas não pertence a esta. Aplicar essa regra agressivamente é o que "mínimo" significa. Não é sobre rodar menos tentativas por causa de velocidade; é sobre remover toda medição cujo resultado já é conhecido por não importar, por mais tentador que seja registrá-la "só por precaução." Um diagnóstico útil: se você consegue prever, agora mesmo, antes de rodar qualquer coisa, que uma medição sairá aproximadamente igual de qualquer forma, você já sabe que ela não faz parte do experimento mínimo, corte-a.

Quanto dado é "suficiente": decidindo antes, não depois

Um experimento mínimo não é apenas sobre quais variáveis medir, também é sobre quantas tentativas ou quanto dado coletar antes de olhar, e isso tem que ser fixado antecipadamente pela mesma razão que falsificabilidade tem que ser fixada antecipadamente: decidir depois, uma vez que você consegue ver como os dados estão tendendo, permite que você inconscientemente (ou conscientemente) escolha um ponto de parada que favorece a conclusão que você queria. A forma certa de fixar isso antecipadamente é perguntar quão grande uma diferença entre a hipótese e a alternativa de fato importaria, e depois determinar quanto dado é necessário para detectar uma diferença desse tamanho contra o ruído esperado na medição. Esta é precisamente a pergunta que um intervalo de confiança responde do lado estatístico (coberto completamente em Intervalos de Confiança, na trilha de probabilidade e estatística): a largura de um intervalo de confiança encolhe conforme o tamanho da amostra cresce, e para duas previsões concorrentes serem distinguíveis, o intervalo em torno do seu valor medido precisa ser estreito o suficiente para não cobrir tanto o valor previsto da hipótese quanto o da alternativa. Projetar um experimento mínimo e escolher uma largura de intervalo de confiança alvo são o mesmo ato descrito de dois ângulos diferentes, o design experimental diz "colete tentativas suficientes para distinguir essas duas previsões," e a aritmética do intervalo diz exatamente quantas tentativas isso exige, dado quanto ruído cada medição individual carrega. Pular essa etapa e apenas "rodar algumas vezes" significa que o tamanho da amostra do experimento foi escolhido por conveniência em vez de pelo que a pergunta de fato exige, e um resultado que parece uma diferença pode simplesmente ser um intervalo largo o suficiente para ter engolido ambas as possibilidades.

Reconhecendo um experimento sobreconstruído

Um experimento que mede mais que o conjunto mínimo não está automaticamente errado, às vezes as medições extras são um seguro barato contra uma hipótese estar subespecificada, ou contra uma alternativa em que você não tinha pensado. Mas um experimento sobreconstruído carrega custos reais: demora mais para rodar, multiplica o número de formas pelas quais uma confusão não relacionada pode se infiltrar (uma preocupação desenvolvida completamente em Controles e Isolando Variáveis, o próximo conceito nesta trilha), e produz uma pilha de resultados cuja relevância para a pergunta real tem que ser relitigada depois do fato. Uma boa verificação em um design experimental proposto é passar por toda medição planejada e pedir a outra pessoa para adivinhar, sem rodar nada, que resultado falsificaria a hipótese naquela medição específica. Se ela não conseguir responder, ou se sua resposta for "qualquer resultado ali é consistente com qualquer uma das possibilidades," essa medição é enchimento.

Exemplos Resolvidos

Exemplo 1 — uma hipótese de cache, reduzida ao seu teste mínimo

Configuração. Uma hipótese: "adicionar um cache LRU em memória na frente dessa busca de banco de dados vai reduzir a latência mediana de requisição." A alternativa: "a busca já é rápida o suficiente, ou o gargalo está em outro lugar, então o cache não fará diferença mensurável na latência mediana."

Versão sobreconstruída. Um primeiro rascunho do experimento registra em log utilização de CPU, pegada de memória, taxa de acerto de cache, latência de percentil 50/90/99/99,9, saturação do pool de conexão de banco de dados, e tempos de pausa de coleta de lixo, ao longo de um dia inteiro de tráfego de produção com o cache habilitado e desabilitado.

Cortando. Apenas uma dessas de fato discrimina entre a hipótese e sua alternativa: latência mediana de requisição, com e sem o cache, sob carga de outra forma idêntica. Taxa de acerto de cache é informativa sobre por que o cache ajuda ou não, mas a hipótese como enunciada não prevê uma taxa de acerto específica, ela prevê uma mudança de latência, então a taxa de acerto não é necessária para resolver a pergunta (torna-se relevante apenas para um acompanhamento, uma hipótese mais específica). CPU, memória, pausas de GC, e saturação do pool de conexão só importariam se a hipótese fosse em vez disso sobre consumo de recurso, não latência, a hipótese enunciada não faz nenhuma previsão discriminadora sobre nenhuma delas. Rodar um dia inteiro de tráfego de produção também é desnecessário se a carga puder ser reproduzida identicamente com e sem o cache em um cenário controlado; um dia inteiro adiciona volume, não discriminação, porque variação de tráfego por horário do dia é uma confusão, não uma fonte de informação nova sobre essa hipótese específica.

Experimento mínimo. Reproduza um rastro de requisição idêntico e fixo contra o serviço duas vezes, uma vez com o cache habilitado, uma vez desabilitado, e meça apenas a latência mediana em ambas as execuções, com repetições suficientes da reprodução para tornar a diferença (se houver) maior que o ruído entre execuções. Isso é menor, mais rápido, e responde exatamente à pergunta feita.

Exemplo 2 — dimensionando o experimento usando lógica de intervalo de confiança

Configuração. Uma hipótese: "trocar uma rotina de ordenação da implementação atual para uma nova reduz o tempo médio de execução em pelo menos 10%." A alternativa: "as duas implementações desempenham igual, dentro do ruído de medição."

Por que uma execução não é suficiente. Uma única execução cronometrada de cada implementação poderia mostrar uma diferença de 10% puramente por ruído de medição (jitter de agendamento de thread, aquecimento de cache, carga de sistema de fundo) mesmo que a diferença verdadeira seja zero, ou poderia falhar em mostrar uma diferença real de 10% se o ruído acontecer de trabalhar contra ela naquela execução específica. O experimento precisa de tentativas repetidas suficientes para que o intervalo de confiança em torno da diferença medida seja mais estreito que 10%, estreito o suficiente para que "a diferença verdadeira é zero" e "a diferença verdadeira é de pelo menos 10%" não possam ambas plausivelmente cair dentro dele.

Trabalhando através disso. Suponha que cronometragem preliminar mostre que execuções individuais variam por aproximadamente ±3% de execução para execução (o ruído). O intervalo de uma única execução é largo demais para distinguir um efeito de 10% de nenhum efeito, o ruído sozinho poderia produzir uma oscilação de 3% em qualquer direção. Calcular a média sobre muitas execuções encolhe a largura do intervalo aproximadamente na proporção da raiz quadrada do número de execuções (o comportamento padrão do intervalo de confiança de uma média); alcançar uma largura confortavelmente abaixo de 10%, digamos, buscando um intervalo de cerca de ±2% em torno da média, exige repetições suficientes para encolher o ruído de ±3% de execução única até esse alvo, o que na prática significa dezenas de tentativas cronometradas em vez de uma ou duas, alternando entre as duas implementações para tirar a média de qualquer deriva lenta na carga do sistema.

Design mínimo. Rode ambas as implementações intercaladas (antiga, nova, antiga, nova, …) na mesma máquina sob a mesma carga, pelo número de tentativas calculado para trazer o intervalo de confiança na diferença média abaixo do limiar de 10% que de fato importa para a hipótese, nem mais, já que um intervalo mais estreito que o necessário apenas adiciona tempo de execução sem mudar a conclusão, nem menos, já que um mais largo arrisca um resultado que não consegue de fato distinguir as duas possibilidades.

Equívocos Comuns e Armadilhas

  • "Um experimento maior é sempre mais rigoroso." Rigor vem de se o experimento consegue de fato distinguir a hipótese de sua alternativa, não de quanto dado ele produz. Um experimento que mede dez coisas irrelevantes ao lado da única relevante não é mais rigoroso que a versão mínima, é o mesmo rigor, diluído com ruído e falsa confiança de números não relacionados que aconteceram de parecer interessantes.
  • "Vou decidir quanto dado é suficiente vendo como os resultados parecem na metade do caminho." Escolher um ponto de parada depois de ver tendências preliminares é uma das formas mais confiáveis de se enganar, porque permite que os próprios dados influenciem quando você para de olhar, tipicamente bem quando eles acontecem de apoiar o que você esperava. O tamanho de amostra necessário deveria ser calculado a partir do tamanho do efeito que de fato importaria e do ruído esperado, antes de a primeira tentativa ser rodada.
  • "Mínimo significa rápido e descuidado." Mínimo se refere a escopo, quantas coisas distintas são medidas, não a cuidado na execução. Um experimento mínimo ainda pode exigir controles cuidadosos, tentativas repetidas, e rigor estatístico sobre tamanho de amostra; ele apenas se recusa a medir coisas que nunca iam mudar a resposta.
  • "Se eu não sei qual é a alternativa, eu posso simplesmente medir tudo e descobrir a hipótese depois." Isso é uma atividade diferente e legítima (análise exploratória de dados), mas não é teste de hipótese, e tratar sua saída como se tivesse testado uma afirmação específica é uma fonte comum de falsa confiança. Um experimento mínimo pressupõe que a hipótese e sua alternativa já estão ambas enunciadas.

Resumo

Um experimento mínimo é o menor teste que de fato pode distinguir uma hipótese enunciada de sua alternativa enunciada, toda medição que sairia igual independentemente de qual é verdadeira é cortada, não importa quão fácil seria coletá-la. Isso começa fixando a alternativa explicitamente, já que é o par de hipótese e alternativa, não a hipótese sozinha, que determina o que vale a pena medir. Também exige fixar, de antemão, quanto dado é necessário para tornar uma diferença real detectável sobre o ruído, a mesma pergunta que a largura de um intervalo de confiança responde diretamente: um experimento tem o tamanho apropriado quando o intervalo de confiança de seu resultado é estreito o suficiente para não conseguir plausivelmente conter tanto a previsão da hipótese quanto a da alternativa. Experimentos sobreconstruídos não são mais rigorosos; eles adicionam custo, convidam confusões, e produzem resultados cuja relevância ainda tem que ser argumentada depois do fato, que é exatamente o argumento que um experimento mínimo bem projetado resolve antes mesmo de ser rodado.

Documentation Links