Iniciamos creando una tabla de probabilidades condicionales (CPT, Conditional Probability Table) de una red bayesiana simplificada que será el modelo probabilístico que representará las relaciones de causa-efecto entre variables. En este caso, modelamos factores que influyen en la decisión de compra.
Estructura de nuestro mode: loHistorialCompras + TiempoEnElSitio+ ClicóEnPromocion--> Compra
Esto significa que la probabilidad de compra DEPENDE de estos tres factores.
A continuación, se definen las probabilidades iniciales de cada variable.
probabilidades = {
"HistorialCompras": {0: 0.7, 1: 0.3}, # 0: No tiene historial 70%, 1: Tiene historial 30%
"TiempoEnElSitio": {0: 0.6, 1: 0.4}, # 0: Poco tiempo 60%, 1: Mucho tiempo 40%
"ClicóEnPromocion": {0: 0.8, 1: 0.2}, # 0: No clicó 80%, 1: Clicó 20%
Se realiza una tabla de probabilidades de compra con tuplas de la forma (historial, tiempo, promocion)
"Compra": {
(0, 0, 0): 0.1, # No tiene historial, poco tiempo, no clicó
(0, 0, 1): 0.3, # No tiene historial, poco tiempo, clicó
(0, 1, 0): 0.2, # No tiene historial, mucho tiempo, no clicó
(0, 1, 1): 0.6, # No tiene historial, mucho tiempo, clicó
(1, 0, 0): 0.4, # Tiene historial, poco tiempo, no clicó
(1, 0, 1): 0.7, # Tiene historial, poco tiempo, clicó
(1, 1, 0): 0.8, # Tiene historial, mucho tiempo, no clicó
(1, 1, 1): 0.9 # Tiene historial, mucho tiempo, clicó
creamos la función de inferencia que recibirá los datos observados del cliente, es decir la función que calculara la probabilidad de compra.
y se ingresan los valores extraídos para el cálculo.
def calcular_probabilidad_compra(evidencias):
historial = evidencias["HistorialCompras"]
tiempo = evidencias["TiempoEnElSitio"]
promocion = evidencias["ClicóEnPromocion"]
prob_compra = probabilidades["Compra"][(historial, tiempo, promocion)]
prob_no_compra = 1 - prob_compra
return {"Comprar": prob_compra, "No Comprar": prob_no_compra}
Ejemplo: se generan caso hipotético con valore de prueba
evidencias = {
"HistorialCompras": 1 # Cliente tiene historial de compras
"TiempoEnElSitio": 0 # Cliente pasó poco tiempo en el sitio
"ClicóEnPromocion": 1 # Cliente clicó en promociones
}
ingresamos los valores de prueba a la función creada y reportamos el resultado calculado
resultados = calcular_probabilidad_compra(evidencias)
print("Probabilidades de Compra:")
for resultado, probabilidad in resultados.items():
print(f"{resultado}: {probabilidad:.2f}")