Os tipos de classificação

31 min
Bloc 2 — Identifier le problème
Objectif
savoir qualifier rigoureusement une tâche de classificação, distinguer les quatre types canoniques — binaire, multiclasse, ordinale, multilabel — à partir de la forme de la variável alvo, connaître les conséquences de chaque type sur le choix de l'algoritmo et des métriques, et lever définitivement l'ambiguïté de dénomination de la regressão logistique.
Durée estimée
40 minutes
Prérequis
chapitres 001 à 010
Quiz associés
011.1-quiz-qualification-tache.md à 011.7-quiz-synthese-comparative.md

1. Qualifier une tâche de classificação : trois questions discriminantes

Le chapitre 010 a établi la première décision de modélisation : la cible est-elle catégorielle ou numérique. Répondre « catégorielle » ne clôt pas le cadrage. Il reste à déterminer de quel type de classificação il s'agit, car ce type détermine la forme de la variável alvo, les algorithmes utilisables, les métriques admissibles et l'interprétation d'une erreur.

DÉFINITION — Tâche de classificação

Définition rigoureuse

Soit un espace d'entrée X et un ensemble fini d'étiquettes C = {c_1, ..., c_K} de cardinal K ≥ 2. Une tâche de classificação consiste à induire, à partir d'un échantillon {(x_i, y_i)}, i = 1..n, une fonction de décision f : X → Y dont l'espace d'arrivée Y est construit sur C selon l'une de deux constructions, qui fondent la partition de ce chapitre :

  • Y = C — chaque observação reçoit exactement une étiquette parmi K. Le problème est dit à étiquette unique (single-label).
  • Y = {0, 1}^K, ensemble des parties de C — chaque observação reçoit un sous-ensemble quelconque d'étiquettes, éventuellement vide. Le problème est dit multilabel.

Traduction en langage courant

Classer, c'est attribuer des étiquettes prises dans une liste fermée. La première question à trancher est de savoir si une observação en reçoit une seule ou plusieurs.

Point de vigilance

La liste des étiquettes est supposée fermée et connue à l'treinamento. Un classifieur ne peut pas prédire une classe qu'il n'a jamais observée ; la gestion des classes inédites relève de la détection d'anomalies (chapitre 003).

1.1 Les trois questions, dans l'ordre

OrdreQuestionRéponseType retenu
1Une observação peut-elle porter plusieurs étiquettes simultanément ?OuiMultilabel
2Combien de classes mutuellement exclusives ?K = 2Binaire
2Combien de classes mutuellement exclusives ?K > 2Passer à la question 3
3Les classes sont-elles munies d'un ordre total naturel ?NonMulticlasse (nominale)
3Les classes sont-elles munies d'un ordre total naturel ?OuiOrdinale

L'ordre n'est pas arbitraire : la question de l'exclusivité prime, car elle change la forme même de la matrice cible — un vecteur dans un cas, une matrice dans l'autre. Les questions 2 et 3 ne portent que sur la structure interne de C.

1.2 Le type de classificação est une décision, non une constatation

Un même phénomène métier admet fréquemment plusieurs formulations valides. Une enquête de satisfaction notée de 1 à 5 peut être traitée comme une cible ordinale à cinq niveaux, comme une cible binaire après regroupement ({1,2,3} contre {4,5}), ou comme une cible numérique.

Le critère de décision est l'usage fait de la previsão. Si la décision opérationnelle en aval est binaire — relancer le client ou non —, la formulation binaire concentre la capacité du modelo sur la seule frontière utile.

Point de vigilance : le regroupement de classes est irréversible du point de vue du modelo. Un modelo entraîné sur deux niveaux ne restituera jamais la granularité à cinq niveaux.


2. La classificação binaire

DÉFINITION — classificação binaire

Définition rigoureuse

Cas de la classificação à étiquette unique où K = 2 : C = {c_0, c_1} et Y = C. La fonction de décision f : X → {c_0, c_1} partitionne l'espace d'entrée en deux régions séparées par une frontière de décision.

La plupart des algorithmes n'apprennent pas f directement, mais une fonction de score s : X → ℝ ou une estimation de probabilité conditionnelle p(x) = P(Y = c_1 | X = x), la décision résultant d'une comparaison à un seuil t : f(x) = c_1 si p(x) ≥ t, c_0 sinon.

Traduction en langage courant

Deux réponses possibles, et deux seulement. Le modelo produit en réalité un degré de confiance, converti en réponse en fixant une barre.

Point de vigilance

La séparation entre l'estimation de p(x) et le choix du seuil t est fondamentale. Le seuil de 0,5 est une convention d'implémentation, jamais un optimum démontré. Son réglage est traité au chapitre 062.

2.1 La convention 0 / 1

L'usage impose de coder la cible binaire par les entiers 0 et 1. Cette convention est structurante, non décorative.

PropriétéConséquence de la convention 0 / 1
y.mean()Donne directement la prévalence de la classe 1
Vraisemblance de BernoulliS'écrit p^y · (1−p)^(1−y), base de la log-loss (chapitre 061)
predict_probaRenvoie une matrice (n, 2) ; la colonne d'indice 1 porte la classe 1
matriz de confusãoL'ordre [0, 1] fixe la disposition TN, FP, FN, TP (chapitre 052)
precisão, recall, F1Calculés par rapport à la classe 1 par défaut

