Apps Mobile

Teste A/B Mobile x Web: o que Realmente Muda

Teste a/b mobile x web: ciclo de release, unidade de randomização, amostra, latência de propagação e as métricas de guarda que só existem dentro do app.

Ilustração plana de um celular e uma janela de navegador lado a lado, separados por uma linha vertical pontilhada

Teste A/B mobile e teste A/B web usam exatamente a mesma estatística e quase nada mais em comum. O teste de duas proporções, o valor-p, o intervalo de confiança e a fórmula de amostra são idênticos; o que muda é o ciclo de release, a unidade de randomização, o atraso entre atribuir uma variação e ela aparecer, o volume de tráfego disponível nas telas que importam e as métricas de guarda que só existem dentro de um app. Este artigo é filho do guia completo de teste A/B em apps mobile e trata de uma pergunta só: o que um time que já testa bem na web precisa desaprender antes de testar dentro de um aplicativo.

A versão curta: na web a parte difícil costuma ser decidir o que testar, porque publicar uma variação custa minutos. No mobile a parte difícil é a maquinaria em volta do teste, porque uma variação que não está atrás de uma flag remota pode levar semanas para alcançar todo mundo e não pode ser desligada quando dá errado.

Teste A/B mobile x web: as seis diferenças que mudam o resultado

Dimensão Web App mobile
Publicar uma variação Imediato, um snippet ou um deploy Depende de release, revisão da loja e adoção do usuário, a menos que esteja atrás de remote config
Matar uma variação ruim Imediato, desligar a flag ou reverter Imediato só com remote config; senão, nova submissão e novo ciclo de atualização
Unidade de randomização Cookie ou storage do navegador, fácil de perder Identificador de aparelho ou de instalação, às vezes a conta logada
Atraso entre atribuir e renderizar Milissegundos Segundos a dias, conforme a busca de configuração e a abertura do app
Tráfego na tela que decide Muitas vezes dezenas de milhares por semana Muitas vezes alguns milhares por semana
Métricas de guarda extras Tempo de carregamento, taxa de erro Crash, nota da loja, tamanho do app, bateria e consumo de dados

Cada linha dessa tabela tem a mesma consequência prática: no mobile você tem menos experimentos, mais lentos e mais caros, então cada um precisa ser escolhido e dimensionado com mais critério que o equivalente na web.

Ciclo de release de uma variação web comparado com uma variação mobileNa web o caminho é escrever a variação, publicar e expor, tudo no mesmo dia, com reversão imediata. No mobile o caminho é escrever a variação, submeter uma build, esperar a revisão da loja, esperar a adoção da atualização, e só então expor, a menos que a variação esteja controlada por configuração remota.Webescrever variaçãopublicarexpostomesmo diaMobile sem remote configescrever variaçãosubmeter buildrevisão da lojaadoção do usuárioexpostoCom remote config as três últimas etapas colapsam de volta num acionar de flag, e é por isso que remote config não é opcionalnum programa sério de teste mobile: é o que devolve a capacidade de parar rápido uma variação ruim.
O ciclo de release, e não a estatística, é o que torna o teste mobile lento. Configuração remota é o mecanismo que traz o mobile de volta para perto da velocidade de iteração da web.

Diferença 1: publicar e matar uma variação

Na web, uma variação é um deploy ou uma regra de snippet, e reverter é outro deploy. No mobile, uma variação embutida no binário precisa passar pela revisão da loja e depois esperar os usuários atualizarem, o que faz a população do teste crescer devagar e de forma desigual. Pior: ela não pode ser interrompida. Uma variação que derruba a conversão ou quebra uma tela numa família específica de aparelho segue rodando até uma nova versão sair e ser adotada.

É por isso que configuração remota não é um luxo no mobile, é a pré-condição para testar. A variação viaja dentro do binário mas nasce inativa; uma flag no servidor decide quem vê, e a mesma flag desliga em minutos. O Firebase Remote Config e a camada de A/B Testing em cima dele são a implementação mais comum nas duas plataformas, e toda alternativa séria funciona do mesmo jeito.

Uma consequência a planejar: a flag é buscada, cacheada e aplicada no ritmo do app, não no seu.

