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ênero | Chocolate | Baunilha | Total |
|---|---|---|---|
| Masculino | 50 | 30 | 80 |
| Feminino | 40 | 60 | 100 |
| Total | 90 | 90 | 180 |
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}')

Leave a comment