Point de vigilance : scikit-learn ordonne les classes par tri croissant, dans l'attribut classes_. Avec des étiquettes textuelles {"Fraude", "Normal"}, l'ordre alphabétique place "Fraude" en indice 0 — l'inverse de l'intention métier. Coder la cible explicitement en 0/1 supprime ce risque.

2.2 Exemple de dados — détection de fraude par carte bancaire

transaction_idmontantpays_cartepays_marchandheurecanalest_fraude
T-00000142,90FRFR14Boutique0
T-0000021 890,00FRRU3En ligne1
T-00000312,50FRFR9Boutique0
T-0000047,20FRFR19En ligne0
T-0000052 450,00FRUS4En ligne1
python
import pandas as pd

df = pd.read_csv("transactions.csv")
y = df["est_fraude"]

print(y.shape)
print(y.dtype)
print(sorted(y.unique()))
print(y.value_counts(normalize=True).round(4))
(284807,)
int64
[0, 1]
est_fraude
0    0.9983
1    0.0017
Name: proportion, dtype: float64

Interprétation : y est un vecteur unidimensionnel de longueur n, une valeur par observação, à deux modalités codées 0 et 1. La classe positive représente 0,17 % des observations : le problème est fortement déséquilibré, ce qui disqualifie l'acurácia comme métrique de pilotage et impose le traitement des chapitres 050 et 051.

2.3 Le choix de la classe positive et ses conséquences

DÉFINITION — classe positive

Définition rigoureuse

Dans un problème binaire, la classe positive est celle par rapport à laquelle sont définis les comptages de la matriz de confusão — vrais positifs, faux positifs, faux négatifs — et donc les métriques asymétriques qui en dérivent : precisão, recall, spécificité, F-beta.

Traduction en langage courant

La classe positive est celle que le modelo est chargé de détecter. Le mot « positif » ne porte aucune connotation favorable : un dépistage positif est un mauvais résultat pour le patient.

Règle de désignation

La classe positive est, par convention professionnelle, la classe d'intérêt : l'événement rare, coûteux ou actionnable — fraude, défaut de paiement, maladie, départ de client, panne. Elle coïncide dans la grande majorité des cas avec la classe minoritaire.

Point de vigilance

Cette désignation est une décision de modélisation explicite. La laisser dépendre de l'ordre alphabétique des étiquettes produit des métriques correctement calculées mais interprétées à contresens.

Inverser la classe positive ne change pas le modelo, mais change le sens de toutes les métriques asymétriques.

GrandeurEffet de l'inversion de la classe positive
modelo appris, frontière de décisionInchangé
acurácia (accuracy)Inchangée — métrique symétrique
precisão, recall, F1Changent de valeur : ils portent sur l'autre classe
recall et spécificitéS'échangent
Faux positifs et faux négatifsS'échangent
ROC-AUCDevient 1 − AUC
PR-AUCChange radicalement : la ligne de base passe de la prévalence d'une classe à celle de l'autre

Conséquence opérationnelle : un recall annoncé à 0,92 n'a aucun sens tant que la classe positive n'est pas nommée. Toute restitution de résultats de classificação binaire doit l'énoncer explicitement.

ANALOGIE — Le test de dépistage

Un laboratoire annonce que son test « détecte 95 % des cas ». La phrase est inexploitable tant qu'on ignore ce qui est détecté.

S'il s'agit de détecter les malades, 95 % est le recall sur la classe « malade » : cinq malades sur cent sont manqués.

S'il s'agit de détecter les bien-portants, 95 % est le recall sur la classe « sain », c'est-à-dire la spécificité : cinq bien-portants sur cent sont inquiétés à tort, et le taux de malades manqués reste totalement inconnu.

Le même nombre, calculé sur le même modelo, décrit deux réalités cliniques sans rapport. Nommer la classe positive est la condition d'interprétabilité du chiffre.

Point essentiel : l'étape de classificação proprement dite est la comparaison au seuil, en aval du modelo ; le modelo, lui, produit une grandeur continue. Cette distinction fonde le point 6 de ce chapitre.


3. La classificação multiclasse

DÉFINITION — classificação multiclasse (multiclass classificação)

Définition rigoureuse

classificação à étiquette unique où K > 2, l'ensemble C = {c_1, ..., c_K} étant exhaustif — toute observação admet une étiquette dans C — et mutuellement exclusif — une observação en admet exactement une. Formellement Y = C, et Σ_k P(Y = c_k | X = x) = 1 pour tout x.

On parle aussi de classificação nominale pour souligner que C n'est muni d'aucune relation d'ordre.

Traduction en langage courant

Plus de deux réponses possibles, une seule réponse par observação, et aucune réponse n'est « supérieure » à une autre.

Point de vigilance

Exhaustivité et exclusivité sont deux hypothèses distinctes, toutes deux falsifiables sur les dados. Une nomenclature comportant une modalité « Autre » satisfait l'exhaustivité au prix d'une classe hétérogène difficile à modéliser.

3.1 Distinction avec le multilabel

La distinction ne porte pas sur le nombre de classes mais sur le nombre d'étiquettes attribuées à une observação.

CritèreMulticlasseMultilabel
Nombre de classes possibles KK > 2K ≥ 2
Nombre d'étiquettes par observaçãoExactement 10, 1, ou plusieurs
Exclusivité mutuelle des classesOui, par hypothèseNon
Forme de y brut(n,)(n, K)
Somme des indicatrices sur une ligneToujours 1Entre 0 et K
Somme des probabilités prédites1, contrainte softmaxNon contrainte