Diferença 2: latência entre atribuição e renderização

Na web, atribuição e renderização acontecem no mesmo carregamento de página. No mobile existe uma lacuna. O app busca a configuração remota, guarda em cache e muitas vezes aplica o valor novo só na abertura seguinte, então um usuário pode estar atribuído à variação B e continuar vendo a variação A por horas ou dias. Aparelhos em modo agressivo de economia de bateria, ou apps deixados em segundo plano por uma semana, esticam isso ainda mais.

Duas regras práticas saem daí. Primeira: trate os dias iniciais de um teste mobile como janela de propagação, não como amostra válida; se a sua plataforma permitir, conte a exposição a partir do primeiro evento que prova que a variação de fato renderizou, e não a partir da atribuição. Segunda: nunca compare o número do primeiro dia de um teste mobile com o do primeiro dia de um teste web, porque o do mobile inclui uma mistura de gente que ainda não recebeu a mudança.

Diferença 3: a unidade de randomização

Um teste web randomiza por cookie ou chave de storage do navegador, o que é frágil: storage limpo, janela anônima e um segundo aparelho produzem uma identidade nova para a mesma pessoa. Um teste mobile randomiza por identificador de aparelho ou de instalação, bem mais estável dentro de um aparelho e igualmente instável entre aparelhos: a mesma pessoa no celular e no tablet pode ficar dos dois lados do experimento.

Situação Unidade recomendada Por quê
App sem login, um aparelho por usuário Identificador de aparelho ou instalação Estável, simples, não exige identidade
Produto com login usado em vários aparelhos Identificador da conta Mantém a mesma pessoa na mesma variação em todo lugar
Teste que muda algo antes do login Identificador de aparelho, com usuários logados analisados à parte Misturar as duas unidades numa leitura só contamina a divisão
Teste cujo efeito só aparece depois do login Identificador da conta, excluindo sessões deslogadas Incluir sessões que não podiam converter dilui o efeito e infla a amostra necessária

A regra de bolso: escolha a unidade que corresponde ao nível em que o efeito acontece, e nunca misture duas unidades na mesma leitura. Isso se conecta direto com SRM, porque trocar de unidade no meio do teste aparece como uma proporção de divisão que muda ao longo do tempo.

Diferença 4: amostra e a aritmética da paciência

Aqui a diferença deixa de ser conceitual e passa a custar semanas. A fórmula não muda, só o denominador. Ajuste os números abaixo para a sua base e o seu tráfego:

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.

O mesmo teste, duas plataformas

Pegue uma taxa de conversão de 3% na tela que decide e um alvo de detectar uma melhora relativa de 10% (de 3,0% para 3,3%), a 95% de confiança e 80% de poder. A matemática devolve 53.211 usuários por variação, na web e dentro do app igualmente, porque a estatística não se importa com onde o usuário está.

O que muda é quanto tempo leva para acumular isso:

A resposta honesta no mobile não é rodar assim mesmo e espiar. É mudar a pergunta: mire numa melhora relativa de 20% (de 3,0% para 3,6%) e o requisito cai para 13.914 por variação, que aos mesmos 6.000 usuários por semana leva cerca de 33 dias. Efeito maior exige mudança maior, o que na prática significa testar uma tela redesenhada em vez de um botão reescrito.

Duração do mesmo teste na web e dentro do appCom base de 3 por cento e alvo de 10 por cento relativo, o teste precisa de 53.211 usuários por variação. Na web, a 40.000 visitantes por semana, isso leva cerca de 19 dias. Dentro do app, a 6.000 usuários por semana, leva cerca de 125 dias. Elevar o alvo para 20 por cento relativo reduz o requisito para 13.914 por variação e a duração no app para cerca de 33 dias.Dias até fechar a amostra (2 variações)Web, alvo +10%19 dias · 40.000 usuários/semanaApp, alvo +10%125 dias · 6.000 usuários/semanaApp, alvo +20%33 dias · 6.000 usuários/semanaMesma estatística, mesma fórmula. Só mudaram o denominador semanal e o efeito mirado.
Times mobile não ganham desconto na matemática. Ganham uma escolha: mirar efeitos maiores ou aceitar experimentos que duram um trimestre.

