Skip to content

Entraîner une forêt aléatoire et lire une matrice de confusion

Un arbre de décision unique a tendance à sur-apprendre : il peut construire des règles si spécifiques qu’elles ne généralisent plus. Le RandomForestClassifier entraîne de nombreux arbres, chacun sur un sous-échantillon aléatoire des données et des features, puis fait voter l’ensemble — un principe appelé bagging, qui réduit la variance sans trop augmenter le biais.

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
clf = RandomForestClassifier(n_estimators=200, random_state=42)
clf.fit(X_train_scaled, y_train)
predictions = clf.predict(X_test_scaled)
print("accuracy modele:", accuracy_score(y_test, predictions))
accuracy modele: 0.7652
baseline_pred = np.zeros_like(y_test) # toujours prédire "payé a temps"
print("accuracy baseline:", accuracy_score(y_test, baseline_pred))
accuracy baseline (toujours 'a temps'): 0.7733

Un résultat qui mérite qu’on s’y arrête : le modèle fait légèrement moins bien que la baseline sur cette métrique. Est-ce un échec ? La leçon suivante montre que la réponse dépend entièrement de ce qu’on mesure.

from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, predictions))
[[159 32]
[ 44 12]]

Une matrice de confusion binaire se lit ainsi (convention scikit-learn : lignes = réalité, colonnes = prédiction, classe 0 puis classe 1) :

Prédit : à temps Prédit : en retard
Réel : à temps 159 (vrai négatif) 32 (faux positif)
Réel : en retard 44 (faux négatif) 12 (vrai positif)

Deux types d’erreurs bien distincts apparaissent : les faux positifs (32 factures saines signalées à tort, coût = temps perdu à vérifier inutilement) et les faux négatifs (44 factures à risque non détectées, coût = relance manquée). Pour ce cas d’usage métier, un faux négatif est probablement plus coûteux qu’un faux positif — une considération que l’accuracy seule ne capture jamais.

👉 Le piège de l’accuracy sur des classes déséquilibrées


Junior TSAFACK – 12/09/2026