Test opérationnel : formuler la question métier avec l'article défini. « Quel est le motif de ce ticket ? » désigne un problème multiclasse. « Quels sont les motifs de ce ticket ? » désigne un problème multilabel.

3.2 Exemple de dados — routage des tickets d'un service client

ticket_idcanallongueur_texteclient_premiumanciennete_moiscategorie
TK-0001Courriel412014Facturation
TK-0002Téléphone87161Technique
TK-0003Formulaire23503Commercial
TK-0004Courriel1 104128Résiliation
TK-0005Téléphone15609Technique
python
y = df["categorie"]

print(y.shape)
print(y.nunique())
print(y.value_counts())
(12000,)
4
categorie
Technique      5184
Facturation    3612
Commercial     2076
Résiliation    1128
Name: count, dtype: int64

Interprétation : y reste un vecteur de forme (n,), exactement comme dans le cas binaire ; seul le nombre de modalités change. Le passage du binaire au multiclasse ne modifie pas la structure de y. Les effectifs vont de 1 128 à 5 184, soit un rapport de 4,6 : le déséquilibre est modéré mais impose déjà de préférer les moyennes macro aux moyennes micro pour ne pas masquer la classe Résiliation (chapitre 065).

3.3 Les stratégies de décomposition

Certains algorithmes sont intrinsèquement binaires — les machines à vecteurs de support (chapitre 041) en sont l'exemple canonique. Deux schémas de réduction permettent alors de traiter K classes avec des classifieurs binaires.

DÉFINITION — Un-contre-tous et un-contre-un

Un-contre-tous (One-vs-Rest, OvR, aussi One-vs-All)

On entraîne K classifieurs binaires ; le classifieur k oppose c_k à l'union de toutes les autres classes. En previsão, on retient argmax_k s_k(x).

Un-contre-un (One-vs-One, OvO)

On entraîne un classifieur par paire de classes, soit K(K−1)/2 classifieurs ; le classifieur (j, k) n'est entraîné que sur les observations de c_j ou c_k. En previsão, chaque classifieur vote et la classe majoritaire l'emporte.

Traduction en langage courant

Un-contre-tous : « est-ce un chat, oui ou non ? », puis « est-ce un chien, oui ou non ? » ; on garde la réponse la plus assurée. Un-contre-un : on organise un tournoi de duels entre toutes les paires et on compte les victoires.

Point de vigilance

Les scores des K classifieurs OvR proviennent de modèles entraînés séparément, sur des problèmes de difficulté et de prévalence différentes. Leur comparabilité directe par argmax n'est pas garantie : c'est la faiblesse théorique reconnue de la stratégie.

CritèreUn-contre-tous (OvR)Un-contre-un (OvO)
Nombre de classifieursKK(K−1)/2
Pour K = 4 / 10 / 1004 / 10 / 1006 / 45 / 4 950
Taille de chaque sous-problèmen observationsenviron 2n/K observations
Coût total, algoritmo linéaire en nO(K · n)O(K · n)
Coût total, algoritmo quadratique en nO(K · n²)O(n²)
Déséquilibre induitFort : 1 classe contre K−1Aucun entre les deux classes de la paire
Zones d'ambiguïtéAucun ou plusieurs classifieurs positifsVotes circulaires : A bat B, B bat C, C bat A

Lecture du tableau : le nombre de modèles croît quadratiquement en OvO, mais chaque modelo n'est entraîné que sur une fraction des dados. Pour un algoritmo dont le coût d'treinamento est quadratique en n — cas des SVM à noyau —, OvO est donc globalement moins coûteux que OvR malgré son nombre de modèles supérieur. C'est la raison pour laquelle scikit-learn retient OvO par défaut pour SVC, et OvR pour LinearSVC, dont le coût est linéaire.

python
from sklearn.datasets import make_classification
from sklearn.multiclass import OneVsRestClassifier, OneVsOneClassifier
from sklearn.svm import SVC

X, y = make_classification(n_samples=600, n_features=8, n_informative=6,
                           n_classes=6, n_clusters_per_class=1, random_state=0)

ovr = OneVsRestClassifier(SVC()).fit(X, y)
ovo = OneVsOneClassifier(SVC()).fit(X, y)

print("K                  :", len(set(y)))
print("OvR nb estimateurs :", len(ovr.estimators_))
print("OvO nb estimateurs :", len(ovo.estimators_))
K                  : 6
OvR nb estimateurs : 6
OvO nb estimateurs : 15

Interprétation : 6 classifieurs contre 6 × 5 / 2 = 15. La décomposition est une mécanique interne : dans les deux cas y reste un vecteur (n,) et predict renvoie une étiquette unique.

3.4 Les algorithmes nativement multiclasses

algoritmoTraitement du multiclasseChapitre
árvore de decisãoNatif — distribution de classes par feuille037
floresta aleatóriaNatif — agrégation des votes des arbres038
Gradient boostingNatif, généralement par K ensembles d'arbres039
k vizinhos mais próximosNatif — vote majoritaire dans le voisinage040
Naive BayesNatif — argmax de la probabilité a posteriori042
regressão logistiqueNatif en formulation multinomiale (softmax)036
perceptron multicoucheNatif — K neurones de sortie et softmax043
SVM à noyau (SVC)Décomposition OvO041
SVM linéaire (LinearSVC)Décomposition OvR041

