ML Atlas

Le machine learning en partant de zéro · Leçon 1.3 · 4 sur 33 leçons prêtes · 12 min

La référence : à quoi comparer votre modèle ?

En bref

Avant de vanter un modèle, calculez le score sans apprentissage : classe la plus fréquente ou moyenne. Si les malades sont rares, « toujours sain » brille.

Échauffement Deux questions de leçons précédentes. Une minute, sans jamais bloquer la leçon.
De la leçon 1.2 : Données, variables, étiquettes et découpage Vous changez seulement la graine aléatoire du découpage et l’exactitude de test bouge. Qu’est-ce que cela montre ?

Voir la réponse

Bonne réponse : Un score de test est une estimation qui dépend des lignes tombées dans le jeu de test

Des graines différentes donnent des lignes de test différentes, donc le score varie par hasard, d’autant plus que le jeu de test est petit.

De la leçon 1.1 : Qu’est-ce que l’apprentissage automatique ? Un modèle a raison environ 60 % du temps sur ces données de tumeurs. Pourquoi n’est-ce pas impressionnant ?

Voir la réponse

Bonne réponse : Parce que répondre toujours « bénigne » a déjà raison dans près des deux tiers des cas

La plupart des tumeurs du jeu de données sont bénignes, donc un modèle doit d’abord battre la réponse majoritaire triviale pour être utile.

Dans la leçon 0.1, l’arbre reconnaissait 95,1 % des manchots et deviner, 43,7 %. Ce second nombre est la référence (en anglais, baseline) : le score d’une réponse qui n’apprend rien. Sans elle, vous ne savez pas si un modèle a appris quoi que ce soit. Aujourd’hui, vous verrez comment la calculer dans deux tâches et quand l’exactitude seule vous trompe. Les données : 569 biopsies de tumeurs du sein et 442 patients diabétiques.

Prédisez, puis vérifiez Le test garde 107 biopsies bénignes et 1 seule maligne. Le « modèle » répond « bénigne » pour chaque biopsie. Quelle exactitude obtient-il, et combien de malignes trouve-t-il ?
Quel est votre degré de certitude ?

Labo interactif

Ce labo interactif fonctionne dans un navigateur avec JavaScript activé. Le texte qui l’entoure décrit ce qu’il montre.

Voir la réponse

Bonne réponse : Environ 99 %, plus que la règle apprise, et il n’en trouve aucune

107 biopsies sur 108, c’est 99,1 % d’exactitude, et la maligne passe inaperçue. La règle apprise à un seuil obtient 90,7 % sur ce test, moins, mais elle trouve bien cette biopsie maligne. Sur le test complet, avec 64 malignes, « toujours bénigne » n’obtient que 62,6 %.

À vous de jouer

  • Commencez par les biopsies avec les 64 malignes. De combien la règle apprise bat-elle « toujours bénigne » ?
  • Déplacez le curseur vers la droite jusqu’à 5 malignes, puis 1. Que devient l’exactitude de « toujours bénigne », et le nombre de malignes trouvées ?
  • Passez au diabète. Comparez l’erreur de la droite sur l’IMC et du modèle à 10 mesures avec l’erreur de la moyenne seule.

Une fois vérifié dans le lab, nommons ce que vous voyez.

L’idée en quelques mots

La référence est la réponse la plus simple qu’on puisse donner sans apprendre. En classification, c’est la classe la plus fréquente : sur les 398 biopsies d’apprentissage, 250 sont bénignes, donc la réponse est toujours « bénigne ». En régression, c’est la moyenne : chaque patient reçoit la même progression prédite, la moyenne des patients d’apprentissage.

Un modèle n’a de sens que s’il bat nettement la référence sur les mêmes données de test. Sur les biopsies, la règle à une mesure et un seuil obtient 91,2 % contre 62,6 %. Pour le diabète, le modèle à 10 mesures a une erreur de 2827 contre 5076 pour la moyenne, soit 44,3 % de moins. Une droite sur l’IMC seul ne réduit l’erreur que de 19,3 %.

Il existe aussi une référence plus faible : deviner selon les proportions, c’est-à-dire « bénigne » avec une probabilité égale à la part de bénignes parmi les biopsies d’apprentissage. En moyenne, elle obtient 53,2 %, moins que « toujours bénigne ». C’est pourquoi on prend la classe la plus fréquente comme référence : le hasard est plus facile à battre qu’une vraie compréhension.

Jak to policzono
  • Biopsies : Breast Cancer Wisconsin (Diagnostic), UCI, licence CC BY 4.0. 569 biopsies (357 bénignes, 212 malignes), 10 mesures des noyaux cellulaires.
  • Diabète : le jeu Diabetes (Efron et al., 2004) fourni avec scikit-learn ; les auteurs n’ont indiqué aucune licence. 442 patients, 10 mesures, progression de la maladie un an plus tard.
  • Découpage 70/30, le même que train_test_split(test_size=0.3, random_state=1) dans scikit-learn ; biopsies stratifiées. Le test compte 171 biopsies et 133 patients.
  • Règle : un arbre de décision à une question (CART). Modèle de régression : moindres carrés.

