Explorando o Teorema de Bayes com Python

Uma Abordagem Técnica e fácil de entender com Python

André Almeida
5 min readDec 8, 2023
Photo by Ben White on Unsplash

A Estatística Bayesiana, uma abordagem inovadora na teoria da probabilidade, tem suas raízes fundamentais no Teorema de Bayes. Desenvolvida no século XVIII pelo reverendo Thomas Bayes, essa teoria estabeleceu as bases para uma interpretação mais dinâmica e adaptável da probabilidade, proporcionando uma estrutura única para atualizar crenças com base em novas evidências.

A Estatística Bayesiana difere da abordagem tradicional ao incorporar informações a priori, ou seja, crenças prévias sobre um evento antes de observar novos dados. O Teorema de Bayes é a pedra angular dessa abordagem, fornecendo um método sistemático para atualizar probabilidades com base em novas evidências.

Por exemplo, ao considerar o diagnóstico médico, podemos inicialmente ter uma probabilidade a priori de um paciente estar doente. À medida que novos dados, como resultados de exames laboratoriais, se tornam disponíveis, o Teorema de Bayes nos permite ajustar essa probabilidade, oferecendo uma visão mais precisa e dinâmica sobre a condição do paciente. Esse processo contínuo de atualização é fundamental para uma abordagem mais informada em uma variedade de contextos.

Photo by Accuray on Unsplash

Fundamentos do Teorema de Bayes na Estatística Bayesiana

A fórmula do Teorema de Bayes, central para a Estatística Bayesiana, é expressa por:

onde:

  • P(AB) é a probabilidade condicional de A dado B.
  • P(BA) é a probabilidade condicional de B dado A.
  • P(A) e P(B) são as probabilidades marginais de A e B, respectivamente.

Essa fórmula encapsula a essência da Estatística Bayesiana, permitindo a incorporação contínua de informações, refinando nossas crenças à medida que novos dados emergem.

Vamos para um exemplo prático

Photo by Edge2Edge Media on Unsplash

Suponhamos que estamos avaliando a probabilidade de um paciente estar doente dado que um teste específico é positivo. Definimos:

  • A: O paciente está realmente doente.
  • B: O teste é positivo para a doença.

Probabilidades Iniciais:

P(A): Probabilidade inicial de um paciente estar doente, digamos P(A) = 0.05 (5% de chance).

Probabilidade Condicional:

P(BA): Probabilidade de um teste ser positivo dado que o paciente está doente, por exemplo, P(BA) = 0.8 (80% de chance).

Probabilidade Geral de um Teste Ser Positivo:

P(B): Usamos a fórmula de probabilidade total para calcular a probabilidade geral de um teste ser positivo.

A probabilidade total é um conceito fundamental em probabilidade que nos ajuda a calcular a chance de um evento ocorrer, levando em consideração diferentes cenários ou causas possíveis.

No contexto do teste médico, podemos ter duas causas para um teste ser positivo: o paciente está doente (A), ou o paciente não está doente (¬A).

A fórmula da probabilidade total leva em conta ambas as possibilidades:

P(B) = P(BA) ⋅ P(A) + P(B∣¬A) ⋅ PA) = P(BA) ⋅ P(A) + P(B∣¬A) ⋅ (1 - P(A))

onde:

  • P(BA) é a probabilidade de um teste ser positivo, dado que o paciente está doente.
  • P(A) é a probabilidade de o paciente estar doente.
  • P(B∣¬A) é a probabilidade de um teste ser positivo, dado que o paciente não está doente.
  • PA) é a probabilidade de não estar doente, 1−P(A).

Essencialmente, a fórmula considera todas as maneiras possíveis pelas quais o teste pode ser positivo (o paciente está doente ou não está doente) e combina essas probabilidades ponderadas pelas chances iniciais de cada cenário.

Para nosso exemplo, consideramos:

  • P(B/A) = 0.8
  • P(B∣¬A) = 0.02

Logo,

P(B) = 0.8 * 0.05 + 0.02 * (1-0.05) = 0.059

Calculando P(AB):

P(A/B) = (P(BA) * P(A)) / (P(B)) = (0.8 * 0.05) / (0.059)

P(A/B) = 0.67797

Usando Python para aplicar o Teorema de Bayes

Photo by James Harrison on Unsplash