Point de vigilance : l'existence d'un traitement natif ne dispense pas de vérifier le déséquilibre entre classes. Un problème à 12 classes dont trois concentrent 90 % des effectifs pose, classe par classe, les mêmes difficultés qu'un problème binaire déséquilibré.


4. La classificação ordinale

DÉFINITION — Échelle ordinale (Stevens, 1946)

Définition rigoureuse

Dans la typologie des échelles de mesure proposée par S. S. Stevens (1946), une échelle est dite ordinale lorsque la relation d'ordre entre les modalités est définie et significative, mais que la distance entre deux modalités consécutives ne l'est pas. Les opérations admissibles sont la comparaison (<, >, =), les rangs, la médiane et les quantiles ; la somme, la moyenne arithmétique et la différence ne le sont pas.

L'échelle d'intervalle, immédiatement supérieure, ajoute la signification des écarts ; l'échelle de rapport ajoute un zéro absolu.

Traduction en langage courant

On sait classer les modalités de la plus faible à la plus forte, mais on ne sait pas de combien elles diffèrent.

Point de vigilance

Coder une variable ordinale en entiers 0, 1, 2, 3 est une opération de codage légitime. Traiter ensuite ces entiers comme des quantités mesurées ne l'est pas : le codage crée une métrique que la mesure ne porte pas.

DÉFINITION — classificação ordinale (ordinal regression, ordinal classificação)

Définition rigoureuse

classificação à étiquette unique où K > 2 et où C est muni d'un ordre total c_1 ≺ c_2 ≺ ... ≺ c_K significatif pour le domaine, sans qu'une distance soit définie sur C. La função de perda doit refléter cet ordre : le coût d'une confusion entre c_1 et c_K doit excéder celui d'une confusion entre c_1 et c_2.

Traduction en langage courant

Des classes rangées de la plus faible à la plus forte, où se tromper de beaucoup est plus grave que se tromper de peu.

Point de vigilance

La désignation anglaise usuelle est ordinal regression, ce qui entretient une confusion avec la regressão au sens du chapitre 010. La tâche reste une classificação : l'espace d'arrivée est fini.

4.1 Exemple de dados — notation interne du risque de crédit

dossier_idrevenu_annueltaux_endettementincidents_12manciennete_bancaireniveau_risque
D-000154 0000,21012Faible
D-000228 5000,4713Moyen
D-000319 2000,6341Critique
D-000441 0000,3827Élevé
D-000567 3000,15021Faible

L'ordre Faible ≺ Moyen ≺ Élevé ≺ Critique est porté par le métier. Aucune donnée ne dit qu'un dossier Critique est « deux fois plus risqué » qu'un dossier Moyen.

python
import pandas as pd
from pandas.api.types import CategoricalDtype

ordre = CategoricalDtype(
    categories=["Faible", "Moyen", "Élevé", "Critique"], ordered=True
)
y = df["niveau_risque"].astype(ordre)

print(y.dtype)
print(y.cat.codes.head().tolist())
print((y > "Moyen").head().tolist())
category
[1, 0, 3, 2, 1]
[False, False, True, True, False]

Interprétation : y demeure un vecteur (n,), comme en binaire et en multiclasse. La différence est portée par le type : ordered=True rend la comparaison y > "Moyen" valide et interprétable. Les codes 0 à 3 sont des rangs, non des quantités.

4.2 Les deux traitements naïfs et ce qu'ils coûtent

TraitementCe qui est supposéCe qui est perdu ou introduit à tort
Comme multiclasse nominalAucun ordre entre les classesPerte d'information : toutes les confusions sont équivalentes ; prédire Faible au lieu de Critique coûte autant que prédire Élevé au lieu de Critique
Comme regressão sur les codes 0-3Écarts égaux entre niveaux consécutifs et cible d'intervalleHypothèse non fondée : rien n'établit que l'écart Faible → Moyen égale l'écart Élevé → Critique ; la sortie continue impose en outre des seuils d'arrondi arbitraires
Comme ordinalOrdre total, distances non définiesTraitement conforme à la nature de la mesure

La perte d'information du traitement multiclasse se mesure directement.

python
import numpy as np
from sklearn.metrics import accuracy_score, mean_absolute_error, cohen_kappa_score

y_true = np.array([0, 1, 2, 3, 2, 1, 0, 3, 2, 1])
pred_A = np.array([0, 1, 2, 3, 2, 1, 0, 3, 1, 1])   # une erreur d'un rang
pred_C = np.array([0, 1, 2, 3, 2, 1, 0, 0, 2, 1])   # une erreur de trois rangs

for nom, p in [("A — erreur de 1 rang", pred_A), ("C — erreur de 3 rangs", pred_C)]:
    print(nom)
    print("  accuracy  :", accuracy_score(y_true, p))
    print("  MAE rangs :", round(mean_absolute_error(y_true, p), 3))
    print("  QWK       :", round(cohen_kappa_score(y_true, p, weights="quadratic"), 3))
A — erreur de 1 rang
  accuracy  : 0.9
  MAE rangs : 0.1
  QWK       : 0.952
C — erreur de 3 rangs
  accuracy  : 0.9
  MAE rangs : 0.3
  QWK       : 0.571

