Skip to content

Fondations : détecteur, PFA, PD, ROC

Cette page pose les outils pour juger un détecteur, sans encore dire comment en construire un. La section 1 définit le problème de décision binaire et le modèle de détecteur. La section 2 en tire les métriques de performance, probabilités de fausse alarme et de détection, et la courbe ROC qui les résume. La section 3 étend ces métriques au cas de plusieurs hypothèses avec la matrice de confusion.

1. Problématique

Un récepteur mesure une valeur bruitée et doit décider si un signal est présent. En l'absence de signal, la mesure ne contient que du bruit ; en sa présence, elle s'en écarte. Le chapitre 2 estimait une valeur ; il faut maintenant choisir entre deux hypothèses :

H0:xp(x;H0),H1:xp(x;H1),

  • H0 est l'hypothèse nulle, l'état par défaut (bruit seul),
  • H1 est l'hypothèse alternative, l'état à détecter (signal présent),
  • p(x;H0) et p(x;H1) sont les lois des données sous chaque hypothèse, supposées connues.

Modèle de détecteur

Un détecteur est caractérisé par une statistique de test T(x) et un seuil γ. La règle de décision s'écrit :

  • décider H1 si T(x)>γ,

  • T(x) est une fonction scalaire des données, choisie par nous,
  • γ est le seuil de décision, à régler.

Dans le chapitre 2, l'estimateur était une fonction g(x) à valeurs continues, le détecteur est une fonction des données suivie d'une comparaison à un seuil. Comme θ^, la statistique T(x) est une variable aléatoire : elle possède une loi sous H0 et une autre sous H1, et c'est l'écart entre ces deux lois qui rend la décision possible.

DANGER

Attention à ne pas confondre l'hypothèse vraie, inconnue, et l'hypothèse décidée, produite par le détecteur. Les métriques de cette page mesurent précisément leurs désaccords.

Exemple : détection d'un décalage de moyenne

Une mesure unique x suit N(0,σ2) sous H0 et N(μ1,σ2) sous H1, avec μ1=2 et σ=1. La statistique la plus simple est la mesure elle-même, T(x)=x, comparée à un seuil γ.

Deux densités Gaussiennes de même variance, centrées en 0 et en 2, dont la zone de
            recouvrement entre les deux cloches est grisée.

Figure 3.1, Les densités des deux hypothèses, N(0,1) et N(2,1) ; la zone grisée est commune aux deux (script figures/ch3/01-hypotheses-gaussiennes.py).

Les deux densités se recouvrent : une même valeur observée, x=1 par exemple, est plausible sous les deux hypothèses. Aucune règle de décision ne peut donc être parfaite, et tout choix de seuil produira des erreurs. Deux erreurs de natures différentes sont possibles, décider H1 alors que H0 est vraie, ou l'inverse, et leurs conséquences ne sont pas comparables : déclencher une alarme pour rien ne coûte pas le même prix que manquer une cible. Il faut des métriques qui les distinguent.

2. Métriques de performance

Définition

Définition, Probabilités de fausse alarme et de détection

Pour un détecteur de statistique T(x) et de seuil γ :

PFA=P(T(x)>γ;H0),PD=P(T(x)>γ;H1),

  • PFA est la probabilité de fausse alarme, décider H1 alors que H0 est vraie (erreur de première espèce, notée α),
  • PD est la probabilité de détection, décider H1 quand H1 est vraie (la puissance du test),
  • PM=1PD est la probabilité de manque (erreur de seconde espèce, notée β).

Un bon détecteur a une PFA faible et une PD élevée. Ces métriques portent d'autres noms en apprentissage automatique, et le vocabulaire croisé est à connaître :

DétectionMachine learningDéfinition
PDrappel (recall), sensibilité, taux de vrais positifs (TPR)P(décider H1;H1)
PFAtaux de faux positifs (FPR)P(décider H1;H0)
1PFAspécificité, taux de vrais négatifs (TNR)P(décider H0;H0)
PM=1PDtaux de faux négatifs (FNR)P(décider H0;H1)

La précision (precision), fréquente en apprentissage automatique, est absente de ce tableau : elle dépend des proportions relatives des deux hypothèses, et sa définition attend la matrice de confusion du §3.

Confusion classique