Diferença 5: o que dá e o que não dá para testar

Alguns experimentos simplesmente não existem do outro lado da divisa.

O que dá para testar na web, no app e nos doisSó na web entram iteração rápida de texto e landing pages vindas de busca. Só no app entram testes de ficha da loja, notificações push e pedidos nativos de permissão. Nos dois entram preço, onboarding e paywall, ainda que preço siga regras diferentes dentro do app.Só na webiteração rápida de textolanding page vinda de buscaciclos semanais multivariaçãoNos doisonboardingpaywall e preçomensagem e proposta de valorregras de loja diferentes dentro do appSó no appficha da loja (ASO)notificação pushpedido nativo de permissão
A sobreposição existe, mas é mais estreita do que parece, e as regras dentro dela não são as mesmas dos dois lados.

Diferença 6: métricas de guarda que só existem num app

Um teste web acompanha tempo de carregamento e taxa de erro. Um teste mobile precisa acompanhar mais três, e as três conseguem transformar um vencedor estatístico numa perda de negócio.

O erro de somar mobile e web num resultado só

O erro mais caro de quem roda as duas superfícies é tratá-las como um experimento só com uma amostra só. As duas populações têm taxas base diferentes, chegam por canais diferentes e convertem em prazos diferentes. Somar cria as condições clássicas do paradoxo de Simpson, em que cada grupo aponta para um lado e o agregado aponta para o outro. Rode dois experimentos, dimensione cada um com a sua própria base e o seu próprio tráfego, e compare as duas leituras como duas evidências independentes. Se concordam, a sua confiança no mecanismo sobe. Se discordam, você aprendeu algo específico sobre a superfície, o que é mais útil que um número misturado que não descreve nenhuma das duas.

A mesma disciplina vale para SRM. Um teste de 10.000 usuários que deveria dividir 50/50 e observa 5.300 contra 4.700 produz um qui-quadrado de aderência de 36 com 1 grau de liberdade, muito acima do limiar de 6,63 a 1%, com valor-p da ordem de dois em um bilhão. Na web isso normalmente significa um redirecionamento ou um filtro de bot. No mobile normalmente significa uma versão do app ou um cache de configuração, e invalida a leitura nos dois casos até a causa ser encontrada.

Um exemplo trabalhado: lendo um resultado web com honestidade

Um checkout web converte a 3,00%. O time publica um novo layout da etapa de pagamento e roda o teste até 26.000 visitantes por variação, encerrando com 780 pedidos no controle e 866 na variação (3,33%). Passando esses quatro números pela mesma matemática de duas proporções que este blog usa em todo lugar: z = 2,15, valor-p ≈ 0,0312, com intervalo de confiança de 95% da diferença entre +0,03 e +0,63 ponto percentual, e ganho relativo observado de +11,0%.

O resultado é significativo, e o intervalo é um bom lembrete de quão impreciso um resultado significativo pode ser: o ganho verdadeiro pode ser tão pequeno quanto 0,03 ponto, que é quase nada, ou tão grande quanto 0,63 ponto. Na web, rodar mais tempo para estreitar esse intervalo custa alguns dias. Dentro de um app com 6.000 usuários semanais na mesma tela, estreitar o mesmo intervalo custaria meses, e essa é a razão real pela qual programas mobile deveriam preferir poucos experimentos ousados a muitos experimentos marginais. O guia de significância estatística explica como ler cada um desses números.

Faça isso automático na Donnu

Se o seu produto vive nas duas superfícies, a divisão honesta do trabalho é esta: dentro do app, você precisa de remote config, randomização por aparelho e métricas de guarda de estabilidade; na web, você precisa de um snippet que não atrase a página, dimensionamento automático de amostra e estatística que não inventa certeza.

A Donnu cobre a metade web e client-side desse quadro: snippet leve, dimensionamento automático e estatística bayesiana honesta, sem entregar framework para o visitante. Ela não roda experimentos dentro de um binário nativo iOS ou Android, e este guia não finge o contrário. Se a sua jornada inclui uma landing page, um checkout web ou uma área logada acessível pelo navegador, comece um teste grátis de 14 dias e aplique o mesmo rigor a essa metade.


