Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Projeto] Faça como eu fiz: construindo uma Rede Bayesiana | Fundamentos de IA: explorando a estrutura e abordagens de sistemas inteligentes

from pgmpy.models import DiscreteBayesianNetwork
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination

modelo = DiscreteBayesianNetwork([
    ('HC', 'RC'), ('TS', 'RC'), ('IP', 'RC')
])

cpd_hc = TabularCPD('HC', 2, [[0.60], [0.40]], 
    state_names={'HC': ['Nao', 'Sim']})
cpd_ts = TabularCPD('TS', 2, [[0.45], [0.55]], 
    state_names={'TS': ['Curto', 'Longo']})
cpd_ip = TabularCPD('IP', 2, [[0.65], [0.35]], 
    state_names={'IP': ['Nao', 'Sim']})
cpd_rc = TabularCPD('RC', 2,
    [[0.90,0.70,0.40,0.30,0.55,0.35,0.15,0.10],
     [0.10,0.30,0.60,0.70,0.45,0.65,0.85,0.90]],
    evidence=['HC', 'TS', 'IP'], evidence_card=[2,2,2],
    state_names={'RC': ['Nao', 'Sim'], 'HC': ['Nao', 'Sim'],
                 'TS': ['Curto', 'Longo'], 'IP': ['Nao', 'Sim']})

modelo.add_cpds(cpd_hc, cpd_ts, cpd_ip, cpd_rc)
modelo.check_model()

inf = VariableElimination(modelo)

print("REDE BAYESIANA - ANALISE DE COMPORTAMENTO DE CLIENTES\n")

testes = [
    ("Historico + Tempo Longo + Promocao", 
     {'HC': 'Sim', 'TS': 'Longo', 'IP': 'Sim'}),
    ("Novo + Tempo Curto + Sem Promocao", 
     {'HC': 'Nao', 'TS': 'Curto', 'IP': 'Nao'}),
    ("Novo + Tempo Longo + Promocao", 
     {'HC': 'Nao', 'TS': 'Longo', 'IP': 'Sim'}),
]

for nome, ev in testes:
    res = inf.query(variables=['RC'], evidence=ev)
    prob = res.values[1] * 100
    print(f"{nome}: {prob:.1f}%")

print("\nTABELA DE TODOS OS CENARIOS\n")
print("Historico | Tempo  | Promocao | P(Compra)")
print("-" * 44)

for hc in ['Nao', 'Sim']:
    for ts in ['Curto', 'Longo']:
        for ip in ['Nao', 'Sim']:
            res = inf.query(variables=['RC'], 
                evidence={'HC': hc, 'TS': ts, 'IP': ip})
            prob = res.values[1] * 100
            print(f"{hc:9} | {ts:6} | {ip:8} | {prob:6.1f}%")

print("\nINFERENCIA REVERSA")
res_rev = inf.query(variables=['IP'], evidence={'RC': 'Sim'})
prob_ip_dado_rc = res_rev.values[1] * 100
print(f"P(Promocao | Compra) = {prob_ip_dado_rc:.1f}%\n")

print("RECOMENDACOES:")
print("1. Clientes com historico + tempo longo + promo: MAIOR prioridade (90%)")
print("2. Clientes novos + tempo curto + sem promo: MENOR prioridade (10%)")
print("3. Investir em estrategias para aumentar tempo no site")
print("4. Segmentar promocoes para clientes novos")
1 resposta
solução!

Olá, Estudante! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a Rede Bayesiana para modelagem probabilística com Python, utilizou muito bem a TabularCPD para definir distribuições condicionais e ainda compreendeu a importância da inferência reversa para obter insights estratégicos.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Uma dica interessante para o futuro é visualizar a estrutura da rede para facilitar a interpretação. Assim:

import networkx as nx
import matplotlib.pyplot as plt

nx.draw(modelo, with_labels=True, node_size=2000, node_color="lightblue")
plt.show()

Isso faz a plotagem do grafo da rede, mostrando as dependências entre variáveis.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Testar consistência: sempre validar o modelo com check_model().
  • Definir CPDs realistas: basear probabilidades em dados históricos ou especialistas.
  • Explorar inferências: usar consultas variadas para entender diferentes cenários de decisão.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: Você acha mais interessante aplicar redes Bayesianas para prever comportamento de clientes em marketing digital ou para diagnósticos médicos onde a incerteza é crítica?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!