Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Me puse a repasar Bayes bastante porque no entendía el concepto completamente. Ahora sí, esta es mi implementación, basada en la respuesta del profesor:

probabilidades = {
    "HistorialCompras":      {0: 0.63, 1: 0.37},
    "TiempoEnElSitio":       {0: 0.62, 1: 0.38},
    "InteraccionPromocion":  {0: 0.60, 1: 0.40},
    "Compra": {
        (0, 0, 0): 0.10,
        (0, 0, 1): 0.25,
        (0, 1, 0): 0.20,
        (0, 1, 1): 0.80,
        (1, 0, 0): 0.65,
        (1, 0, 1): 0.90,
        (1, 1, 0): 0.65,
        (1, 1, 1): 0.95,
    }
}

def calcular_probabilidad_compra(evidencias):
    historial  = evidencias["HistorialCompras"]
    tiempo     = evidencias["TiempoEnElSitio"]
    promocion  = evidencias["InteraccionPromocion"]

    prob_compra    = probabilidades["Compra"][(historial, tiempo, promocion)]
    prob_no_compra = 1 - prob_compra

    return {"Comprar": prob_compra, "No Comprar": prob_no_compra}

evidencias = {
    "HistorialCompras":     1,
    "TiempoEnElSitio":      0,
    "InteraccionPromocion": 1
}

resultados = calcular_probabilidad_compra(evidencias)
print("Probabilidades de Compra:")
for resultado, probabilidad in resultados.items():
    print(f"{resultado}: {probabilidad:.2f}")
1 respuesta

Hola Jairo, espero que estés bien

¡Qué bueno que te has puesto a repasar Bayes! Veo que has implementado una red bayesiana para calcular la probabilidad de que un cliente realice una compra basándote en ciertas evidencias. Tu código parece estar bien estructurado y sigue el enfoque correcto. Aquí hay algunas sugerencias para asegurarnos de que todo esté funcionando como esperas:

  1. Verificación de Probabilidades: Asegúrate de que las probabilidades que has definido en el diccionario probabilidades sumen 1 para cada conjunto de condiciones. Por ejemplo, para cada combinación de HistorialCompras, TiempoEnElSitio y InteraccionPromocion, la suma de Compra y No Compra debe ser 1.

  2. Validación de Entrada: Podrías considerar agregar una verificación para asegurarte de que las evidencias proporcionadas estén dentro de los valores esperados (0 o 1 en este caso). Esto ayudará a evitar errores si las evidencias no coinciden con las claves del diccionario Compra.

  3. Pruebas Adicionales: Intenta probar tu función con diferentes combinaciones de evidencias para asegurarte de que las probabilidades se calculen correctamente en todos los casos. Esto te dará más confianza en que tu implementación es robusta.

  4. Comentarios y Documentación: Aunque tu código es bastante claro, agregar algunos comentarios sobre lo que hace cada parte del código podría ser útil, especialmente si planeas compartirlo con otros o volver a él en el futuro.

Aquí tienes un ejemplo de cómo podrías probar con diferentes evidencias:

# Prueba con diferentes evidencias
evidencias_prueba = [
    {"HistorialCompras": 0, "TiempoEnElSitio": 0, "InteraccionPromocion": 0},
    {"HistorialCompras": 1, "TiempoEnElSitio": 1, "InteraccionPromocion": 1},
    {"HistorialCompras": 0, "TiempoEnElSitio": 1, "InteraccionPromocion": 0},
]

for evidencias in evidencias_prueba:
    resultados = calcular_probabilidad_compra(evidencias)
    print(f"Evidencias: {evidencias}")
    for resultado, probabilidad in resultados.items():
        print(f"{resultado}: {probabilidad:.2f}")
    print()

Espero que estas sugerencias te sean útiles. ¡Espero haber ayudado y buenos estudios!