« PD=1PFA. » Non : les deux probabilités sont conditionnées sur des hypothèses différentes, H1 pour l'une, H0 pour l'autre. Elles ne se somment à rien de particulier. C'est PM=1PD qui est vraie, les deux étant conditionnées sur H1.

Illustration

Les deux densités Gaussiennes coupées par un seuil vertical noir en 1 : l'aire sous la
              densité H0 à droite du seuil est coloriée en rouge (PFA), l'aire sous la densité H1 à
              gauche du seuil en orange (PM).

Figure 3.2a, Le seuil γ=1 et les deux zones d'erreur : PFA, aire de p(x;H0) au-delà de γ, et PM, aire de p(x;H1) en deçà (script figures/ch3/01-seuil-metriques.py).

Deux courbes décroissantes en fonction du seuil : PD au-dessus, PFA en dessous, avec
              les valeurs 0,84 et 0,16 marquées au seuil 1.

Figure 3.2b, PD et PFA en fonction du seuil γ : les deux décroissent ensemble quand γ augmente.

Les deux métriques se lisent comme des aires au-delà du seuil, chacune sous sa densité. Déplacer γ vers la droite réduit la fausse alarme mais dégrade la détection ; vers la gauche, l'inverse. Une seule manette règle deux métriques antagonistes : il n'existe pas de seuil qui optimise les deux à la fois, seulement des compromis.

Exemple : décalage de moyenne Gaussien

Pour T(x)=x, les deux métriques s'expriment avec la fonction de queue Gaussienne Q(u)=1Φ(u) :

PFA=Q(γσ),PD=Q(γμ1σ).

Au seuil γ=1, à mi-chemin des deux moyennes : PFA=Q(1)0,159 et PD=Q(1)0,841. Le code suivant calcule ces valeurs, puis les vérifie par comptage, l'estimation d'une probabilité par une fréquence relevant de la simulation de Monte-Carlo.

python
import scipy.stats as sta

mu1, sigma, gamma = 2.0, 1.0, 1.0

pfa = sta.norm.sf(gamma, 0, sigma)      # >>> 0.1587
pd = sta.norm.sf(gamma, mu1, sigma)     # >>> 0.8413
python
import numpy as np
rng = np.random.default_rng(2026)

mu1, sigma, gamma, B = 2.0, 1.0, 1.0, 100_000

x_h0 = rng.normal(0.0, sigma, B)        # B draws under H0
x_h1 = rng.normal(mu1, sigma, B)        # B draws under H1

pfa = np.mean(x_h0 > gamma)             # >>> 0.1577  (predicted: 0.1587)
pd = np.mean(x_h1 > gamma)              # >>> 0.8427  (predicted: 0.8413)

Courbe ROC

Un couple (PFA,PD) ne décrit le détecteur que pour un seuil. Faire varier γ décrit tous les compromis accessibles d'un coup.

Définition, Courbe ROC

La courbe ROC (receiver operating characteristic) d'un détecteur est la courbe de PD en fonction de PFA obtenue en faisant varier le seuil γ sur tout son domaine. L'AUC (area under the curve) est l'aire sous cette courbe.

La courbe est croissante et relie (0,0), seuil infini, tout est décidé H0, à (1,1), seuil , tout est décidé H1. La diagonale PD=PFA correspond à une décision au hasard, indépendante des données ; le coin supérieur gauche (0,1) au détecteur parfait. L'AUC résume la courbe en un nombre : 0,5 pour le hasard, 1 pour la perfection.

Pour le décalage de moyenne, la courbe admet une forme fermée. En éliminant γ entre les deux expressions de l'exemple :

PD=Q(Q1(PFA)d),

d=μ1/σ est l'écart normalisé entre les deux hypothèses. La courbe ne dépend que de d : la difficulté du problème tient dans un seul nombre, et l'AUC vaut Φ(d/2).

Trois courbes ROC de bombées croissantes pour d valant 0,5, 1 et 2, avec la diagonale
            du hasard en pointillés gris et le point de fonctionnement du seuil 1 marqué sur la
            courbe d = 2.

Figure 3.3, Courbes ROC du décalage de moyenne pour d{0,5, 1, 2} ; le point marque le seuil γ=1 de l'exemple, (0,16, 0,84) (script figures/ch3/01-roc.py).

