Probabilidade Condicional: Conceitos e Exemplos com Python

Introdução

A probabilidade condicional é um conceito fundamental em estatística e machine learning. Ela mede a probabilidade de um evento ocorrer dado que outro evento já ocorreu. Em outras palavras, como o conhecimento prévio de um evento afeta a probabilidade de outro evento.

A fórmula da probabilidade condicional é dada por:

P(A | B) = P(A ∩ B) / P(B)

Onde:

  • P(A | B) é a probabilidade de A ocorrer dado que B já ocorreu.
  • P(A ∩ B) é a probabilidade de ambos A e B ocorrerem.
  • P(B) é a probabilidade de B ocorrer.

1. Exemplo Básico de Probabilidade Condicional

Vamos começar calculando a probabilidade condicional de dois eventos simples em Python.

Exemplo 1:

Suponha que queremos calcular a probabilidade de que uma pessoa tenha mais de 30 anos dado que ela é casada. Temos as seguintes informações:

  • 60% das pessoas são casadas.
  • 40% das pessoas casadas têm mais de 30 anos.

A probabilidade condicional é calculada como:


# Dados do problema
P_B = 0.6  # Probabilidade de ser casado
P_A_inter_B = 0.4  # Probabilidade de ter mais de 30 anos e ser casado

# Probabilidade condicional de ter mais de 30 anos dado que é casado
P_A_given_B = P_A_inter_B / P_B
print(f'P(A|B) = {P_A_given_B:.2f}')

2. Usando Dados em Tabelas de Frequência

Se tivermos dados em uma tabela de frequência, podemos calcular a probabilidade condicional facilmente.

Exemplo 2:

Vamos supor que temos uma tabela com as preferências de sorvetes entre homens e mulheres.

GêneroChocolateBaunilhaTotal
Masculino503080
Feminino4060100
Total9090180

Queremos calcular a probabilidade de uma pessoa preferir baunilha, dado que ela é feminina.


# Frequências
total_feminino = 100
prefer_baunilha_feminino = 60

# Probabilidade condicional P(baunilha|feminino)
P_baunilha_given_feminino = prefer_baunilha_feminino / total_feminino
print(f'P(Baunilha|Feminino) = {P_baunilha_given_feminino:.2f}')

3. Probabilidade Condicional Usando Numpy

Vamos calcular a probabilidade condicional com o auxílio de arrays do NumPy.

Exemplo 3:

Suponha que temos dados sobre o uso de carros por pessoas de diferentes faixas etárias. Queremos calcular a probabilidade de uma pessoa com mais de 40 anos ser dona de um carro.


import numpy as np

# Dados: [Dono de carro, Não dono de carro]
menos_40 = np.array([50, 30])
mais_40 = np.array([80, 20])

# Probabilidade condicional P(Dono de carro | Mais de 40 anos)
P_carro_given_mais_40 = mais_40[0] / np.sum(mais_40)
print(f'P(Carro|Mais de 40 anos) = {P_carro_given_mais_40:.2f}')

4. Probabilidade Condicional em Conjuntos de Dados com Pandas

Podemos calcular a probabilidade condicional em grandes conjuntos de dados usando o Pandas.

Exemplo 4:

Vamos calcular a probabilidade condicional de um aluno passar, dado que ele estudou mais de 10 horas.


import pandas as pd

# Criar o DataFrame
dados = pd.DataFrame({
    'Estudou_mais_10hrs': [True, False, True, True, False],
    'Passou': [True, False, True, False, False]
})

# Probabilidade condicional P(Passou | Estudou mais de 10 horas)
passou_e_estudou = dados[(dados['Estudou_mais_10hrs'] == True) & (dados['Passou'] == True)].shape[0]
total_estudou = dados[dados['Estudou_mais_10hrs'] == True].shape[0]

P_passou_given_estudou = passou_e_estudou / total_estudou
print(f'P(Passou|Estudou mais de 10 horas) = {P_passou_given_estudou:.2f}')

5. Aplicação com Regra de Bayes

A Regra de Bayes é uma forma de calcular a probabilidade condicional com base em probabilidades inversas.

Exemplo 5:

Suponha que 1% das pessoas em uma cidade têm uma doença. Um teste para essa doença tem uma taxa de acerto de 99% para doentes e 95% para não doentes. Qual a probabilidade de uma pessoa estar doente, dado que o teste foi positivo?

P(Doente|Positivo) = P(Positivo|Doente) * P(Doente) / P(Positivo)


# Dados do problema
P_doente = 0.01
P_nao_doente = 1 - P_doente
P_positivo_doente = 0.99
P_positivo_nao_doente = 0.05

# Probabilidade total de um teste ser positivo
P_positivo = (P_positivo_doente * P_doente) + (P_positivo_nao_doente * P_nao_doente)

# Aplicando a regra de Bayes
P_doente_given_positivo = (P_positivo_doente * P_doente) / P_positivo
print(f'P(Doente|Positivo) = {P_doente_given_positivo:.4f}')

6. Probabilidade Condicional em Função de Variáveis Aleatórias

Podemos também usar variáveis aleatórias contínuas para calcular probabilidades condicionais.

Exemplo 6:

Calcular a probabilidade de uma variável X ser maior que 5 dado que X é maior que 3, onde X segue uma distribuição normal.


from scipy.stats import norm

# Definindo a distribuição normal
mu, sigma = 0, 1  # média e desvio padrão

# P(X > 5 | X > 3)
P_X_greater_5 = 1 - norm.cdf(5, mu, sigma)
P_X_greater_3 = 1 - norm.cdf(3, mu, sigma)

P_cond = P_X_greater_5 / P_X_greater_3
print(f'P(X > 5 | X > 3) = {P_cond:.4f}')

7. Exemplo de Uso em Machine Learning

A probabilidade condicional é amplamente utilizada em modelos probabilísticos, como Naive Bayes.

Exemplo 7:

Aqui, aplicamos Naive Bayes para calcular a probabilidade condicional de um e-mail ser spam com base em suas palavras.


from sklearn.naive_bayes import MultinomialNB

# Exemplo de dados
X = [[2, 1, 0], [1, 0, 2], [0, 2, 1]]  # Frequência de palavras em e-mails
y = [0, 1, 0]  # 0: Não Spam, 1: Spam

# Treinando o modelo
model = MultinomialNB()
model.fit(X, y)

# Prevendo probabilidades
X_new = [[1, 1, 0]]  # Novo e-mail
proba = model.predict_proba(X_new)
print(f'Probabilidades: {proba}')

8. Usando a Função conditional_prob Personalizada

Exemplo 8:


def conditional_prob(P_A_and_B, P_B):
    return P_A_and_B / P_B

# Exemplo de uso
P_A_and_B = 0.3  # Probabilidade de A e B
P_B = 0.5        # Probabilidade de B

print(f'P(A|B) = {conditional_prob(P_A_and_B, P_B):.2f}')

9. Probabilidade Condicional com Funções de Densidade

Exemplo 9:

Calcular a probabilidade condicional usando uma função de densidade, como a distribuição exponencial.


from scipy.stats import expon

# Definir a função de densidade
lambda_param = 1
P_X_greater_2_given_1 = (1 - expon.cdf(2, scale=1/lambda_param)) / (1 - expon.cdf(1, scale=1/lambda_param))

print(f'P(X > 2 | X > 1) = {P_X_greater_2_given_1:.4f}')

Edvaldo Guimrães Filho Avatar

Published by

Categories: ,

Leave a comment