Um Guia de Estudos para a execução de Teste A/B Bayesiano

Um compilado de materiais para quem pretende dar os primeiros passos no universo Bayesiano.

Tiago Augusto Ferreira
Academia dos Bots
8 min readFeb 4, 2021

--

Olá pessoal. Esta é a primeira postagem de 2021! Desejo a todos um ano com muitas realizações e boas vibrações!!

Neste primeiro tópico, trago um guia de estudos para dar os primeiros passos com a Teoria Bayesiana, em especial para testes A/B. No ano de 2020 participei de um Meetup na Quero Educação onde o time fez uma apresentação mostrando como eles migraram a estrutura de testes A/B de uma abordagem frequentista para a bayesiana. Naquele momento, eu saí de lá não entendendo uma palavra do que haviam falado (não que tenha mudado muita coisa agora..hehehe) porém com uma vontade imensa de conhecer mais. O tempo passou, e no final do ano passado resolvi apertar o play com uma meta: preciso entender pelo menos o básico deste assunto.

Saiba Mais

Nesta postagem você encontrará um pouco sobre as motivações da equipe na Quero Educação para a mudança de abordagem para os testes A/B, como também alguns links muito legais sobre o conteúdo.

Sobre o Teorema de Bayes

A Teoria Bayesiana foi elaborada por Thomas Bayes no ano de 1763 e em linhas gerais, traz um método que utiliza a probabilidade para atualizar a crença sobre determinado evento, ou seja, à medida que obtemos novos dados passamos a ficar mais confiantes sobre as nossas suposições. Em 1812 o teorema teve sua primeira formulação desenvolvida por Pierre-Simon Laplace que pode ser vista na figura abaixo.

Figura 01 — Fórmula Teorema de Bayes: https://www.chrisstucchio.com/pubs/slides/gilt_bayesian_ab_2015/slides.html#31

Na fórmula temos:

Figura 02 — Explicação dos termos

Atualmente, os conceitos bayesianos têm sido utilizados em diversas áreas de machine learning, sendo o uso mais clássico com o classificador Naive Bayes.

Saiba mais

Nos links abaixo você poderá aprofundar-se um pouco mais no tema:

Think Bayes

Vídeo sobre o teorema de Bayes do professor Francisco Rodrigues

Vídeo sobre Teoria da Decisão Bayesiana do professor Francisco Rodrigues

Vídeo Classificador Bayesiano do professor Francisco Rodrigues

Capítulo 01 do livro Probabilistic Programming and Bayesian Methods for Hackers.

Classificador Naive Bayes

Distribuições Estatísticas e o Cálculo

Para dar os primeiros passos no entendimento da teoria Bayesiana, é importante ter uma noção sobre as distribuições de probabilidade, pois, na prática, será preciso transpor a crença sobre determinado item para tais distribuições. Neste processo é natural os questionamentos do tipo: esta variável tem uma distribuição exponencial? É uma Gaussiana? Estamos modelando um processo de Poisson?

Observando na Figura 01, cada membro terá sua representação em termos de uma distribuição estatística que dependerá da natureza do problema a ser abordado.

Entender estas distribuições e construir uma modelagem com o conceito adequado é um dos grandes desafios. Um outro ponto a considerar é que a base matemática exigida para a compreensão das modelagens é um pouco mais complexa, pois como tratamos de distribuições, as análises são feitas com conceitos que abordam, por exemplo, o cálculo da área sob a curva de um determinado gráfico, o que invariavelmente nos direciona para as integrais e derivadas. Portanto, se ainda não viu estes tópicos ou precisa relembrar, é importante fazer uma pausa e matar a saudade (ou conhecer) do Guidorizzi ou da Diva Flemming. :)

Saiba mais

Abaixo colocarei as aulas do professor Francisco Rodrigues sobre distribuições discretas e contínuas bem como as vídeo aulas do curso de Cálculo I da USP:

Modelo discretos (parte 1): Distribuições Uniforme, Bernoulli e Binomial

Modelos discretos (parte 2): A distribuição de Poisson: Teoria e Simulação

Modelos discretos (parte 3): Distribuição geométrica, binomial negativa e hipergeométrica

A distribuição Normal (Gaussiana)

Modelos Contínuos: Exponencial, Uniforme, Gama, Beta, Weibull e t-student

Playlist Cálculo I da USP

Teste A/B

Tendo passado brevemente pelos conceitos acima, a ideia agora é trazer um pequeno projeto prático para conseguirmos internalizar um pouco o teorema de Bayes e para isto vamos falar sobre um tema bastante explorado em empresas que são os testes A/B. Em resumo, este recurso é utilizado quando pretende-se testar duas possibilidades, entregando uma alternativa A para um grupo e outra B para um segundo. Ao final, realiza-se uma análise para validar qual opção obteve melhor perfomance apoiando a área demandante na tomada de decisão.

Naturalmente as avaliações destes resultados são feitas utilizando a estatística frequentista, trazendo a necessidade da escolha prévia de um tamanho de amostra, definição de uma hipótese nula que deverá ser aceita ou rejeitada com base na avaliação do resultado do p-valor. Acontece que existem uma série de discussões sobre a validade da utilização do p-valor e nestas discussões temos a abordagem Bayesiana que traz um olhar diferente e sem a necessidade do uso deste parâmetro para a validação estatística dos resultados, tendo que a cada nova informação que recebemos, nossa crença é atualizada sobre o parâmetro observado (obtemos uma nova posteriori) ao passo que na medida em que o volume de dados vai crescendo vamos aumentando nossa confiança sobre os resultados.

Esta discussão sobre Bayesianos x Frequentistas bem como sobre a parte teórica do teste A/B Bayesiano é muito mais ampla do que os pontos abordados acima e a ideia aqui não é estressar tal assunto. Para compreender um pouco mais, coloco no quadro abaixo mais um grupo de indicações.

Saiba mais

Is Bayesian A/B Testing Immune to Peeking? Not Exactly. Uma das grandes vantagens citadas pelos defensores do teste A/B Bayesiano é que ele permite que a área de negócios consiga acompanhar frequentemente (peeking) os resultados . Neste post temos uma outra visão sobre está afirmação. Leitura super recomendada.

Bayesian A/B Testing at VWO — Neste link temos uma abordagem mostrando os motivos do uso da estatística Bayesiana na avaliação de testes A/B.

Bayesian vs. Frequentist A/B Testing: What’s the Difference? — Este link é citado no artigo da Quero Educação e traz algumas explicações sobre ambas as abordagens.

Frequentist and Bayesian inference: A conceptual primer — Este paper traz uma visão mais conceitual sobre o tema.

Formulas for Bayesian A/B Test — Traz um conjunto de equações para a avaliação de testes A/B.

Tomada de decisão com teste A/B — Artigo muito bom escrito pelo Guilherme Reis no Data Hackers e que traz o teste utilizando a abordagem frequentista, como também outros conceitos para uma análise anterior ao teste.

Mão na Massa

Para o projeto, vamos utilizar o dataset disponível no Kaggle chamado Mobile Games: A/B Testing. Nele temos uma situação onde os jogadores são forçados a fazer uma pausa no jogo, visando estimular as compras in-app. Esta parada ficou no level 30 para um grupo de jogadores e no 40 para outros, sendo que as métricas a serem avaliadas são a retenção de 1 dia (o player voltou a jogar após um dia da instalação) e a retenção de 7 dias (o player voltou a jogar após 7 dias da instalação).

Para não prolongar muito o post, o trabalho de exploração dos dados será omitido, podendo ser consultado AQUI.