Plus d grandit, plus la courbe se bombe vers le coin parfait : les deux densités s'éloignent et la décision devient facile. À d fixé, se déplacer le long de la courbe ne change pas le détecteur, seulement son seuil ; changer de statistique T ou améliorer le rapport signal à bruit change de courbe. La ROC juge donc le détecteur indépendamment du choix du seuil, comme la MSE jugeait l'estimateur indépendamment d'un tirage particulier.

3. Extension au cas multi-hypothèses

Beaucoup de problèmes comptent plus de deux hypothèses : un symbole parmi quatre en démodulation, un chiffre manuscrit parmi dix. Les hypothèses deviennent H0,,HK1, et le détecteur décide l'une d'elles. Un couple (PFA,PD) ne suffit plus : chaque paire d'hypothèses a ses propres confusions possibles.

Définition

Définition, Matrice de confusion

La matrice de confusion d'un détecteur à K hypothèses est la matrice K×K de terme

Ck,k=P(décider Hk;Hk),

soit, en disposant l'hypothèse vraie en ligne et l'hypothèse décidée en colonne :

C=decide H0decide HK1vrai H0C0,0C0,K1vrai HK1CK1,0CK1,K1

  • la diagonale porte les probabilités de décision correcte,
  • chaque terme hors diagonale porte une confusion particulière, décider Hk alors que Hk est vraie.

Chaque ligne somme à 1. En pratique, Ck,k s'estime par la fréquence des décisions sur un jeu de données étiquetées.

Le cas binaire s'y retrouve : pour K=2, la matrice contient quatre termes, PD=C1,1, PFA=C0,1, et leurs complémentaires, le vocabulaire vrais/faux positifs/négatifs du tableau du §2 nomme ces quatre cases.

Métriques dérivées

Trois résumés de la matrice sont d'usage constant :

  • l'exactitude (accuracy) est la probabilité de décision correcte toutes hypothèses confondues, la moyenne des termes diagonaux pondérée par les proportions de chaque hypothèse ;
  • le rappel de la classe k est Ck,k, la proportion des cas de Hk correctement décidés, la généralisation directe de PD ;
  • la précision de la classe k est la proportion de décisions « Hk » qui sont correctes, calculée sur la colonne k.

DANGER

PFA, PD et le rappel sont conditionnés sur l'hypothèse vraie : ils ne dépendent pas des proportions des hypothèses. L'exactitude et la précision en dépendent. Si H1 ne survient que dans 1 % des cas, le détecteur qui répond toujours H0 atteint 99 % d'exactitude avec PD=0 : sur des classes déséquilibrées, l'exactitude seule ne juge rien.

Exemple : trois moyennes Gaussiennes

Trois hypothèses de moyennes 2, 0 et 2, avec σ=1, et le détecteur qui décide la moyenne la plus proche de la mesure. Le code suivant estime la matrice de confusion par comptage sur B=20000 tirages par hypothèse.

python
import numpy as np
rng = np.random.default_rng(2026)

means = np.array([-2.0, 0.0, 2.0])
sigma, B = 1.0, 20_000
K = len(means)

confusion = np.zeros((K, K))
for k in range(K):
    x = rng.normal(means[k], sigma, B)                        # B draws under H_k
    decided = np.abs(x[:, None] - means[None, :]).argmin(axis=1)
    for kp in range(K):
        confusion[k, kp] = np.mean(decided == kp)

accuracy = np.trace(confusion) / K     # >>> 0.7891  (predicted: 0.7885)
Matrice de confusion 3 par 3 en nuances de bleu : diagonale autour de 0,84 et 0,69,
            confusions autour de 0,16 entre classes voisines, presque nulles entre classes
            extrêmes.

Figure 3.4, Matrice de confusion du détecteur à moyenne la plus proche, trois hypothèses Gaussiennes de moyennes 2, 0, 2 (σ=1), estimée sur 20000 tirages par hypothèse (script figures/ch3/01-matrice-confusion.py).

La diagonale porte les rappels : 0,84 pour les classes extrêmes, 0,69 seulement pour la classe centrale, prise en étau entre deux voisines. Les confusions se concentrent entre classes adjacentes, à 0,16, et sont quasi nulles entre les classes extrêmes, distantes de 4σ : la matrice ne dit pas seulement combien le détecteur se trompe, elle dit avec qui chaque hypothèse se confond. L'exactitude, ici la moyenne de la diagonale puisque les trois hypothèses sont équiprobables, vaut 0,79.