Interprétation : les deux prédictions obtiennent la même acurácia, 0,90, alors que la seconde confond un dossier Critique avec un dossier Faible — l'erreur la plus coûteuse du domaine. L'acurácia, métrique de classificação nominale, est structurellement aveugle à l'amplitude de l'erreur. La MAE sur les rangs les distingue immédiatement, dans un rapport de 1 à 3, et le kappa pondéré quadratique passe de 0,952 à 0,571.

Point de vigilance : la MAE sur des rangs est un indicateur de comparaison entre modèles, non une quantité métier. Elle ne s'interprète pas comme « 0,3 niveau de risque en moyenne », puisque le niveau de risque n'est pas mesurable.

ANALOGIE — Le podium olympique

Les places de première, deuxième et troisième sont strictement ordonnées : nul ne conteste que la première précède la deuxième.

Rien n'autorise pour autant à écrire que l'écart entre le premier et le deuxième égale l'écart entre le deuxième et le troisième. Sur un 100 mètres, le premier peut devancer le deuxième de deux centièmes et le deuxième devancer le troisième d'une demi-seconde.

Traiter les rangs comme des nombres reviendrait à affirmer que ces deux écarts sont identiques. Les ignorer complètement reviendrait à affirmer que finir troisième au lieu de premier n'est pas plus regrettable que finir deuxième. La classificação ordinale est la formulation qui refuse ces deux erreurs.

4.3 Les approches disponibles

ApprochePrincipeRemarque
modelo à cotes proportionnelles (McCullagh, 1980)modelo logistique cumulatif : K−1 seuils partagent un même vecteur de coefficientsRéférence statistique ; hypothèse de proportionnalité des cotes à vérifier
Décomposition cumulative binaire (Frank et Hall, 2001)K−1 classifieurs binaires « y > c_k ? », probabilités recomposées par différencePermet d'utiliser n'importe quel classifieur binaire probabiliste
regressão puis discrétisationRégresser sur les rangs, puis découper par seuils optimisésSimple et souvent efficace ; assume implicitement l'équidistance
Multiclasse à coûts asymétriquesMulticlasse classique avec matrice de coûts pénalisant les grands écartsRéintroduit l'ordre par la fonction de coût

Métriques adaptées : MAE ou RMSE sur les rangs (chapitres 067 et 069), kappa pondéré quadratique (Quadratic Weighted Kappa), matriz de confusão lue en observant la concentration autour de la diagonale (chapitre 052).


5. La classificação multilabel

DÉFINITION — classificação multilabel (multi-label classificação)

Définition rigoureuse

Tâche où l'espace d'arrivée est Y = {0, 1}^K, c'est-à-dire l'ensemble des parties de C = {c_1, ..., c_K}. À chaque observação x est associé un vecteur binaire y = (y_1, ..., y_K)y_k = 1 si l'étiquette c_k s'applique. Aucune contrainte ne pèse sur Σ_k y_k, qui peut valoir 0 (aucune étiquette) jusqu'à K (toutes).

Les étiquettes ne sont ni exclusives ni indépendantes : la modélisation de leurs corrélations constitue la difficulté propre du problème.

Traduction en langage courant

Une observação peut recevoir plusieurs étiquettes à la fois, ou aucune. Chaque étiquette est une question « oui ou non » indépendante en apparence, mais les réponses sont liées entre elles.

Point de vigilance

Le multilabel se distingue du multiclasse-multisortie (multiclass-multioutput), où l'on prédit plusieurs variables cibles, chacune étant elle-même multiclasse. Le multilabel est le cas particulier où toutes les sorties sont binaires.

5.1 Exemple de dados — étiquetage automatique de photographies

photo_idluminance_moyteinte_dominantevisages_detectesplagecoucher_de_soleilpersonneanimal
P-0001182Orange01100
P-000295Gris20010
P-0003164Bleu11011
P-000447Vert00000
P-0005201Orange31110

Une photographie peut être simultanément une plage, un coucher de soleil et contenir une personne. La photo P-0004 ne porte aucune des quatre étiquettes : le vecteur nul est une observation valide, ce qui est impossible en multiclasse.

python
from sklearn.preprocessing import MultiLabelBinarizer

etiquettes = [
    ["plage", "coucher_de_soleil"],
    ["personne"],
    ["plage", "personne", "animal"],
    [],
]
mlb = MultiLabelBinarizer(
    classes=["animal", "coucher_de_soleil", "personne", "plage"]
)
Y = mlb.fit_transform(etiquettes)

print(mlb.classes_)
print(Y)
print(Y.shape)
print(Y.sum(axis=1))
['animal' 'coucher_de_soleil' 'personne' 'plage']
[[0 1 0 1]
 [0 0 1 0]
 [1 0 1 1]
 [0 0 0 0]]
(4, 4)
[2 1 3 0]

Interprétation : Y est une matrice (n, K), et non plus un vecteur. La somme par ligne vaut 2, 1, 3, 0 : elle n'est pas contrainte à 1.

5.2 La distinction stricte avec le multiclasse

Une cible multiclasse encodée en indicatrices (one-hot) produit elle aussi une matrice (n, K). La confusion est fréquente et la distinction formelle est pourtant nette.

python
from sklearn.preprocessing import LabelBinarizer

