Seuil par minimisation du coût métier attendu
Quand un faux négatif coûte 50 fois plus qu'un faux positif, le bon seuil ne se lit sur aucune courbe standard : on minimise directement le coût total attendu sur la validation.
Cas d'usage
Décisions asymétriques : fraude non détectée vs vérification inutile, panne manquée vs maintenance préventive.
Prérequis
numpy, scikit-learn
Python
import numpy as np
from sklearn.metrics import confusion_matrix
COUT_FP = 10.0 # vérification manuelle inutile
COUT_FN = 500.0 # fraude passée inaperçue
proba_val = model.predict_proba(X_val)[:, 1]
seuils = np.linspace(0.01, 0.99, 99)
couts = []
for s in seuils:
pred = (proba_val >= s).astype(int)
tn, fp, fn, tp = confusion_matrix(y_val, pred).ravel()
couts.append(fp * COUT_FP + fn * COUT_FN)
best = int(np.argmin(couts))
print(f"Seuil optimal coût : {seuils[best]:.2f}")
print(f"Coût attendu : {couts[best]:,.0f}")
print(f"Coût au seuil 0.50 : {couts[49]:,.0f}")
# L'écart entre les deux lignes = argent laissé sur la table par défaut.Résultat
Seuil optimal coût : 0.08 Coût attendu : 28,750 Coût au seuil 0.50 : 61,230 >>> float((proba_val >= 0.08).mean()) # part du flux vérifiée à ce seuil 0.214
Coût métierSeuilDécisionAsymétrie