Pular para o conteúdo

Experimentos (teste A/B)

Um experimento no Kilden não é um segundo divisor de tráfego. É uma lente sobre uma feature flag multivariante que você já tem: a flag continua decidindo quem vê o quê, exatamente como antes, e o experimento lê as exposições que seu SDK já está enviando e diz se a diferença é real.

Isso tem duas consequências que vale saber de antemão. Iniciar um experimento não muda nada do que seus usuários veem. E qualquer flag com duas ou mais variantes já é mensurável: você não precisa instrumentar nada novo.

Um experimento precisa de:

  • Uma flag multivariante com pelo menos duas variantes, uma marcada como controle.
  • Que seu código realmente consulte a flag. As exposições vêm de getFeatureFlag() / isFeatureEnabled(). Se o código ramifica sem chamar nenhuma das duas, o experimento não mede nada — e avisa.
  • Um evento objetivo: aquilo de que você quer mais. Conversão (esta pessoa fez pelo menos uma vez?) ou um valor por pessoa (uma soma, ou uma contagem).
// Esta chamada é o que coloca a pessoa no experimento.
const variant = await kilden.getFeatureFlag('checkout_flow');
if (variant === 'one_step') {
renderOneStepCheckout();
} else {
renderClassicCheckout();
}

O SDK envia uma exposição por flag por sessão; a análise fica com a primeira variante que cada pessoa viu.

Experimentos → Novo experimento, em três passos: a hipótese, a flag e seu controle, e o que conta como sucesso.

O último passo estima quanto tempo o teste precisa, usando o tráfego recente da própria flag. Se a resposta for “oito meses”, ele diz antes de você começar, e não depois: a forma mais comum de um teste A/B fracassar é não conseguir detectar o efeito que procurava.

Enquanto um experimento roda, a divisão da flag fica congelada. Mudar pesos no meio do caminho mistura duas configurações de atribuição diferentes sob um único resultado, que é a forma mais silenciosa de arruinar um teste. Pause o experimento se precisar editar a flag.

A página abre com um veredito em palavras, e tudo abaixo dele existe para que você possa auditá-lo.

O Kilden reporta “B supera o controle com 91% de probabilidade”. Essa é uma afirmação bayesiana sobre este experimento, e significa exatamente o que parece significar.

Um p-valor não. Ele responde a outra pergunta (“quão surpreendentes seriam estes dados se não houvesse diferença nenhuma?”), é rotineiramente lido como a probabilidade de estar certo, e pune justamente o comportamento que todo time real tem: olhar os resultados todos os dias. Sob observação contínua, uma regra de decisão baseada em p-valor infla os falsos positivos de forma severa. A leitura bayesiana se degrada muito melhor.

Ao lado dela você tem:

  • O intervalo credível — a faixa em que o efeito real plausivelmente vive. O Kilden nunca mostra um uplift sem um.
  • A perda esperada — quanto você abre mão em média se escolher essa variante e estiver errado. Este é o número que de fato responde “é seguro lançar?”.

Uma linha por variante, com o uplift contra o controle e seu intervalo credível de 95%. O zero está sempre no enquadramento, e um intervalo que cruza o zero é desenhado em cinza neutro — porque um efeito que pode ser positivo e pode ser negativo ainda não é um resultado.

Deliberadamente não é um gráfico de barras de taxas de conversão: barras convidam ao eixo truncado que transforma 2,1% contra 2,3% em uma montanha.

As distribuições do que pode ser a taxa real de cada variante. A sobreposição é a incerteza: duas curvas em cima uma da outra significam que você ainda não consegue distingui-las, diga o que disser o número que está na frente.

A probabilidade de superar o controle, dia a dia, calculada apenas com o que se sabia em cada dia. Ver essa linha cruzar os 95% cedo e voltar a cair é o argumento mais claro que existe contra parar assim que o resultado parece bom.

Todo experimento roda três verificações. Um resultado que as falha é pior que nenhum resultado, porque parece igualmente convincente — então o Kilden não reporta um vencedor quando elas falham, ele não ameniza a leitura.

Compara o tráfego que cada braço realmente recebeu com o que a flag estava configurada para mandar. Uma divergência significa que algo quebrou a atribuição: um filtro de bots assimétrico, uma mudança de pesos no meio do caminho, ou uma integração que consulta a flag só em um ramo. Qualquer conclusão em cima disso é ruído.

Pessoas que viram mais de uma variante. Costuma acontecer quando visitantes anônimos se identificam no meio do teste: o bucket depende do ID, então mudar o ID pode movê-las de braço.

O Kilden as exclui da análise e reporta a taxa em vez de corrigir em silêncio. Acima de 2%, o resultado é marcado como comprometido. A exclusão tem um viés próprio — deixa de fora quem fez login durante o teste — e esse é um problema menor e visível, contra um invisível.

Cada braço precisa de pelo menos 100 pessoas antes de qualquer inferência ser reportada, e o veredito acompanha o progresso contra a amostra que seu MDE implica.

É aqui que você vai encontrar a diferença entre liderando e decisivo. Um braço pode cruzar os 95% no terceiro dia com um quarto da amostra: efeitos reais e ruído puro fazem os dois isso. O Kilden chama de liderando, diz quanta amostra falta, e ainda assim deixa você concluir — a decisão é sua, a ferramenta só se recusa a fingir que o teste acabou.

Concluir congela os resultados exatamente como estão, como a evidência por trás da decisão, junto com o que você escrever sobre por que decidiu. Esse snapshot nunca é recalculado: os dados por baixo se movem — merges, retenção, backfills — e um número que muda depois da decisão não é evidência.

Concluir não muda sua flag. Colocar o vencedor em 100% é uma ação separada e explícita, com a auditoria da própria flag. O Kilden nunca muda o que seu produto faz por conta própria.

  • Apenas tráfego de navegador. Os SDKs server-side ainda não emitem eventos de exposição, por design.
  • Um evento objetivo como métrica primária; funis multi-etapa são aproximados com a última etapa.
  • Métricas de receita são winsorizadas no percentil 99 antes da comparação, para que um pedido enorme não mova a média. A página diz quantos valores isso tocou.