A função abaixo aplica o teorema de bayes e calcula P(A/B) usando a probabilidade incial e as probabilidades condicionais:

def teorema_de_bayes(prob_A: float,
prob_B_dado_A: float,
prob_B_dado_nao_A: float) -> float:
"""
Calcula a probabilidade condicional usando o Teorema de Bayes.

Parameters:
- prob_A (float): Probabilidade de A.
- prob_B_dado_A (float): Probabilidade de B dado A.
- prob_B_dado_nao_A (float): Probabilidade de B dado não A.

Returns:
- prob_A_dado_B (float): Probabilidade condicional de A dado B.
"""
prob_nao_A = 1 - prob_A
prob_B = (prob_B_dado_A * prob_A) + (prob_B_dado_nao_A * prob_nao_A)

prob_A_dado_B = (prob_B_dado_A * prob_A) / prob_B

return prob_A_dado_B

Para usar a função podemos usar o seguinte código abaixo:

# Probabilidades iniciais
probabilidade_doente = 0.05

# Probabilidade de um teste ser positivo dado que o paciente está doente
probabilidade_teste_positivo_dado_doente = 0.8

# Probabilidade de um teste ser positivo dado que o paciente não está doente
probabilidade_teste_positivo_dado_nao_doente = 0.02

# Chama a função para calcular P(A|B)
resultado = teorema_de_bayes(probabilidade_doente,
probabilidade_teste_positivo_dado_doente,
probabilidade_teste_positivo_dado_nao_doente)

print(f"A probabilidade de o paciente estar doente, dado um teste positivo, é: {resultado:.2%}")

Aplicação do teorema no contexto do marketing

Uma empresa de comércio eletrônico está lançando um novo produto e deseja entender a probabilidade de um cliente estar interessado no produto, dada a interação com seus anúncios online. A empresa possui conhecimentos prévios baseados em pesquisas de mercado e análises de comportamento do cliente.

A empresa sabe que:

10% dos Clientes São Naturalmente Interessados no Produto: A empresa estima que, de maneira geral, aproximadamente 10% dos clientes têm um interesse intrínseco no novo produto. Isso é uma avaliação inicial antes de considerar qualquer interação com os anúncios.

80% dos Clientes Interessados Clicam nos Anúncios: Entre os clientes que já têm interesse no produto, a empresa observa que uma proporção significativa, cerca de 80%, tende a clicar nos anúncios quando expostos a eles.

5% dos Clientes Não Interessados Clicam nos Anúncios: Mesmo entre os clientes que inicialmente não mostram interesse no produto, a empresa observou que uma pequena porcentagem, aproximadamente 5%, ainda decide clicar nos anúncios.

Agora ficou fácil. Podemos entender do problema que:

  • P(A): Cliente possui interesse no produto
  • P(B): Cliente clicou no anúncio

Assim:

  • P(A) = 0.10 (10%)
  • P(BA) = 0.8 (80%)
  • P(B∣¬A) = 0.05 (5%)

Com a nossa equação em python fica fácil fazer o cálculo:

# Probabilidades iniciais e condicionais
prob_interessado = 0.1
prob_clicou_interessado = 0.8
prob_clicou_nao_interessado = 0.05

# Chama a função para calcular P(Interessado|Clicou)
resultado = teorema_de_bayes(prob_interessado, prob_clicou_interessado, prob_clicou_nao_interessado)

print(f"A probabilidade de um cliente estar interessado, dado que clicou no anúncio, é: {resultado:.2%}")

Execute o código python para testar e veja o resultado! :)

Conclusão

Em síntese, a exploração do Teorema de Bayes com Python oferece uma abordagem técnica e acessível para a Estatística Bayesiana. Ao fornecer uma estrutura dinâmica para atualizar crenças com base em novas evidências, o Teorema de Bayes destaca-se como uma ferramenta poderosa em áreas diversas, desde diagnósticos médicos até estratégias de marketing. Sua aplicação prática em Python, exemplificada em cenários médicos e de marketing, ilustra a versatilidade e utilidade dessa abordagem estatística, capacitando profissionais a tomar decisões mais informadas e precisas.

No próximo post falaremos sobre o Naive Bayes, uma técnica de Machine Learning derivada do Teorema de Bayes.

--

--

André Almeida

Sou Engenheiro Eletricista que atualmente trabalha na área da Indústria 4.0 com Ciência de Dados e Inteligência Artificial.