Nesta atividade, construímos uma Rede Bayesiana simples para analisar o comportamento de clientes em uma loja online e estimar a probabilidade de uma compra acontecer.
O sistema considera três variáveis principais:
- Histórico de compras;
- Tempo no site;
- Interação com promoções.
A partir dessas evidências, o modelo calcula a probabilidade de o cliente comprar ou não comprar.
Passo 1 – Criar as probabilidades
Primeiro, criamos um dicionário chamado probabilidades, contendo as chances associadas a cada variável.
probabilidades = {
"HistoricoCompras": {0: 0.7, 1: 0.3},
"TempoNoSite": {0: 0.6, 1: 0.4},
"ClicouEmPromocao": {0: 0.8, 1: 0.2},
"Compra": {
(0, 0, 0): 0.1,
(0, 0, 1): 0.3,
(0, 1, 0): 0.2,
(0, 1, 1): 0.6,
(1, 0, 0): 0.4,
(1, 0, 1): 0.7,
(1, 1, 0): 0.8,
(1, 1, 1): 0.9
}
}
Neste modelo:
0representa ausência ou menor intensidade da variável;1representa presença ou maior intensidade da variável.
Por exemplo:
HistoricoCompras = 1significa que o cliente já comprou antes;TempoNoSite = 0significa que passou pouco tempo no site;ClicouEmPromocao = 1significa que clicou em uma promoção.
Passo 2 – Criar a função de cálculo
Depois, criamos uma função que recebe as evidências do cliente e calcula a probabilidade de compra.
def calcular_probabilidade_compra(evidencias):
historico = evidencias["HistoricoCompras"]
tempo = evidencias["TempoNoSite"]
promocao = evidencias["ClicouEmPromocao"]
prob_compra = probabilidades["Compra"][(historico, tempo, promocao)]
prob_nao_compra = 1 - prob_compra
return {
"Comprar": prob_compra,
"Não Comprar": prob_nao_compra
}
Essa função consulta a combinação das variáveis e retorna duas informações:
- probabilidade de comprar;
- probabilidade de não comprar.
Passo 3 – Testar o cenário proposto
O cenário testado foi:
- cliente tem histórico de compras;
- passou pouco tempo no site;
- clicou em promoções.
evidencias = {
"HistoricoCompras": 1,
"TempoNoSite": 0,
"ClicouEmPromocao": 1
}
resultados = calcular_probabilidade_compra(evidencias)
print("Probabilidades de Compra:")
for resultado, probabilidade in resultados.items():
print(f"{resultado}: {probabilidade:.2f}")
Resultado esperado
Probabilidades de Compra:
Comprar: 0.70
Não Comprar: 0.30
Interpretação
O resultado indica que, nesse cenário, o cliente possui 70% de probabilidade de realizar uma compra e 30% de probabilidade de não comprar.
Isso acontece porque ele já possui histórico de compras e clicou em uma promoção, dois fatores que aumentam a chance de conversão, mesmo tendo passado pouco tempo no site.
Transposição para a Educação
A mesma lógica pode ser aplicada em sistemas educacionais inteligentes.
Em vez de analisar clientes e compras, poderíamos analisar estudantes e aprendizagem.
Por exemplo, as variáveis poderiam ser:
- frequência do estudante;
- entrega de atividades;
- participação em aula.
O objetivo seria estimar a probabilidade de:
- aprovação;
- necessidade de intervenção;
- risco acadêmico;
- alta performance.
Um desenho simples da programação educacional poderia ser:
probabilidades_educacao = {
"Frequencia": {0: 0.4, 1: 0.6},
"EntregaAtividades": {0: 0.3, 1: 0.7},
"Participacao": {0: 0.5, 1: 0.5},
"Aprendizagem": {
(0, 0, 0): 0.2,
(0, 0, 1): 0.3,
(0, 1, 0): 0.4,
(0, 1, 1): 0.6,
(1, 0, 0): 0.5,
(1, 0, 1): 0.7,
(1, 1, 0): 0.8,
(1, 1, 1): 0.9
}
}
def calcular_probabilidade_aprendizagem(evidencias):
frequencia = evidencias["Frequencia"]
atividades = evidencias["EntregaAtividades"]
participacao = evidencias["Participacao"]
prob_aprendizagem = probabilidades_educacao["Aprendizagem"][
(frequencia, atividades, participacao)
]
prob_intervencao = 1 - prob_aprendizagem
return {
"Atingir objetivos de aprendizagem": prob_aprendizagem,
"Necessitar intervenção": prob_intervencao
}
evidencias_estudante = {
"Frequencia": 1,
"EntregaAtividades": 1,
"Participacao": 1
}
resultado_estudante = calcular_probabilidade_aprendizagem(evidencias_estudante)
print("Probabilidades Educacionais:")
for resultado, probabilidade in resultado_estudante.items():
print(f"{resultado}: {probabilidade:.2f}")