Nesta análise foi utilizada a biblioteca Pymc3 que é desenvolvida para apoiar o desenvolvimento de modelos que fazem uso de programação probabilística. Com ela, conseguiremos definir nossas distribuições conforme indicado na fórmula do Teorema de Bayes. A documentação da Pymc3 contém vários exemplos e tutoriais que recomendo fortemente que vocês leiam e tentem replicar.

Voltando ao projeto, nosso processo aqui será:

  • Definir qual será a nossa distribuição a priori;
  • Definir qual será a distribuição likelihood;
  • Separar os dados observados para os níveis 30 e 40 para a retenção de 1 dia;
  • Rodar os modelos para os níveis 30 e 40 para obter a distribuição posteriori;
  • Avaliar os resultados;

Tendo isto em mente, vamos para a execução.

A priori

Sabemos que nossa taxa de conversão é um valor que pode variar entre 0 e1 (ou 0 e100%), porém, não temos conhecimento nenhum sobre a distribuição exata destes dados. Por isto, vamos assumir que no espaço de 0 a 1 teremos a mesma probabilidade de ocorrência de um número entre estes valores. Desta forma, vamos assumir que nossa priori será uma distribuição uniforme.

Figura 03 — Distribuição Uniforme: https://en.wikipedia.org/wiki/Continuous_uniform_distribution#/media/File:Uniform_Distribution_PDF_SVG.svg

Likelihood

Esta é a função de probabilidade do nosso valor observado. Pelo nosso dataset, temos que esta distribuição é um conjunto com 0s e 1s, o que nos direciona para o uso de uma distribuição de Bernoulli.

Separação dos dados observados

Aqui vamos criar as distribuições para as retenções de 1 dia nos níveis 30 e 40.

Rodando o modelo

Tendo definido a nossa priori e likelihood, vamos rodar o nosso modelo com a Pymc3 para a retenção de 1 dia.

Analisando resultados para a retenção de 1 dia

Observando as médias das posteriori geradas, observamos que a retenção de 1 dia para o nível 30 é ligeiramente maior do que o 40. Vamos explorar um pouco mais estes dados plotando as duas distribuições.

Aqui observamos uma boa parte da distribuição do nível 30 à frente do nível 40, porém a questão é: o quão confiantes estamos que a conversão para o nível 30 é maior. Para isto, vamos plotar a distribuição da diferença absoluta entre a posteriori dos níveis 30 e 40.

Pelo gráfico acima, observamos que boa parte da distribuição da diferença absoluta está à direita de 0, o que indica que na maioria dos dados a conversão de 1 dia para o level 30 é maior do que o level 40. Vamos avaliar agora a probabilidade desta diferença ser maior do que 0.

Pelas observações acima, temos uma confiança de 96,9% de que a retenção para o level 30 é maior do que o 40.

Para não ficar muito longo, não trarei o processo para a retenção de 7 dias, que poderá ser consultado no Notebook do Kaggle.

Conclusão

Desde que comecei meus estudos considerei este tópico um assunto bem complexo. Foram vários momentos de dúvidas e confesso que ainda tenho uma longa jornada pela frente para chegar no nível de entendimento que desejo, portanto, este post é mais para quem deseja dar os primeiros passos neste universo.

Gostaria de fazer um agradecimento especial à Naiara Cerqueira e Leonardo Raggio pela ajuda na construção deste post!

Peço para que caso tenham dicas, sugestões ou encontrem erros não hesitem em me contactar, será um imenso prazer trocar ideias sobre este assunto que tem me fascinado tanto.

Um abraço e até a próxima!

Links adicionais:

Getting Started Pymc3

Bayesian Estimation Supersedes the T-Test

Easy Evaluation of Decision Rules in Bayesian A/B testing

Coding Bayesian AB Tests in Python to Boost your App or Website Conversions

A/B testing with probabilistic programming and PyMC3 (part I)

Agile A/B testing with Bayesian Statistics and Python

MASP — Nosso framework de marketing digital

A/B Testing Rigorously (without losing your job)

--

--