lb = LabelBinarizer()
print(lb.fit_transform(["Technique", "Facturation", "Commercial", "Technique"]))
[[0 0 1]
 [0 1 0]
 [1 0 0]
 [0 0 1]]
CritèreMulticlasse encodé en indicatricesMultilabel
Forme de la matrice(n, K)(n, K)
Somme de chaque ligneExactement 1Entre 0 et K
Vecteur nul admissibleNonOui
Sortie du modelosoftmax, probabilités sommant à 1K sigmoïdes indépendantes
função de perda usuelleEntropie croisée catégorielleSomme de K entropies croisées binaires
Reconstruction de l'étiquetteargmax sur la ligneSeuillage indépendant de chaque colonne

Critère de reconnaissance : Y.sum(axis=1) constant et égal à 1 signe un multiclasse encodé ; toute autre distribution signe un multilabel.

Ce schéma est la pertinence binaire (binary relevance) : K classifieurs binaires indépendants. Il est simple et parallélisable, mais ignore par construction les corrélations entre étiquettes — la co-occurrence fréquente de plage et coucher_de_soleil n'est jamais exploitée. Les chaînes de classifieurs (Read et al., 2011) y remédient en ajoutant les prédictions des étiquettes précédentes aux variables explicatives des suivantes.

5.3 Conséquence sur les métriques

Une previsão multilabel peut être partiellement correcte, situation qui n'existe ni en binaire ni en multiclasse. Les métriques doivent en tenir compte.

python
import numpy as np
from sklearn.metrics import accuracy_score, hamming_loss, f1_score

Y_true = np.array([[1,1,0,0], [0,0,1,0], [1,0,1,1], [0,0,0,1], [1,1,1,0]])
Y_pred = np.array([[1,1,0,0], [0,0,1,0], [1,0,1,0], [0,1,0,1], [1,0,1,0]])

print("exactitude exacte :", accuracy_score(Y_true, Y_pred))
print("hamming loss      :", round(hamming_loss(Y_true, Y_pred), 3))
print("F1 micro          :", round(f1_score(Y_true, Y_pred, average="micro"), 3))
print("F1 macro          :", round(f1_score(Y_true, Y_pred, average="macro"), 3))
exactitude exacte : 0.4
hamming loss      : 0.15
F1 micro          : 0.842
F1 macro          : 0.792

Interprétation : l'acurácia exacte (subset accuracy) n'accorde le point que si toutes les étiquettes de la ligne sont correctes ; elle tombe à 0,40 alors que 85 % des décisions étiquette par étiquette sont justes. Ces deux chiffres décrivent le même modelo et ne sont pas contradictoires : ils répondent à deux questions différentes.

MétriqueCe qu'elle mesureUsage recommandé
acurácia exacte (subset accuracy)Proportion de lignes entièrement correctesTrès sévère ; pertinente si la sortie est consommée en bloc
Hamming lossProportion d'étiquettes individuelles erronéesIndicateur global tolérant aux erreurs partielles
F1 microAgrège les comptages sur toutes les étiquettesDominé par les étiquettes fréquentes
F1 macroMoyenne des F1 par étiquetteDonne un poids égal aux étiquettes rares
F1 par étiquetteDétail étiquette par étiquetteDiagnostic ; indispensable au pilotage

Point de vigilance : la quasi-totalité des étiquettes d'un problème multilabel réaliste sont rares. Un modelo prédisant systématiquement le vecteur nul obtient souvent une hamming loss excellente. La lecture étiquette par étiquette n'est pas optionnelle.


6. La regressão logistique : un classifieur au nom trompeur

C'est le piège de dénomination le plus fréquent du domaine. La regressão logistique porte le mot « regressão » et résout un problème de classificação.

DÉFINITION — regressão logistique (logistic regression)

Définition rigoureuse

modelo linéaire généralisé (Nelder et Wedderburn, 1972) pour une réponse de loi de Bernoulli, dont la fonction de lien est le logit. Le modelo postule

logit(p(x)) = ln( p(x) / (1 − p(x)) ) = β_0 + β_1 x_1 + ... + β_p x_p

p(x) = P(Y = 1 | X = x). En inversant le lien, on obtient

p(x) = 1 / (1 + exp(−(β_0 + β·x))), c'est-à-dire la fonction logistique appliquée à une combinaison linéaire des variables explicatives. Les coefficients sont estimés par maximisation de la vraisemblance.

Traduction en langage courant

On ajuste une droite, non pas sur la classe elle-même, mais sur le logarithme de la cote de l'événement ; on convertit ensuite ce résultat en probabilité par une courbe en S comprise entre 0 et 1.

Point de vigilance

La sortie native du modelo est une probabilité, pas une classe. La classificação n'apparaît qu'à l'étape suivante, par comparaison à un seuil (chapitre 062). Le modelo est donc bien une regressão sur une quantité continue — la probabilité — au service d'une tâche de classificação.

6.1 L'origine du nom

ÉtapeContributionEffet sur la dénomination
Verhulst, 1838-1845Introduit la fonction logistique pour modéliser la croissance d'une population sous contrainteFournit le qualificatif « logistique », qui désigne la courbe en S
Berkson, 1944Forge le terme logit et promeut le modelo en biostatistiqueInstalle le lien logit comme standard
Cox, 1958Formalise l'analyse de dados binaires par ce modeloDiffusion en statistique appliquée
Nelder et Wedderburn, 1972Cadre unificateur des modèles linéaires généralisésclasse le modelo dans la famille « regressão », par filiation avec la regressão linéaire

