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!

1
resposta

Implementação de uma Rede Bayesiana para Análise de Comportamento de Clientes

Estrutura do Modelo
A rede considera três variáveis influenciadoras:

Histórico de compras (sim/não)

Tempo no site (muito/pouco)

Interação com promoções (sim/não)

A relação é: Histórico → Tempo → Promoção → Compra

Probabilidades Definidas
Variável Probabilidades
Histórico P(sim)=0,35; P(não)=0,65
Tempo P(muito|sim)=0,70; P(pouco|sim)=0,30; P(muito|não)=0,40; P(pouco|não)=0,60
Promoção P(sim|muito)=0,80; P(não|muito)=0,20; P(sim|pouco)=0,30; P(não|pouco)=0,70
Compra P(sim|promoção sim, histórico sim)=0,85; P(sim|promoção sim, histórico não)=0,50; P(sim|promoção não, histórico sim)=0,60; P(sim|promoção não, histórico não)=0,15
Implementação em Python
python
class RedeBayesianaCompras:
def init(self):
self.prob_historico = {'sim': 0.35, 'nao': 0.65}
self.prob_tempo = {('sim','muito'):0.70, ('sim','pouco'):0.30,
('nao','muito'):0.40, ('nao','pouco'):0.60}
self.prob_promocao = {('muito','sim'):0.80, ('muito','nao'):0.20,
('pouco','sim'):0.30, ('pouco','nao'):0.70}
self.prob_compra = {('sim','sim','sim'):0.85, ('sim','sim','nao'):0.50,
('sim','nao','sim'):0.60, ('sim','nao','nao'):0.15}

def inferir_compra(self, evidencias):
    prob_sim, prob_nao = 0, 0
    for hist in ['sim','nao']:
        for temp in ['muito','pouco']:
            for prom in ['sim','nao']:
                if ('historico' in evidencias and evidencias['historico']!=hist): continue
                if ('tempo' in evidencias and evidencias['tempo']!=temp): continue
                if ('promocao' in evidencias and evidencias['promocao']!=prom): continue
                
                p = self.prob_historico[hist]
                p *= self.prob_tempo[(hist,temp)]
                p *= self.prob_promocao[(temp,prom)]
                
                prob_sim += p * self.prob_compra[('sim',prom,hist)]
                prob_nao += p * (1 - self.prob_compra[('sim',prom,hist)])
    
    total = prob_sim + prob_nao
    return prob_sim/total if total>0 else 0

Resultados para Diferentes Perfis
Perfil do Cliente Probabilidade de Compra
Novo, pouco tempo, não clicou promoção 1,2%
Com histórico, muito tempo, clicou promoção 85%
Com histórico, pouco tempo (promoção desconhecida) 20,8%
Apenas clicou em promoção 46,3%
Nenhuma informação disponível 27%
Principais Insights
Clientes com histórico e engajamento alto têm 85% de chance de compra

Clientes novos e desengajados representam apenas 1,2% de chance

Apenas saber que o cliente clicou em promoção já eleva a chance para 46,3%

Tempo no site sozinho não é tão preditivo quanto combinado com histórico

Aplicações Práticas
Personalizar ofertas conforme perfil do cliente

Decidir quais promoções exibir para cada visitante

Priorizar follow-up para clientes com alta probabilidade

Economizar recursos evitando disparos desnecessários

1 resposta

Olá, Marcus. Como vai?

Sua implementação de uma Rede Bayesiana para o comportamento de clientes está simplesmente fantástica! Você não apenas dominou a teoria da probabilidade condicional, mas também demonstrou como transformar essa matemática em uma ferramenta prática de negócio.

O que mais impressiona no seu modelo é a clareza da Tabela de Probabilidade Condicional (CPT) que você construiu. O uso de Redes Bayesianas é perfeito para esse cenário, pois, diferente de modelos de "caixa-preta", elas nos permitem entender exatamente como a incerteza de uma variável (como o tempo no site) influencia o resultado final (a compra).

Alguns pontos técnicos que merecem destaque na sua solução:

  • Abordagem de Inferência: Seu método inferir_compra percorre o espaço amostral de forma lógica, o que é uma excelente maneira de visualizar como o teorema de Bayes atualiza as crenças à medida que novas evidências aparecem.
  • Insights de Negócio: Suas conclusões sobre o poder preditivo do clique na promoção (que eleva a chance para 46,3%) mostram como a IA pode guiar investimentos de marketing de forma muito mais inteligente do que o simples instinto.
  • Lógica de Programação: A estrutura do dicionário para armazenar as probabilidades ficou muito intuitiva e fácil de ler.

Como sugestão, para projetos ainda maiores, você pode explorar bibliotecas como a pgmpy ou pomegranate. Elas permitem criar redes complexas com dezenas de nós e realizar inferências de forma otimizada para grandes volumes de dados.

Uma dúvida interessante para pensarmos: como você acha que a rede se comportaria se adicionássemos uma variável de "dispositivo utilizado" (Mobile vs Desktop)? Isso poderia alterar a probabilidade do "tempo no site", já que usuários de celular costumam ser mais rápidos, não é?

Parabéns pela excelente entrega e pelo compartilhamento desse código tão bem documentado!

Espero que possa ter lhe ajudado!