Pourquoi ça marche

L’exactitude de « toujours la classe la plus fréquente » est simplement la part de cette classe dans le test. Sur le test complet, 107 biopsies sur 171 sont bénignes, d’où 62,6 %. Gardez 1 maligne et les bénignes font 107 sur 108, d’où 99,1 %. L’exactitude de la référence ne dit rien des biopsies. Elle dit seulement à quel point l’autre classe est rare.

C’est pourquoi, avec une classe rare, l’exactitude ne distingue plus un bon modèle d’un modèle inutile. Avec 5 malignes dans le test, « toujours bénigne » obtient 95,5 % et la règle 91,1 %, alors que seule la règle trouve les 5. Ce n’est pas un découpage chanceux : sur 100 découpages différents, « toujours bénigne » bat la règle en exactitude dans 82. Ce qui aide, c’est un second nombre à côté de l’exactitude : combien de cas de la classe rare le modèle a vraiment trouvés.

En régression, la moyenne est la meilleure réponse constante : aucun autre nombre unique ne donne une erreur quadratique moyenne plus basse sur les données d’apprentissage. Tout modèle qui dispose de mesures devrait la battre, et ici il le fait toujours. Sur 100 découpages, la droite sur l’IMC et le modèle à 10 mesures ont une erreur plus basse que la moyenne à chaque fois, en moyenne 33,7 % et 48,5 % de moins.

Erreur fréquente

Vrai ou faux : « 90 % d’exactitude, c’est beaucoup ». Faux, ou plutôt : le nombre seul ne le dit pas. Quand 1 personne sur 100 est malade, le test « toujours sain » a 99 % d’exactitude et ne trouve personne. Un modèle à 90 % serait alors pire que rien en exactitude, et pourtant il pourrait être très utile s’il trouve les malades. Donnez toujours la référence à côté du score et vérifiez combien de cas de la classe rare le modèle a trouvés.

Là où l’analogie a ses limites : la référence est un plancher, pas un objectif. La battre d’un cheveu ne veut généralement rien dire, car un autre découpage des données peut inverser le résultat.

Quiz

Trois questions pour vérifier vos acquis. Choisissez une réponse ou dépliez la solution sous chaque question. Au clavier : les flèches choisissent, Entrée ou Espace valide.

1. Quelle est la référence en classification ?
Voir la réponse

Bonne réponse : La réponse « toujours la classe la plus fréquente à l’apprentissage »

La référence est le score d’une réponse sans apprentissage. Ici, « toujours bénigne » obtient 62,6 % sur le test complet, et tout modèle doit la battre nettement.

2. Le test a 108 biopsies, dont 1 maligne. « Toujours bénigne » obtient 99,1 %, la règle 90,7 %. Lequel vaut mieux pour le dépistage ?
Voir la réponse

Bonne réponse : La règle, car elle trouve la maligne et « toujours bénigne » jamais

Avec une classe rare, l’exactitude récompense le fait de l’ignorer. « Toujours bénigne » ne trouvera jamais de biopsie maligne, quel que soit leur nombre.

3. Un modèle de régression a une erreur de 4096, la moyenne 5076. De combien le modèle fait-il mieux que la référence ?
Voir la réponse

Bonne réponse : De 19,3 %, car 1 − 4096 / 5076 ≈ 0,193, ce qui est peu

On compare avec la référence : la droite sur l’IMC réduit l’erreur de 19,3 %, le modèle à 10 mesures de 44,3 %.

À retenir

  • La référence est le score sans apprentissage : la classe la plus fréquente en classification, la moyenne en régression.
  • On compare un modèle à la référence sur les mêmes données de test, pas à zéro.
  • Quand une classe est rare, « toujours la classe fréquente » a une exactitude élevée et ne trouve personne ; indiquez aussi combien de cas rares le modèle a trouvés.
  • Vérifiez l’avance sur de nombreux découpages, car un seul peut bien tomber par hasard.

Pour aller plus loin : formule, code, pratique

Les maths

L’exactitude de la réponse « toujours la classe k » est la part de cette classe dans le test : exactitude = n_k / n. Sur le test complet 107 / 171 ≈ 0,626, avec une seule maligne 107 / 108 ≈ 0,991.

Deviner « bénigne » avec la probabilité p (la part de bénignes à l’apprentissage, 250 / 398 ≈ 0,628) est juste en moyenne p · q + (1 − p) · (1 − q) du temps, où q est la part de bénignes dans le test. Sur le test complet, cela donne environ 0,532.