Le mot « regressão » est donc un héritage de la famille statistique du modelo — un modelo linéaire ajusté sur une transformation de l'espérance conditionnelle —, non une description de la tâche résolue.

6.2 Vérification dans scikit-learn

python
from sklearn.base import is_classifier, is_regressor
from sklearn.linear_model import LogisticRegression, LinearRegression

print(is_classifier(LogisticRegression()), is_regressor(LogisticRegression()))
print(is_classifier(LinearRegression()), is_regressor(LinearRegression()))
print(hasattr(LogisticRegression(), "predict_proba"))
True False
False True
True

Interprétation : scikit-learn range LogisticRegression dans le module linear_model — par famille mathématique — mais l'expose comme un classifieur : is_classifier renvoie True, la classe hérite de ClassifierMixin, elle possède predict_proba, predict renvoie des étiquettes et score calcule une acurácia. Le rangement du module traduit la parenté algorithmique ; l'interface traduit la tâche.

python
import numpy as np

X = np.array([[10.0], [20.0], [30.0], [40.0], [50.0], [60.0]])
y = np.array([0, 0, 0, 1, 1, 1])

clf = LogisticRegression().fit(X, y)
print(clf.classes_)
print(clf.predict_proba(np.array([[25.0], [45.0]])).round(3))
print(clf.predict(np.array([[25.0], [45.0]])))
[0 1]
[[0.997 0.003]
 [0.003 0.997]]
[0 1]

Interprétation : predict_proba renvoie une matrice (2, 2) de probabilités sommant à 1 par ligne — la sortie native, continue. predict renvoie des étiquettes de classe 0 et 1 — la sortie après seuillage à 0,5. Le mécanisme complet est traité au chapitre 036.

6.3 Les autres dénominations à surveiller

NomNature réelleRemarque
LogisticRegressionClassifieurBinaire, ou multiclasse en formulation multinomiale
RidgeClassifierClassifieurregressão Ridge sur une cible codée −1 / +1, puis signe
SGDClassifierClassifieurOptimiseur, pas famille de modèles ; la perte détermine le modelo
LinearSVCClassifieur« C » pour Classifier ; LinearSVR en est la variante de regressão
LinearRegressionRégresseurCible numérique continue
Ordinal regressionClassifieurTerme consacré pour la classificação ordinale (point 4)
KNeighborsClassifier / KNeighborsRegressorClassifieur / RégresseurMême algoritmo, deux tâches, deux classes distinctes

Règle professionnelle : le nom d'une classe indique sa famille mathématique ou son histoire ; seule la nature de la variável alvo détermine la tâche. En cas de doute, is_classifier et la présence de predict_proba tranchent.


7. Tableau récapitulatif des quatre types

CritèreBinaireMulticlasseOrdinaleMultilabel
Nombre de classesK = 2K > 2K > 2K ≥ 2
Étiquettes par observação1110 à K
Ordre sur les classesSans objetNonOui, sans distanceSans objet
Forme de y(n,)(n,)(n,) ordonné(n, K) binaire
Sortie native du modelo1 probabilitéK probabilités softmaxProbabilités cumulées ou rangK probabilités indépendantes
Somme des probabilités111Non contrainte
ExempleTransaction frauduleuse ou nonRoutage d'un ticket vers une équipeNiveau de risque de créditÉtiquetage d'une photographie
Métriques appropriéesPrécision, rappel, F1, ROC-AUC, PR-AUCExactitude, F1 macro / micro / pondéré, matrice de confusionMAE sur rangs, kappa pondéré quadratique, matrice de confusionHamming loss, F1 micro / macro, F1 par étiquette, exactitude exacte
Métrique à proscrireExactitude si déséquilibre marquéExactitude si déséquilibre marquéExactitude seule : aveugle à l'amplitudeExactitude exacte seule : trop sévère
Chapitres de renvoi052 à 064065067, 069, 052065, 059

Trois invariants à retenir :

  1. Binaire, multiclasse et ordinale partagent la même forme de y ; seuls le nombre de modalités et la présence d'un ordre les séparent.
  2. Le multilabel est le seul type dont la cible est une matrice.
  3. Le type de classificação détermine les métriques admissibles avant de déterminer les algorithmes.

8. Erreurs de raisonnement fréquentes

ERREUR — Qualifier de multiclasse un problème multilabel

Le critère n'est pas le nombre de classes mais le nombre d'étiquettes par observação. Un problème à trois classes dont une observação peut porter deux étiquettes est multilabel, pas multiclasse.

Formulation correcte : « Le multiclasse suppose l'exclusivité mutuelle des classes ; dès qu'une observação peut porter plusieurs étiquettes simultanément, le problème est multilabel et la cible devient une matrice (n, K). »

ERREUR — Traiter une cible ordinale comme une regressão sans justification

Coder Faible, Moyen, Élevé, Critique en 0, 1, 2, 3 puis régresser suppose que les écarts entre niveaux consécutifs sont égaux. Une échelle ordinale ne porte pas cette information (Stevens, 1946).

Formulation correcte : « La regressão sur les rangs est une approximation pragmatique dont l'hypothèse d'équidistance doit être énoncée et, si possible, justifiée par le métier ; elle n'est pas le traitement de référence. »

