← Tous les exercices
Choisir le seuil selon le prix des erreurs
Partie 5 · ★★★
Supposons qu'une pneumonie manquée coûte c_fn fois plus qu'une fausse alarme : coût = c_fn × FN + FP. Le rapport 10 pour 1 du cours est une hypothèse, une décision médicale. Écris cout, puis choisir_seuil qui parcourt les seuils dans l'ordre donné et garde le seuil de coût minimal ; en cas d'égalité, on garde le premier rencontré (comparaison stricte).
Applique-la aux seuils [0.7, 0.5, 0.3] des 8 radios avec des rapports de 10, 1 et 3 pour 1. (Le rapport 3 pour 1 est un exemple ajouté, suggéré par le notebook.)
probas = [0.90, 0.80, 0.65, 0.55, 0.35, 0.60, 0.40, 0.10] vraies = [1, 1, 1, 1, 1, 0, 0, 0] def cout(dit, vraies, c_fn): fn = sum(1 for d, v in zip(dit, vraies) if d == 0 and v == 1) fp = sum(1 for d, v in zip(dit, vraies) if d == 1 and v == 0) return c_fn * fn + ___ def choisir_seuil(probas, vraies, seuils, c_fn): meilleur, meilleur_cout = None, float("inf") for s in seuils: c = cout([1 if p >= s else 0 for p in probas], vraies, c_fn) if c ___ meilleur_cout: meilleur, meilleur_cout = s, c return meilleur, meilleur_cout couts_10 = [cout([1 if p >= s else 0 for p in probas], vraies, 10) for s in (0.7, 0.5, 0.3)] choix_10 = choisir_seuil(probas, vraies, [0.7, 0.5, 0.3], 10) choix_1 = choisir_seuil(probas, vraies, [0.7, 0.5, 0.3], 1) choix_3 = choisir_seuil(probas, vraies, [0.7, 0.5, 0.3], 3)
Ctrl/⌘+Entrée