TNI+VO · Exercice de Programmation

EP01_03 — 📈 Mean Average Precision (mAP) — Courbe Précision‑Sensibilité

1.19.3 EP01_03 📈 Mean Average Precision (mAP) — Courbe Précision‑Sensibilité

Dans cette activité, vous évaluerez un classificateur binaire (ex. : détection de déforestation dans des images satellites, voir dgi.inpe.br) à travers la courbe Précision‑Sensibilité et la métrique mAP (Mean Average Precision). Le mAP est standard dans des compétitions comme COCO (Common Objects in Context) et PASCAL VOC (Visual Object Classes) et des modèles YOLO (You Only Look Once).

1.19.3.1 🧠 Pourquoi le mAP est‑il la métrique‑standard ?

Dans l’EP01_02, vous avez vu que le choix du seuil modifie significativement la Précision et la Sensibilité. Le mAP (Mean Average Precision) résout cela : il évalue le modèle à plusieurs seuils (chaque seuil doit générer une matrice de confusion différente) et résume la performance par l’aire sous la courbe Précision‑Sensibilité (P‑S).

Alors que le F1‑Score examine un unique point d’équilibre, le mAP considère la courbe entière. Plus il est proche de 1,0, meilleur est le détecteur à tous les seuils et classes (ex. : pièces de 25, 50 et 1 réal).

Métrique Ce qu’elle résume Limitation
F1‑Score Équilibre P × S à un seuil unique Dépend du seuil choisi
AP Aire sous la courbe P‑S d’une clase Valide uniquement pour une classe
mAP Moyenne des AP sur toutes les classes Plus complexe à implémenter

Références : Roboflow — mAP · Vidéo explicative

1.19.3.2 🔢 Comment le mAP est‑il calculé — pas à pas

  1. Seuils fixes (utilisez toujours cette liste) :

    limiares = [0.00, 0.09, 0.21, 0.31, 0.39, 0.52, 0.60, 0.71, 0.81, 0.89, 1.00]
  2. Pour chaque seuil (t), classez les échantillons : predito = 1 se confiança ≥ t, senão 0.
    Calculez VP, FP, FN, VN et obtenez Précision((t)) et Sensibilité((t)).

  3. Construisez la courbe P‑S : paires (Sensibilité((t)), Précision((t))), triées par Sensibilité croissante.

  4. Monotonisez la Précision :
    \[P_{\text{mono}}[i] = \max_{j \ge i} P[j]\]

  5. Calculez l’AP (aire sous la courbe monotone) en utilisant la règle du trapèze (approximation plus précise que la simple somme de Riemann) :
    \[AP = \sum_{i=1}^{m-1} \frac{P_{\text{mono}}[i-1] + P_{\text{mono}}[i]}{2} \cdot (S[i] - S[i-1])\]

  6. mAP = moyenne des AP de toutes les classes. Dans cet EP, il n’y a qu’1 classe, donc mAP = AP.

Note

📐 Différence résumée :
La somme de Riemann approxime l’aire par des rectangles, pouvant sous‑estimer ou surestimer. La règle du trapèze utilise des trapèzes, réduisant l’erreur en considérant la moyenne entre les valeurs aux extrémités de l’intervalle, étant généralement plus précise pour des fonctions lisses par morceaux, comme la courbe Précision‑Sensibilité.

1.19.3.3 📋 Tâche

Lisez un entier n (quantité d’échantillons). Ensuite, lisez n lignes, chacune avec : verdade (0 ou 1) et confiança (float 0.0–1.0).

Calculez et imprimez, pour le seuil 0.85 (index 9 de la liste) :

  • Matrice de Confusion (VP, FN, FP, VN)
  • Acurácia, Précision, Sensibilité et F1‑Score

Ensuite, pour tous les seuils, imprimez :

  • Précisions brutes, Précisions monotones et Sensibilités, séparées par ,
  • mAP final

1.19.3.4 📌 Important

  • Seuil fixe pour les métriques individuelles : 0.85
  • Division sécurisée : si le dénominateur est nul, utilisez 0
  • Formatage : deux décimales
  • Monotonisez de la fin vers le début
  • La Figure 1.13 présente une simulation de cette question

1.19.3.5 📌 Exemple d’Exécution

Entrée Sortie Attendue
7
0 0.94
1 0.80
1 0.69
0 0.67
1 0.30
1 0.15
1 0.15
# MÉTRIQUES POUR LE SEUIL 0.85 #
Matrice de Confusion :
VP = 0, FN = 5
FP = 1, VN = 1

Métriques d’Évaluation :
Acurácia : 0.14
Précision : 0.00
Sensibilité : 0.00
F1-Score : 0.00

# MÉTRIQUES POUR TOUS LES SEUILS #
Précisions : 0.00, 0.00, 0.00, 0.50, 0.50, 0.50, 0.50, 0.50, 0.60, 0.71, 0.71
Précisions mon. : 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71
Sensibilités : 0.00, 0.00, 0.00, 0.20, 0.40, 0.40, 0.40, 0.40, 0.60, 1.00, 1.00
mAP : 0.71

1.19.3.6 🐍 Astuce pour calculer l’AP (avec la règle du trapèze)

def calcular_AP(verdades, confiancas, limiares):
    m = len(limiares)
    precisoes = [0.0] * m
    sensibilidades = [0.0] * m
    for i in range(m):
        p, s = calcular_metricas(verdades, confiancas, limiares[i])
        precisoes[m-1-i] = p
        sensibilidades[m-1-i] = s
    prec_mono = precisoes.copy()
    for i in range(m-2, -1, -1):
        if prec_mono[i] < prec_mono[i+1]:
            prec_mono[i] = prec_mono[i+1]
    AP = 0.0
    for i in range(1, m):
        # Règle du trapèze : moyenne des hauteurs multipliée par la base
        area_trapezio = (prec_mono[i-1] + prec_mono[i]) / 2.0
        AP += area_trapezio * (sensibilidades[i] - sensibilidades[i-1])
    return precisoes, prec_mono, sensibilidades, AP
📊 Simulateur EP01_03 : Courbe Précision-Sensibilité & mAP mAP & Courbe P-S

Modifiez les échantillons (classe réelle et confiance) ou choisissez un scénario prédéfini pour visualiser la matrice de confusion, la courbe P-S et la valeur mAP en temps réel.

ÉCHANTILLONS (CLASSE RÉELLE | CONFIANCE)
# Vrai Confiance
SEUIL POUR MÉTRIQUES INDIVIDUELLES
0.85
Seuils : 0.00 · 0.09 · 0.21 · 0.31 · 0.39 · 0.52 · 0.60 · 0.71 · 0.81 · 0.89 · 1.00
MÉTRIQUES AU SEUIL 0.85
Préd +
Préd −
Réel +
VP
0
FN
5
Réel −
FP
1
VN
1
Exactitude
0.14
Précision
0.00
Sensib.
0.00
F1
0.00
COURBE PRÉCISION-SENSIBILITÉ
mAP = 0.71
Courbe P-S Monotone Aire (AP)
Seuil Préc. P.mono Sensib.
Figure 1.13: Simulateur EP01_03 : Mean Average Precision (mAP) et courbe P-S
%%writefile EP01_03.py
# votre solution
Overwriting EP01_03.py
TestSuite("EP01_03.py").run()
✔️ EP01_03.cases existe déjà dans casos/
📋 5 cas chargé(s) depuis casos/EP01_03.cases

🔍 Test de Python : EP01_03.py
⚠️ EP01_03.py : fichier vide (moins de 3 lignes). Tests ignorés.