ERREUR — Traiter une cible ordinale comme un multiclasse nominal

Le traitement nominal rend toutes les confusions équivalentes. Confondre Critique et Faible est alors comptabilisé au même titre que confondre Élevé et Critique, alors que le coût métier diffère d'un ordre de grandeur.

Formulation correcte : « Le traitement nominal d'une cible ordinale est recevable comme référence de départ, à condition de compléter l'acurácia par une métrique sensible à l'amplitude de l'erreur, comme la MAE sur les rangs ou le kappa pondéré quadratique. »

ERREUR — Croire que la regressão logistique est un modelo de regressão

Le nom renvoie à la famille des modèles linéaires généralisés et à la fonction logistique de Verhulst, non à la nature de la tâche. La cible est catégorielle.

Formulation correcte : « La regressão logistique est un algoritmo de classificação. Elle régresse le logit d'une probabilité sur les variables explicatives ; la décision de classe résulte d'une comparaison de cette probabilité à un seuil. »

ERREUR — Laisser la classe positive se définir par l'ordre alphabétique

Avec des étiquettes textuelles, l'ordre par défaut de scikit-learn est alphabétique. "Fraude" devient alors la classe négative et "Normal" la classe positive : precisão et recall sont calculés correctement, mais sur la classe qui n'intéresse personne.

Formulation correcte : « La classe positive est désignée explicitement comme la classe d'intérêt, généralement l'événement rare et coûteux, et cette désignation accompagne systématiquement la restitution des métriques. »

ERREUR — Considérer que K > 2 impose une décomposition OvR ou OvO

Les arbres, forêts, méthodes de boosting, KNN, Naive Bayes, la regressão logistique multinomiale et les réseaux de neurones traitent nativement K > 2. La décomposition ne concerne que les algorithmes intrinsèquement binaires.

Formulation correcte : « La décomposition un-contre-tous ou un-contre-un est un mécanisme de compatibilité pour les classifieurs binaires, appliqué de manière transparente par la bibliothèque, et non une étape obligatoire du multiclasse. »

ERREUR — Piloter un modelo multilabel sur la seule acurácia exacte

L'acurácia exacte exige que toutes les étiquettes d'une observação soient simultanément correctes. Sur K étiquettes, elle s'effondre mécaniquement quand K croît, même pour un modelo dont chaque décision individuelle est bonne.

Formulation correcte : « Un modelo multilabel se pilote sur un jeu de métriques : hamming loss pour la vue globale, F1 macro pour la sensibilité aux étiquettes rares, et F1 par étiquette pour le diagnostic. »


9. Synthèse

LES TROIS QUESTIONS DE QUALIFICATION
    1. Plusieurs étiquettes par observation ?   Oui -> MULTILABEL
    2. Combien de classes exclusives ?          K = 2 -> BINAIRE
    3. Les classes sont-elles ordonnées ?       Oui -> ORDINALE
                                                Non -> MULTICLASSE

FORME DE LA CIBLE
    Binaire     y de forme (n,)      valeurs 0 / 1
    Multiclasse y de forme (n,)      K modalités non ordonnées
    Ordinale    y de forme (n,)      K modalités ordonnées, sans distance
    Multilabel  Y de forme (n, K)    matrice binaire, somme de ligne libre

SIGNATURE FORMELLE DU MULTILABEL
    Y.sum(axis=1) constant et egal a 1  ->  multiclasse encode
    Y.sum(axis=1) quelconque            ->  multilabel

CLASSE POSITIVE (binaire)
    Toujours designee explicitement : l'evenement rare, couteux, actionnable.
    L'inversion echange rappel et specificite et transforme AUC en 1 - AUC.

CIBLE ORDINALE
    Traitee en multiclasse : perte de l'ordre, toutes les erreurs equivalentes.
    Traitee en regression  : hypothese d'ecarts egaux, non fondee (Stevens 1946).
    Traitement conforme    : modeles cumulatifs, metriques sensibles a l'ecart.

DECOMPOSITION MULTICLASSE
    Un-contre-tous : K classifieurs,        sous-problemes desequilibres
    Un-contre-un   : K(K-1)/2 classifieurs, sous-problemes de taille 2n/K

REGRESSION LOGISTIQUE
    Nom herite de la fonction logistique (Verhulst) et de la famille des
    modeles lineaires generalises (Nelder et Wedderburn, 1972).
    Tache resolue : CLASSIFICATION. Sortie native : une probabilite.
    Detail au chapitre 036.

Énoncé de synthèse

Le type d'une tâche de classificação se lit sur la forme de la variável alvo et non sur le vocabulaire employé : un vecteur à deux modalités désigne un problème binaire, un vecteur à K modalités un problème multiclasse — ordinal si ces modalités sont rangées sans être mesurées —, une matrice binaire un problème multilabel ; et le nom d'un algoritmo, comme celui de la regressão logistique, renseigne sur sa famille mathématique, jamais sur la tâche qu'il résout.


Quiz associés

  • 011.1-quiz-qualification-tache.md
  • 011.2-quiz-classificação-binaire.md
  • 011.3-quiz-classificação-multiclasse.md
  • 011.4-quiz-classificação-ordinale.md
  • 011.5-quiz-classificação-multilabel.md
  • 011.6-quiz-regression-logistique.md
  • 011.7-quiz-synthese-comparative.md

Chapitre suivant : 012-cycle-de-vie-ml.md