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 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).
| Ordre | Question | Réponse | Type retenu |
|---|---|---|---|
| 1 | Une observação peut-elle porter plusieurs étiquettes simultanément ? | Oui | Multilabel |
| 2 | Combien de classes mutuellement exclusives ? | K = 2 | Binaire |
| 2 | Combien de classes mutuellement exclusives ? | K > 2 | Passer à la question 3 |
| 3 | Les classes sont-elles munies d'un ordre total naturel ? | Non | Multiclasse (nominale) |
| 3 | Les classes sont-elles munies d'un ordre total naturel ? | Oui | Ordinale |
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.
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.
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.
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 Bernoulli | S'écrit p^y · (1−p)^(1−y), base de la log-loss (chapitre 061) |
predict_proba | Renvoie une matrice (n, 2) ; la colonne d'indice 1 porte la classe 1 |
| matriz de confusão | L'ordre [0, 1] fixe la disposition TN, FP, FN, TP (chapitre 052) |
| precisão, recall, F1 | Calculé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.
| transaction_id | montant | pays_carte | pays_marchand | heure | canal | est_fraude |
|---|---|---|---|---|---|---|
| T-000001 | 42,90 | FR | FR | 14 | Boutique | 0 |
| T-000002 | 1 890,00 | FR | RU | 3 | En ligne | 1 |
| T-000003 | 12,50 | FR | FR | 9 | Boutique | 0 |
| T-000004 | 7,20 | FR | FR | 19 | En ligne | 0 |
| T-000005 | 2 450,00 | FR | US | 4 | En ligne | 1 |
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: float64Interpré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.
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.
| Grandeur | Effet de l'inversion de la classe positive |
|---|---|
| modelo appris, frontière de décision | Inchangé |
| acurácia (accuracy) | Inchangée — métrique symétrique |
| precisão, recall, F1 | Changent de valeur : ils portent sur l'autre classe |
| recall et spécificité | S'échangent |
| Faux positifs et faux négatifs | S'échangent |
| ROC-AUC | Devient 1 − AUC |
| PR-AUC | Change 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.
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.
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.
La distinction ne porte pas sur le nombre de classes mais sur le nombre d'étiquettes attribuées à une observação.
| Critère | Multiclasse | Multilabel |
|---|---|---|
Nombre de classes possibles K | K > 2 | K ≥ 2 |
| Nombre d'étiquettes par observação | Exactement 1 | 0, 1, ou plusieurs |
| Exclusivité mutuelle des classes | Oui, par hypothèse | Non |
Forme de y brut | (n,) | (n, K) |
| Somme des indicatrices sur une ligne | Toujours 1 | Entre 0 et K |
| Somme des probabilités prédites | 1, contrainte softmax | Non 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.
| ticket_id | canal | longueur_texte | client_premium | anciennete_mois | categorie |
|---|---|---|---|---|---|
| TK-0001 | Courriel | 412 | 0 | 14 | Facturation |
| TK-0002 | Téléphone | 87 | 1 | 61 | Technique |
| TK-0003 | Formulaire | 235 | 0 | 3 | Commercial |
| TK-0004 | Courriel | 1 104 | 1 | 28 | Résiliation |
| TK-0005 | Téléphone | 156 | 0 | 9 | Technique |
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: int64Interpré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).
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.
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ère | Un-contre-tous (OvR) | Un-contre-un (OvO) |
|---|---|---|
| Nombre de classifieurs | K | K(K−1)/2 |
Pour K = 4 / 10 / 100 | 4 / 10 / 100 | 6 / 45 / 4 950 |
| Taille de chaque sous-problème | n observations | environ 2n/K observations |
Coût total, algoritmo linéaire en n | O(K · n) | O(K · n) |
Coût total, algoritmo quadratique en n | O(K · n²) | O(n²) |
| Déséquilibre induit | Fort : 1 classe contre K−1 | Aucun entre les deux classes de la paire |
| Zones d'ambiguïté | Aucun ou plusieurs classifieurs positifs | Votes 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.
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 : 15Interpré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.
| algoritmo | Traitement du multiclasse | Chapitre |
|---|---|---|
| árvore de decisão | Natif — distribution de classes par feuille | 037 |
| floresta aleatória | Natif — agrégation des votes des arbres | 038 |
| Gradient boosting | Natif, généralement par K ensembles d'arbres | 039 |
| k vizinhos mais próximos | Natif — vote majoritaire dans le voisinage | 040 |
| Naive Bayes | Natif — argmax de la probabilité a posteriori | 042 |
| regressão logistique | Natif en formulation multinomiale (softmax) | 036 |
| perceptron multicouche | Natif — K neurones de sortie et softmax | 043 |
SVM à noyau (SVC) | Décomposition OvO | 041 |
SVM linéaire (LinearSVC) | Décomposition OvR | 041 |
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é.
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 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.
| dossier_id | revenu_annuel | taux_endettement | incidents_12m | anciennete_bancaire | niveau_risque |
|---|---|---|---|---|---|
| D-0001 | 54 000 | 0,21 | 0 | 12 | Faible |
| D-0002 | 28 500 | 0,47 | 1 | 3 | Moyen |
| D-0003 | 19 200 | 0,63 | 4 | 1 | Critique |
| D-0004 | 41 000 | 0,38 | 2 | 7 | Élevé |
| D-0005 | 67 300 | 0,15 | 0 | 21 | Faible |
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.
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.
| Traitement | Ce qui est supposé | Ce qui est perdu ou introduit à tort |
|---|---|---|
| Comme multiclasse nominal | Aucun ordre entre les classes | Perte 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'intervalle | Hypothè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 ordinal | Ordre total, distances non définies | Traitement conforme à la nature de la mesure |
La perte d'information du traitement multiclasse se mesure directement.
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.571Interpré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.
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.
| Approche | Principe | Remarque |
|---|---|---|
| modelo à cotes proportionnelles (McCullagh, 1980) | modelo logistique cumulatif : K−1 seuils partagent un même vecteur de coefficients | Ré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érence | Permet d'utiliser n'importe quel classifieur binaire probabiliste |
| regressão puis discrétisation | Régresser sur les rangs, puis découper par seuils optimisés | Simple et souvent efficace ; assume implicitement l'équidistance |
| Multiclasse à coûts asymétriques | Multiclasse classique avec matrice de coûts pénalisant les grands écarts | Ré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).
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) où 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.
| photo_id | luminance_moy | teinte_dominante | visages_detectes | plage | coucher_de_soleil | personne | animal |
|---|---|---|---|---|---|---|---|
| P-0001 | 182 | Orange | 0 | 1 | 1 | 0 | 0 |
| P-0002 | 95 | Gris | 2 | 0 | 0 | 1 | 0 |
| P-0003 | 164 | Bleu | 1 | 1 | 0 | 1 | 1 |
| P-0004 | 47 | Vert | 0 | 0 | 0 | 0 | 0 |
| P-0005 | 201 | Orange | 3 | 1 | 1 | 1 | 0 |
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.
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.
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.
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ère | Multiclasse encodé en indicatrices | Multilabel |
|---|---|---|
| Forme de la matrice | (n, K) | (n, K) |
| Somme de chaque ligne | Exactement 1 | Entre 0 et K |
| Vecteur nul admissible | Non | Oui |
| Sortie du modelo | softmax, probabilités sommant à 1 | K sigmoïdes indépendantes |
| função de perda usuelle | Entropie croisée catégorielle | Somme de K entropies croisées binaires |
| Reconstruction de l'étiquette | argmax sur la ligne | Seuillage 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.
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.
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.792Interpré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étrique | Ce qu'elle mesure | Usage recommandé |
|---|---|---|
| acurácia exacte (subset accuracy) | Proportion de lignes entièrement correctes | Très sévère ; pertinente si la sortie est consommée en bloc |
| Hamming loss | Proportion d'étiquettes individuelles erronées | Indicateur global tolérant aux erreurs partielles |
| F1 micro | Agrège les comptages sur toutes les étiquettes | Dominé par les étiquettes fréquentes |
| F1 macro | Moyenne des F1 par étiquette | Donne un poids égal aux étiquettes rares |
| F1 par étiquette | Détail étiquette par étiquette | Diagnostic ; 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.
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 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
où 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.
| Étape | Contribution | Effet sur la dénomination |
|---|---|---|
| Verhulst, 1838-1845 | Introduit la fonction logistique pour modéliser la croissance d'une population sous contrainte | Fournit le qualificatif « logistique », qui désigne la courbe en S |
| Berkson, 1944 | Forge le terme logit et promeut le modelo en biostatistique | Installe le lien logit comme standard |
| Cox, 1958 | Formalise l'analyse de dados binaires par ce modelo | Diffusion en statistique appliquée |
| Nelder et Wedderburn, 1972 | Cadre unificateur des modèles linéaires généralisés | classe 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.
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
TrueInterpré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.
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.
| Nom | Nature réelle | Remarque |
|---|---|---|
LogisticRegression | Classifieur | Binaire, ou multiclasse en formulation multinomiale |
RidgeClassifier | Classifieur | regressão Ridge sur une cible codée −1 / +1, puis signe |
SGDClassifier | Classifieur | Optimiseur, pas famille de modèles ; la perte détermine le modelo |
LinearSVC | Classifieur | « C » pour Classifier ; LinearSVR en est la variante de regressão |
LinearRegression | Régresseur | Cible numérique continue |
| Ordinal regression | Classifieur | Terme consacré pour la classificação ordinale (point 4) |
KNeighborsClassifier / KNeighborsRegressor | Classifieur / Régresseur | Mê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.
| Critère | Binaire | Multiclasse | Ordinale | Multilabel |
|---|---|---|---|---|
| Nombre de classes | K = 2 | K > 2 | K > 2 | K ≥ 2 |
| Étiquettes par observação | 1 | 1 | 1 | 0 à K |
| Ordre sur les classes | Sans objet | Non | Oui, sans distance | Sans objet |
Forme de y | (n,) | (n,) | (n,) ordonné | (n, K) binaire |
| Sortie native du modelo | 1 probabilité | K probabilités softmax | Probabilités cumulées ou rang | K probabilités indépendantes |
| Somme des probabilités | 1 | 1 | 1 | Non contrainte |
| Exemple | Transaction frauduleuse ou non | Routage d'un ticket vers une équipe | Niveau de risque de crédit | Étiquetage d'une photographie |
| Métriques appropriées | Précision, rappel, F1, ROC-AUC, PR-AUC | Exactitude, F1 macro / micro / pondéré, matrice de confusion | MAE sur rangs, kappa pondéré quadratique, matrice de confusion | Hamming loss, F1 micro / macro, F1 par étiquette, exactitude exacte |
| Métrique à proscrire | Exactitude si déséquilibre marqué | Exactitude si déséquilibre marqué | Exactitude seule : aveugle à l'amplitude | Exactitude exacte seule : trop sévère |
| Chapitres de renvoi | 052 à 064 | 065 | 067, 069, 052 | 065, 059 |
Trois invariants à retenir :
y ; seuls le
nombre de modalités et la présence d'un ordre les séparent.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). »
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. »
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. »
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. »
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. »
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. »
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. »
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 à
Kmodalité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.md011.2-quiz-classificação-binaire.md011.3-quiz-classificação-multiclasse.md011.4-quiz-classificação-ordinale.md011.5-quiz-classificação-multilabel.md011.6-quiz-regression-logistique.md011.7-quiz-synthese-comparative.mdChapitre suivant : 012-cycle-de-vie-ml.md