En régression, une réponse constante c a l’erreur MSE(c) = (1/n) · Σ (yᵢ − c)². Sa dérivée −(2/n) · Σ (yᵢ − c) s’annule en c = ȳ, donc la moyenne donne la plus petite erreur de toutes les constantes. L’amélioration relative vaut 1 − MSE(modèle) / MSE(moyenne) : pour 10 mesures, 1 − 2827 / 5076 ≈ 0,443.

En code (Python)

La même expérience dans scikit-learn : la référence et la règle à un seuil sur les biopsies avec 64, 5 et 1 malignes dans le test, la comparaison sur 100 découpages, puis la moyenne, la droite sur l’IMC et le modèle à 10 mesures pour le diabète.

import numpy as np
from sklearn.datasets import load_breast_cancer, load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LinearRegression

X, y = load_breast_cancer(return_X_y=True)
X = X[:, :10]  # les 10 mesures « mean », comme dans le lab ; y : 0 = maligne, 1 = bénigne
def biopsies(seed, keep_malignant):
    tr, te = train_test_split(np.arange(len(y)), test_size=0.3, stratify=y, random_state=seed)
    te = np.sort(te)  # lignes de test dans l’ordre du fichier, comme dans le lab
    major = np.bincount(y[tr]).argmax()  # référence : la classe la plus fréquente parmi les biopsies d’apprentissage
    rule = DecisionTreeClassifier(max_depth=1, random_state=0).fit(X[tr], y[tr])  # une mesure, un seuil
    rows = np.r_[te[y[te] == 1], te[y[te] == 0][:keep_malignant]]  # toutes les bénignes + les m premières malignes
    pred = rule.predict(X[rows])
    return (y[rows] == major).mean(), ((major == 0) & (y[rows] == 0)).sum(), (pred == y[rows]).mean(), ((pred == 0) & (y[rows] == 0)).sum()
for m in (64, 5, 1):
    base, base_found, acc, found = biopsies(1, m)
    print(f"malignant {m}: always benign {base:.3f} (finds {base_found}), rule {acc:.3f} (finds {found})")
wins = sum(biopsies(s, 5)[0] > biopsies(s, 5)[2] for s in range(100))
print(f"100 splits, 5 malignant: always benign beats the rule in {wins}")

Xd, yd = load_diabetes(return_X_y=True)
def diabetes(seed):
    a, b, c, e = train_test_split(Xd, yd, test_size=0.3, random_state=seed)
    mse = lambda p: ((e - p) ** 2).mean()
    return mse(c.mean()), mse(LinearRegression().fit(a[:, [2]], c).predict(b[:, [2]])), mse(LinearRegression().fit(a, c).predict(b))
mean, bmi, full = diabetes(1)
print(f"diabetes: mean {mean:.0f}, BMI {bmi:.0f} ({1 - bmi / mean:.1%} lower), all 10 {full:.0f} ({1 - full / mean:.1%} lower)")
r = np.array([diabetes(s) for s in range(100)])
print(f"100 splits: BMI beats the mean in {(r[:, 1] < r[:, 0]).sum()}, all 10 in {(r[:, 2] < r[:, 0]).sum()}; error lower by {1 - r[:, 1].mean() / r[:, 0].mean():.1%} and {1 - r[:, 2].mean() / r[:, 0].mean():.1%} on average")

Sortie

malignant 64: always benign 0.626 (finds 0), rule 0.912 (finds 59)
malignant 5: always benign 0.955 (finds 0), rule 0.911 (finds 5)
malignant 1: always benign 0.991 (finds 0), rule 0.907 (finds 1)
100 splits, 5 malignant: always benign beats the rule in 82
diabetes: mean 5076, BMI 4096 (19.3% lower), all 10 2827 (44.3% lower)
100 splits: BMI beats the mean in 100, all 10 in 100; error lower by 33.7% and 48.5% on average

Sur le découpage 1, les nombres sont les mêmes que dans le lab. Le modèle à 10 mesures du lab travaille sur des données arrondies à deux décimales, donc son erreur peut différer de ce code d’une fraction, mais arrondie elle vaut aussi 2827.

Pour les praticiens
  • Dans scikit-learn, la référence vient de DummyClassifier(strategy="most_frequent") et DummyRegressor(strategy="mean"). Calculez-la sur le même découpage que le modèle.
  • Avec des classes déséquilibrées, donnez à côté de l’exactitude le rappel de la classe rare ou l’exactitude équilibrée ; « toujours la classe fréquente » a une exactitude équilibrée de 50 %.
  • Une référence plus forte est souvent une règle simple à une mesure ou le modèle que l’entreprise utilise déjà. Un nouveau modèle doit battre le meilleur d’entre eux.
  • Quand l’avance sur la référence est faible, vérifiez-la sur de nombreux découpages ou par validation croisée avant de l’annoncer.

Aller plus loin dans l’Atlas

Articles de l’encyclopédie sur les notions de cette leçon :