Leia também: Teste A/B em Apps Mobile: o Guia Completo · Teste A/B de Paywall Mobile · Teste A/B Client-Side x Server-Side · Read in English

Referências

Perguntas frequentes

A estatística de um teste A/B mobile é diferente da de um teste web?
Não. A matemática é idêntica: mesmo teste de duas proporções, mesmo valor-p, mesmo intervalo de confiança, mesma fórmula de tamanho de amostra. O que muda é tudo ao redor da matemática, e é isso que muda o resultado. Mobile tem ciclo de release mais lento, unidade de randomização ligada ao aparelho em vez do navegador, atraso entre atribuir uma variação e ela aparecer na tela, e muito menos tráfego nas telas que importam. Mesma estatística, condições mais difíceis.
Por que testes A/B mobile demoram tanto mais?
Porque o denominador é menor e a propagação é mais lenta. Uma landing page pode ver dezenas de milhares de visitantes por semana; a tela de paywall de um app médio vê alguns milhares de usuários por semana. Com a matemática deste blog, detectar uma melhora relativa de 10% sobre uma base de 3% exige cerca de 53.211 usuários por variação. A 40.000 visitantes semanais na web, isso dá aproximadamente 19 dias. A 6.000 usuários semanais dentro do app, o mesmo teste levaria cerca de 125 dias, e é por isso que times mobile costumam elevar o efeito mínimo detectável em vez de esperar.
Posso rodar o mesmo teste no app e no site e somar os resultados?
Não, e esse é um dos erros mais comuns. As duas populações se comportam de forma diferente, entram no funil por canais diferentes e costumam ter taxas base diferentes. Somar as duas cria as condições do paradoxo de Simpson, em que a direção agregada contradiz a direção de cada grupo isolado. Rode como dois experimentos separados, cada um com o seu próprio dimensionamento, e compare as duas leituras depois como duas evidências, nunca como um conjunto de dados só.
Qual é a unidade de randomização num teste dentro do app?
Normalmente o aparelho ou um identificador de instalação, às vezes a conta logada quando ela existe. Isso é mais estável que um cookie de navegador, que é apagado ou particionado com frequência, mas cria um problema diferente: um usuário com celular e tablet pode cair em variações diferentes, e uma reinstalação pode gerar um identificador novo para a mesma pessoa. Quando o mesmo usuário precisa ver sempre a mesma variação em qualquer aparelho, a unidade tem que ser a conta logada, e quem não está logado deve ficar de fora da análise em vez de entrar misturado.
Ainda preciso de remote config se o meu app consegue publicar toda semana?
Precisa, por dois motivos independentes. Primeiro, publicar não é o mesmo que ser adotado: uma versão só alcança quem realmente atualiza, então uma variação amarrada à versão sempre produz divisão desigual. Segundo, um teste que vive no binário não pode ser desligado. Sem configuração remota, matar uma variação prejudicial exige nova submissão, nova revisão e novo ciclo de atualização, enquanto a variação continua rodando em todos os aparelhos lá fora.
Quais métricas de guarda existem no mobile e não existem na web?
Três que importam. Taxa de crash e de app não responsivo por variação, porque uma variação pode estar vencendo estatisticamente enquanto degrada a estabilidade num subconjunto de aparelhos. Nota da loja e sentimento das avaliações, porque uma mudança de monetização pode subir a conversão e derrubar a nota, o que depois deprime o volume de instalação. Tamanho do app e consumo de bateria ou dados, porque uma variação mais pesada perde usuários em aparelhos de entrada e redes limitadas, e essas perdas não aparecem na taxa de conversão de quem ficou.
Quanto tempo do início de um teste mobile deve ser descartado?
O bastante para a configuração remota alcançar a base, e esse prazo você mede em vez de adivinhar. Os primeiros dias de um teste mobile misturam usuários que já receberam a variação com usuários que ainda estão vendo a versão antiga, então tratá-los como amostra válida dilui o efeito. Se a sua plataforma permitir, conte a exposição a partir do primeiro evento que prova que a variação renderizou, e não a partir da atribuição. Na prática, olhar a curva de exposição diária e começar a contar quando ela estabiliza resolve bem.